5장 : 깃허브로 협업하기

1. 여러 컴퓨터에서 원격 저장소 함께 사용하기

  • 원격 저장소 복제하기 :: git clone
    • git clone [복사할 원격 저장소의 URL]
    • 위와 같이 사용하여 원격 저장소에서 복제할 수 있다.(복제한다 == 클론 == 클로닝)
    • git clone [복제할 저장소의 URL] [복제할 디렉토리]
    • 복제할 디렉토리가 없으면 새로 생성해준다.
    • 복제할 디렉토리를 넣지 않으면 원격 저장소의 이름과 동일하게 복제된다.
  • 실습을 위한 두 환경 준비
    • 두 환경을 만들어 각각 회사와 집이라고 생각하자.
    • git_home
      • git clone [URL] git_home
    • git_office
      • git clone [URL] git_office
  • 개인 컴퓨터에서 작업하고 올리기
    $ cd git_home
    $ vim f1.txt
    $ git commit -m "add c"
    $ git push origin master
    
  • 회사 컴퓨터에서 내려받아 작업하기
    $ cd ~/git_office
    $ git pull origin master
    $ vim f1.txt
    $ git commit -am "add d"
    $ git push origin master
    
  • 작업을 함에 있어서 항상 git pull을 통해서 원격 저장소에 새로 올라온 커밋을 가져와야한다.

2. 원격 브랜치 정보 가져오기

  • git pull
    • 명령은 원격 저장소의 최신 커밋을 지역 저장소에 합쳐준다. 하지만 최신 커밋을 합치기 전에 원격 저장소에 어떤 변화가 있는지 먼저 살펴보아야 한다.
  • 원격 브랜치 정보 가져오기 :: git fetch
    • fetch(패치) : 불러오다, 가져오다
    • git fetch : 어떤 변화가 있는지 원격 저장소의 정보를 가져온다.
    $ cd ~/git_office
        # 원격 저장소에서 변경을 실시한다.
    $ git fetch
    $ git log --oneline 
        # 변화된 부분이 없다...
    $ git status
        # git pull 명령을 사용하면 지역 저장소를 업데이트 할 수 있다고 한다.
    $ git checkout FETCH_HEAD
        # 이제 변화된 부분을 확인할 수 있다.
    $ git checkout master
    $ git merge FETCH_HEAD
    $ git log --oneline
        # 커밋 로그를 확인해보면 적용되어 있다.
    

3. 협업의 기본 알아보기

  • 공동 작업자 추가하기(팀장)
    • 누구나 프로젝트의 소스를 내려받을 수 있지만 커밋을 푸시할 순 없다.
    • 공동 작업자가 커밋을 푸시할 수 있도록 권하는 주는 것이다.
  • 작업 환경 구성하기(팀장, 팀원)
    $ git init project
    $ cd project
        # --global 옵션을 제거하여 현재 저장소에만 적용될 config입니다.
    $ git config user.name "사용자 이름"
    $ git config user.email 사용자@이메.일
    
  • 원격 저장소에 첫 커밋 푸시하기(팀장)
    $ vim overview.txt
    $ git add overview.txt
    $ git commit -m "overview"
    
    • 새로운 깃허브 저장소를 만든다.
    $ git remote add origin [저장소 URL]
    $ git push origin master
    
  • 공동 작업자 컴퓨터에서 원격 저장소 복제하기
    $ git clone [저장소 URL]
        # 사용자 이름과 이메일을 설정한다.
    
  • 첫 번재 커밋(팀장이 실시한)이 아니라면 풀 먼저하기
    • 팀원이 작업트리에서 작업을 수행함에 있어서 팀장이 그 중에 푸시를 실시할 수 있다.
    • 팀원이 작업을 완료하고 푸시하려고 할 때 팀장의 새로운 커밋이 푸시되었으므로 rejected라는 오류 메시지가 나온다.
    • 이를 방지하기위해서 푸하기전에 항상 풀을 먼저 실시해야 한다.
    • 같은 파일을 수정했을 경우 풀 과정에서 merge 에러가 발생할 수 있다.
    • 이럴경우 수동으로 이를 해결해주어야 한다… 귀찮다…

4. 협업에서 브랜치 사용하기

  • 협업을 하다 보면 팀원들이 각자 기능을 맡아서 작업하는 경우가 많다.
  • 이럴 때는 각자의 작업이 master 브랜치에 있는 문서들과 섞이지 않도록 새 브랜치를 만들어서 버전을 관리한다.
  • 각 팀원이 만든 새 브랜치 역시 원격 저장소에 그대로 푸시할 수 있다.
  • 새로 만든 브랜치 푸시하기
    $ git pull origin master
        # checkout 명령에 -b 옵션을 붙여 브랜치를 새로 만들고 이동까지 한번에
        # f 브랜치가 있다면 브랜치로 이동
    $ git checkout -b f
    $ vim f1.txt
    $ git add f1.txt
    $ git add f1.txt
    $ git commit -m "feature1"
    $ git push origin f
    
    • 웹 브라우저로 원격 저장소로 접속하면 브랜치가 생성되어 있다.
  • 풀 리퀘스트로 푸시한 브랜치 병합하기
    1. 브랜치 설명 옆에 있는 New pull request를 누른다.
    2. 풀 리퀘스트 메시지를 작성한 후 Create pull request를 누르면 협업 중인 저장소에 풀 리퀘스트가 전송된다.
    3. 협업 중인 원격 저장소에 등록된 풀 리퀘스트는 공동 작업자 중 누구나 살펴보고 병합할 수 있다. 저장소 파일 위의 Pull request를 누르면 등록된 풀 리퀘스트 목록이 나타난다. 등록된 풀 리퀘스트를 누른다.
    4. 풀 리퀘스트 메시지를 살펴본 다음 내용에 문제가 없으면 Merge pull request를 눌러 병합을 한다. 필요하다면 이 공간을 통해 풀 리퀘스트를 남간 사람과 메시지를 주고받을 수 있다.
    5. 커밋 메시지를 직접 입력하거나 기본 메시지를 사용할 수도 있다. Confirm merge를 누르면 브랜치 병합이 끝난다.
    6. 브랜치가 병합되면 해당 브랜치에 있던 파일이 master 화면에 나타날 것이다. 브랜치 상태를 알고 싶다면 파일 목록 위에 있는 2 branches를 눌러 보시오.
    7. 브랜치가 병합된 상태라면 merged라고 표시되어 있다. 그리고 공동 작업자 중 누가 브랜치를 병합했는지도 알 수 있다.
    8. 깃허브에서 협업할 때는 보통 작업자마다 브랜치를 만들어서 진행하고, 작업 중간 중간 풀 리퀘스트를 보내서 master 브랜치에 병합한다. 그래서 깃허브로 협업할 때는 다른 작업자의 변경 내용을 바로 반영하기 위해서 항상 풀부터 한 다음 자신의 작업을 진행하는 것이 좋다.