본문 바로가기
GIt

[git][fork][bash] git bash로 협업하기 - Forking Workflow

by codeok 2020. 9. 19.
반응형

현재 학습 기록용으로 블로그를 작성하고 있습니다.

부족한 내용이 있거나 맞지 않은 내용이 있으면 댓글 부탁드립니다!

또한 이 글은 하단의 git fork 협업 방식을 아주 상세하게 잘 적어주신 글을 참고했습니다.

 

https://gmlwjd9405.github.io/2017/10/28/how-to-collaborate-on-GitHub-2.html

 

[GitHub] GitHub로 협업하는 방법[2] - Forking Workflow - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

git fork 협업 방식과 이론에 대해서는 위의 포스팅을 참고해주시면 감사하겠습니다.

본 포스팅에서는 Github 홈페이지에서 조직을 생성하고, git bash에 조직에서 생성한 공용 원격 저장소를 clone을 해서 로컬 저장소를 구성하고, 브랜치를 만들어서 공용 원격 저장소에 push하는 작업까지 해보겠습니다. 

먼저, github 페이지에서 회원가입을 했다고 가정을 하고 조직(Organization)을 생성하겠습니다.

TODO

1. github 조직 생성 후 개인 저장소로 Fork
2. git bash로 Forking Workflow 작업을 위한 세팅
3. git branch를 통해서 기능 개발을 하고 원격으로 연결한 공용 저장소에 업로드
4. 조직의 공용 저장소 변동 사항을 Local PC로 가져오기

 

1. github 조직 생성 후 개인 저장소로 Fork

  • github 메인 페이지에서 우측 상단에 + 를 누르고, New Organization을 누릅니다.

 

 

  • New Oraganzation을 클릭하면 다음 페이지에서 team 생성을 어떤 걸로 할지 묻습니다.
    • 당연히 공짜가 좋은거죠...ㅎㅎ Free를 선택합니다.

 

 

  • 최상단에는 팀 명을 정해주고, email에는 자신의 이메일을 적어줍니다.
    • Next를 누르고 팀을 생성합니다.

 

 

  • 저희는 테스트용으로 사용을 하니 팀원을 초대하지 않고, 하단에 Complete를 누르겠습니다.
  • 다른 인원들과 협업을 하려면 여기서 팀원들을 초대하고 Complete를 누르면 됩니다.
    • 물론, 지금은 그냥 패스하고 추후에 팀원들을 초대할 수 있습니다.

 

 

  • 생성이 완료된것 같았지만 다음과 같은 설문조사에 응해줍니다.
    • 모든 항목을 작성하고 하단에 Submit을 누릅니다.

 

 

  • 다음과 같이 위에서 설정한 gitfork-test라는 조직이 생성되었습니다.
  • gitfork-test에서 저장소를 하나 생성해줍니다.

 

 

  • 개인 저장소 이름을 Repository name 하단에 작성해줍니다.
  • 공용 저장소를 Fork 하기 위해서는 Public으로 생성해줍니다.
  • Add a README도 추가해줍니다.
  • Create Repository를 눌러줍니다.

 

 

  • 아래와 같이 git-test 저장소가 생겼습니다. 저희는 git-test를 조직의 공용 저장소로 두고 Fork(자기 복제)를 진행해서 개인 저장소로 git-test를 불러오겠습니다.
  • 추후에는 Fork한 저장소를 조직에 있는 공용 저장소에 원격으로 연결해서 작업을 할 것입니다.
  • 우측에 Fork를 눌러서 자신의 계정 아이디를 선택해줍니다.

  • gitfork-test 조직에 git-test를 Fork해오면 자신의 계정으로 들어오면 일반 저장소와는 생김새가 다른 문양의 [계정 이름/git-test] 저장소가 생긴 것을 볼 수 있습니다.
  • 이제 github페이지에서 저장소를 생성하는 작업은 끝나고, git bash를 통해서 작업을 하도록 하겠습니다.
  • git bash 설치는 상세하게 잘 정리해주신 블로거님의 포스팅을 참고해주시길 바랍니다. => gabii.tistory.com/entry/Git-Git-Bash-219-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

 

 

2. git bash로 Forking Workflow 작업을 위해 세팅

2.1 작업할 폴더를 생성하고 폴더 안으로 이동합니다.

  • 작박구리 폴더 생성 후 저희가 작업할 작박구리 폴더 안으로 이동합니다.
# cd(change directory) : 디렉토리의 위치를 이동하는 명령어
cd ~/Desktop

# mkdir(make directory) : 디렉토리 생성하는 명령어
mkdir 작박구리

# 작박구리 폴더로 이동한다.
cd 작박구리

# pwd(print working directory) : 현재 작업하는 곳의 위치를 출력하는 명령어
pwd

 

 

2.2 포크(Fork)한 저장소를 Local PC에 clone 하기

  • Github페이지에 들어가서 공용 저장소를 Fork한 개인 계정에 있는 git-test를 clone을 합니다.

  • git bash에서 다음과 같은 명령어를 입력해줍니다.
  • git clone 명령어 뒤에는 방금 위에서 복사한 URL을 붙여넣기 해줍니다.
# git clone : git 으로 clone 뒤의 URL을 현재 위치에 복제한다.
git clone [복제하고싶은 remote repository URL]

# ls(list segments) : 현재 위치의 파일 목록들을 출력하는 명령어 
ls

cd git-test

 

 

2.3 Local PC에 git clone한 Fork 저장소를 조직에 있는 공용 저장소와 원격으로 연결하기

  • origin : Fork한 개인 저장소[ jaedeokhan/git-test ]
  • upstream : 다수의 사용자가 공유하는 중앙 원격 저장소 [ gitfork-test/git-test]
  • upstream은 이름은 변경할 수 있지만, 보편적인 사용 방법입니다.
  • Github페이지에서 조직에 있는 git-test 저장소가 공용 저장소로 사용하기 위해서 복사를 합니다.

# 현재 remote 즉 원격 목록들을 확인하기
git remote -v 

# git remote add [중앙 원격 저장소 별칭] [중앙 원격 저장소 URL]
git remote add upstream [중앙 원격 저장소 URL]

 

 

3. git branch를 통해서 기능 개발을 하고 원격으로 연결한 공용 저장소에 업로드

  • login 기능을 수행할 브랜치를 만듭니다.
# branch 목록을 확인합니다.
git branch -v

# feature/login으로 브랜치를 생성합니다.
git branch fature/login

# branch 목록을 확인해서 feature/login 브랜치가 생성되었는지 확인합니다.
# 아직 master에 *가 위치하는것을 볼 수 있습니다.
# branch는 생성만 하는 것이고, checkout을 해야 브랜치가 변경이 됩니다.
git checkout feature/login

# 다시 브랜치 목록 확인을 통해서 *의 위치를 확인합니다.
git branch -v

 

 

3.1 README.md를 수정하고 push까지 진행하겠습니다.

vim README.md

 

 

  • vim은 명령/입력 모드가 있는데 여기서는 따로 설명을 하지 않겠습니다.
  • vim README.md를 입력하고 엔터를 누르면 초기에는 명령 모드여서 a, i를 누르면 입력 모드로 들어가게 되고 다음과 같은 2020.09.19와 같은 내용을 입력합니다.
  • 저장을 할 때는 ctrl + ; 즉 클론을 만들고 wq를 하면 저장을 하고 나가 집니다.

 

 

3.2 git status로 변동사항을 확인하고 push까지 진행하기

# git status : 현재 파일의 변경 사항을 확인합니다.
# README.md를 방금 수정을 했으니 빨간색으로 untracked 항목으로 README.md가 나옵니다.
git status 

# git add 를 통해서 빨갠색 untracked 영역에서 초록색인 tracked 영역으로 바꿔줍니다. 
git add README.md

# 6행의 명령어는 한 파일만 선택해서 하는 방법이고, 모든 파일을 add하고 싶다면 -A, .을 사용합니다.
# -A : all 
# . : 현재 위치에 존재하는 .gitignore를 제외한 모든 파일
git add -A
git add .

# 다시 한 번 확인을 해보면 Changes to be committed 이라고 나옵니다.
# 커밋을 진행을 한 것은 아니고 git에 변동사항을 체크하게 추가해준겁니다.
git status

 

 

  • git commit을 진행을 하면 git status로 확인을 해보면 이제는 commit까지 진행이 되어서 git log를 통해 commit 내역을 확인해야 합니다.
  • 아래와 같이 git status를 입력하면 현재 작업환경에 변동사항이 없다고 나옵니다.
# git commit -m "커밋할 내용"
git commit -m "Add README.md"

git status

 

 

 

  • git log를 통해서 commit 내역을 확인합니다. 가장 초기에 Initial commit은 저장소를 생성하면 생기는 커밋이고 그 상단에 add README.md는 방금 전에 수행한 커밋입니다.
# git log : commit 목록들을 확인합니다. 
# commit 은 Local PC에서 변동사항 작업을 마치고 Github의 원격 저장소에 push하기 전 단계입니다.
git log

 

 

  • origin 즉, Fork한 저장소에 feature/login을 push합니다.
    • git push로 현재 작업한 커밋을 Fork한 저장소에 올립니다.
    • 2.3에서 remote로 연결을 해줘서 git push origin feature/login명령어를 입력하면 Github페이지의 Fork한 저장소에 feature/login에서 작업한 내용이 반영이 되고  Pull Request(PR)을 할 것인지 항목이 뜨게 됩니다.
      • 변동 사항을 반영한다고 merge를 진행하면 feature/login에서 작업한 README.md가 조직의 공용 저장소(gitfork-test / git-test)에 정상적으로 반영이 됩니다.
# git push [remote 약칭] [현재 작업한 브랜치명]
git push origin feature/login

 

 

3.3 Github 페이지에 들어가서 feature/login 브랜치가 반영이 되었는지 확인하고 공용 저장소로 Merge하기

  • 아래와 같이 feature/login이 정상적으로 Fork한 저장소에 올라왔고 우측에 Compare&pull request를 누르면 조직( gitfork-test)에 git-test 공용 저장소에 README.md를 올릴 수 있습니다.

 

 

  • Compare&pull Request를 누르고 나면 아래 페이지로 이동을 합니다.
  • 저장소가 gitfork-test/git-test로 변동이 된 것을 볼 수가 있고, 아래의 Create pull request를 클릭합니다.

 

 

 

  • 다음과 같이 pull request 즉 변동사항이 생겼고, 여러 명이서 협업을 하는 경우라면 아래의 코멘트를 남기고 변동사항을 반영해달라고 남깁니다.
  • Pull Request는 다음 링크에서 학습해 주시면 감사하겠습니다. 
  • 지금은 혼자서 진행하는 연습이기에 Merge pull request를 누르고 Confirm도 누릅니다.

 

 

 

  • Confirm까지 하고 나면 다음과 같이 Merged라고 보락색으로 뜨면 정상적으로 feature/login 브랜치에서 작성한 README.md가 반영이 된 것입니다.

 

 

  • girfork-test의 git-test를 보시면 아래의 README.md에 feautre/login 브랜치에서 작업한 *2020.09.19 git fork 테스트입니다. *가 반영이 된 것을 볼 수 있습니다.

 

 

4. 조직의 공용 저장소 변동 사항을 Local PC로 가져오기

  • 2.3에서 git remote add upstream [공용 원격 저장소 URL] 명령어로 remote는 upstream이라는 이름으로 지정을 해줬으니 최신 변동사항을 받아 오려면 upstream을 pull해야 합니다.
  • Local PC에서 작업을 했는데 왜? pull을 하는지 헷갈릴 수도 있습니다. 브랜치 기능을 통해서 feature/login이라는 전혀 다른 공간에서 작업을 진행을 한 거여서 master 브랜치에서 최신 변동사항을 받아줘야 합니다.
  • master에서는 최신 변동사항을 받고 다른 기능 개발을 해야 한다면 새로운 브랜치를 생성해서 작업을 해줍니다.
# 현재 브랜치 목록을 확인해보면 feature/login이 나옵니다.
git branch -v

# master로 변경을 해줍니다.
git checkout master

# git pull [원격 저장소 별칭] [브랜치]
# git pull을 수행해서 Local PC에 공용 저장소의 최신 변동사항을 받아 옵니다.
git pull upstream master

 

git pull upstream master를 수행하고 나면 Local PC의 master 브랜치에 feature/login에서 수정한 READMD.md가 추가가 되었다는 것을 확인을 할 수 있습니다.

 

지금까지 Github페이지에서 조직을 만들고, 조직에서 공용 저장소를 생성해서 git Forking Workflow 협업 방식을 git bash로 실습해봤습니다.

 

반응형