본문 바로가기
DevelopmentTools/Git

지옥에서 온 문서관리자 4

by 수짱수짱 2022. 1. 17.

Day4

05. 깃허브로 협업하기

 

이잉 주말에 너무 잘 쉬었다.

 


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

 

  • 원격 저장소 복제하기 - git clone 
    • 원격 저장소를 기존에 연결된 지역 저장소 외에 다른 지역 저장소로 똑같이 가져오는 것, 복제한다, 클론한다, 클로닝(cloning)
    • git clone 저장소 주소 디렉터리 이름
    • 만약 디렉터리 이름으로 된 디렉터리가 없다면 자동으로 생성된다.
    • 해당 명령어는 디렉터리를 만들 위치에서 수행한다.
    • 이때 커밋까지 모두 복사된다. 해당 디렉터리로 이동한 후 git log 명령어로 커밋을 확인할 수 있다.
    • 해당 디렉터리에서 원격 저장소와 연결되어 있는지 확인하기 위해 git remote -v 명령어로 연결을 확인한다.

 

  • 개인 컴퓨터에서 작업하고 올리기
    • 지역 저장소에서 작업한 내용을 commit
    • 이후 git push 명령어를 통해 원격 저장소에 커밋을 올려준다.

 

  • 회사 컴퓨터에서 내려받아 작업하기
    • 원격 저장소에 새로 올라온 커밋을 가져온다 - git pull 

 

  • 하나의 원격 저장소에 둘 이상의 컴퓨터를 연결해서 사용한다면 pull, push를 습관화하는 것이 어떤 컴퓨터에서 접속하든 항상 최신 소스를 유지하도록 한다.

원격 브랜치 정보 가져오기

최신 커밋을 합치기 전에 원격 저장소에 어떤 변화가 있는지 먼저 살펴보아야 한다. 이를 위해 원격 브랜치에서 정보만 먼저 가져올 수 있다. - git fech

 

  • 원격 master 브랜치
    • 원격 브랜치 : 원격 저장소에 있는 브랜치
    • 원격 master 브랜치 : 원격 저장소에 있는 master 브랜치
    • HEAD->master : 이 커밋이 지역 저장소의 최종 커밋
    • origin/master : 원격 저장소의 최종 커밋
    • 지금은 원격 저장소를 그대로 복제한 상태이기 때문에 지역 저장소와 원격 저장소 모두의 최종 커밋이 같다.
    • 새로운 커밋을 생성하고 다시 커밋로그를 확인한다.
    • HEAD->master는 create f3.txt 커밋을 가리킨다. 즉, 지역 저장소의 최종 커밋이란 말이다.
    • 반면에 origin/master, origin/HEAD는 아직 add d 커밋을 가리키는 모습을 볼 수 있다.
    • 이 상태에서 git stauts 명령어를 수행하면 origin에 있는 원격 master 브랜치 버전보다 하나 앞서 있는 것을 알 려준다. git push로 지역 저장소 커밋을 원격 저장소로 올리라고 한다.
    • 해당 커밋을 push하고 커밋 로그를 다시 확인하면 master와 origin/master가 같은 커밋을 가르키는 것을 확인할 수 있다.

 

  • 원격 브랜치 정보 가져오기 - git fetch 
    • 원격 저장소의 정보를 가져오는 기능
    • git pull은 원격 저장소의 커밋을 가져와 무조건 지역 저장소에 합치는 기능
    • git fetch는 원격 브랜치에 어떤 변화가 있는지 그 정보만 가져오는 기능
    • 만약 다른 사람이 수정한 소스를 한번 더 훑어보고 지역 저장소와 합치고 싶다면 pull대신 fetch를 사용해서 커밋을 가져온 다음 지역 저장소와 합쳐라.
    • 로그를 확인해보면 원격 저장소의 origin/master가 보이지 않는다. 이는, 원격 저장소의 최신 커밋 정보를 가져왔지만 아직 지역 저장소에 합치지 않았기 떄문에 원래 지역 저장소의 최신 커밋만 나타나기 때문이다.
    • git status 명령어를 통해 확인해 보면 현재 브랜치가 origin/master에 비해 1개의 커밋이 뒤쳐져 있다고 뜬다.
    • 이를 해결하기 위해 git pull을 사용하여 지역 저장소를 업데이트 할 수 있다고 알려준다.
      • fetch로 가져온 최신 커밋 정보는 FETCH_HEAD 브랜치에 저장된다. 이 브랜치로 가져온 정보는 지역 저장소에 바로 반영되지 않는다.
      • git checkout FETCH_HEAD -> git log 명령어 순서로 fetch해서 가져온 최신 명렁어를 확인할 수 있다.
      • FETCH_HEAD로 체크아웃한 다음 git log를 확인하면 origin/HEAD가 표시되어 있다
    • fetch한 후 최신 커밋을 현재 브랜치에 합치는 방법
      • git pull
      • git merge 
        1. master 브랜치로 이동 - git checkout master
        2. 병합 - git merge FETCH_HEAD
      • 즉, git pull 명령 = git fetch + git merge FETCH_HEAD 
      • 두 명령어를 한꺼번에 수행하는 것이 git pull 
    • git merge origin/master
      • fetch후 병합할 때 원격 master 브랜치에 있는 커밋을 병합할 때
    • git merge origin/브랜치 이름
      • 다른 브랜치에 있는 커밋을 병합할 때

협업의 기본 알아보기

하나의 작업을 여러 사용자가 협업하기 위해서는 각자 지역 저장소에서 작업한 내용을 자유롭게 원격 저장소에서 공유할 수 있어야 한다. 

 

  • 공동 작업자 추가하기
  • 작업 환경 구성하기
    • 작업자 각각의 컴퓨터에 지역 저장소 생성
    • 저장소마다 다른 이름이나 메일 주소를 사용하기 위해 git config 명령 사용(--global 옵션은 사용x)
  • 원격 저장소에 첫 커밋 푸시하기
  • 공동 작업자 컴퓨터에 원격 저장소 복제하기 - git clone 저장소 주소 
    • 첫 번째 커밋이 아니라면 git pull 먼저
    • rejected 오류가 발생하는 이유는 원격 저장소에 있는 최신 커밋 정보가 해당 작업자의 컴퓨터에 저장되어 있지 않기 때문에 나타난 것
    • 이를 위해 자신의 커밋을 push하기 전에 git pull로 원격 저장소의 최신 커밋을 가져와야 한다.

협업에서 브랜치 사용하기

 

  • git checkout -b f 
    • f라는 브랜치를 만들고 f 브랜치로 체크아웃. 해당 브랜치에서 문서를 만든 후 커밋
    • 원격 저장소에 f 브랜치까지 함께 푸시하기 위해 git push 뒤에 origin f를 추가
    • git push origin f - 원격 저장소(origin)에 f 브랜치를 함께 푸시한다는 의미가 된다.
  • git push origin f 결과
     
    • 원격 저장소의 브랜치에 push한 브랜치가 나타난다. 웹사이트에서 확인

 

  • 풀 리퀘스트로 push한 브랜치 병합하기
    • push한 브랜치는 풀 리퀘스트(pull request)를 통해 병합해야 원격 저장소에 반영된다.
    •  
      풀 리퀘스트 -> merge후 브랜치가 병합된 상태

 

깃허브에서 협업할 때 보통 각 작업자마자 브랜치를 만들어 진행하며 작업 중간중간마다 pull request를 보내 master 브랜치에 병합한다. 그래서 깃허브로 협업할 땐 다른 작업자의 변경 내용을 바로 반영하기 위해 항상 git pull부터 한 다음 자신의 작업을 진행해야 한다. 

 


 

현재 디렉터리에 원격 저장소를 복사 - git clone 저장소주소

 

지역 저장소의 최신 커밋과 fetch한 커밋의 차이 비교하기 - git diff HEAD origin/master

 

브랜치를 만들고 바로 체크아웃하기 - git checkout -b 브랜치 이름