독서

[지옥에서 온 관리자 깃&깃허브 입문] 5장. 깃허브로 협업하기

찐공log 2022. 1. 21. 22:06

2022.01.21 - [독서/IT・컴퓨터] - [지옥에서 온 관리자 깃&깃허브 입문] 4장. 깃허브로 백업하기

 

[지옥에서 온 관리자 깃&깃허브 입문] 4장. 깃허브로 백업하기

2022.01.21 - [독서/IT・컴퓨터] - [지옥에서 온 관리자 깃&깃허브 입문] 3장. 깃과 브랜치 드디어 깃허브를 배울 시간입니다.😁 지금까지 지역 저장소에 저장을 했었다면 이제는 인터넷상에 저장할

zzingonglog.tistory.com

 

 

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

(1) 원격 저장소 복제하기

git clone
 

원격 저장소를 기존에 연결된 지역 저장소 외에 다른 지역 저장소에서 사용하려면 원격 저장소의 내용 전체를 복제해서 또 가져와야 합니다.

이를 '클론' 또는 '클로닝'이라고 합니다.

앞서 4장에서 만들었던 test-1 저장소를 git_home이라는 새로운 지역 저장소로 복제하려 합니다.

우선 test-1 저장소의 https 주소를 복사합니다.

그리고 clone 명령어를 입력합니다.

git clone https://github.com/zzingongLog/test-1.git git_home
 

git_home 디렉토리가 없다면 자동으로 디렉토리가 만들어지며 복제가 완료되었습니다.

git_office도 동일하게 만들어봅니다.

이런식으로 사무실에서나 집에서나 같은 원격 저장소를 가지고 작업이 가능합니다.😀

 

 

(2) 개인 컴퓨터에서 작업하고 올리기

git_home에서 파일 수정을 한 후 커밋을 하고 git push를 했습니다.

깃허브에서 확인해보면 개인저장소에서 커밋한 test2가 올라와있습니다.

 

(3) 회사 컴퓨터에서 내려받아 작업하기

이제 원격 저장소에 올라온 커밋을 내려받아봅니다.

git pull

이런 식으로 하나의 원격 저장소에 둘 이상의 컴퓨터를 연결해서 사용한다면, 풀과 푸시를 습관화 하는 것이 좋습니다. 그럼 어떤 컴퓨터에서도 최신 소스를 유지할 수 있습니다.

 

 

 

 

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

(1) 원격 master 브랜치

git_home디렉토리로 이동한 후 git log --oneline으로 확인해보면 아래와 같다.

(HEAD -> master, origin/master, origin/HEAD)

여기서 HEAD -> master는 이 커밋이 지역 저장소의 최종 커밋이라는 뜻입니다.

origin/master는 원격 저장소의 최종 커밋이라는 뜻입니다.

 

여기서 f3.txt파일을 생성하고 커밋한 후에 로그를 확인해봅시다.

(HEAD -> master) create f3.txt 은 방금 커밋한 것을 가리킵니다.

즉 지역 저장소 최종 커밋이 create f3.txt를 가리킨다는 뜻이지요.

하지만 원격 저장소는 아직 test2 커밋을 가리키고 있습니다.

 

이상태에서 git status를 입력해보면 위와같이 친절하게 현재 상태를 알려주고 있습니다.

 

git push 명령을 사용하여 원격 저장소로 올린 후 커밋 로그를 확인해보면 다시 지역저장소와 원격저장소가 같은 커밋을 가리키는 것을 확인할 수 있습니다.

 

 

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

git fetch
 

fetch는 '불러오다, 가져오다'라는 뜻입니다.

그래서 git fetch 명령은 원격 저장소의 정보를 가져오는 기능이 있습니다.

pull과 다르게 fetch명령은 원격 브랜치에 어떤 변화가 있었는지 정보만 가져옵니다.

다른 사람이 수정한 소스를 한번 훑어보고 지역 저장소와 합칠 경우에 유용하게 사용됩니다.

이제 git_office 디렉토리로 옮겨서 git fetch 명령을 한 후 무언가를 가져왔는데, 파일 목록에는 아무 추가된 파일이 없습니다.

그리고 git log --oneline을 하니 (HEAD -> master)만 보이고 origin/master는 보이지 않습니다.

그이유는 원격 저장소의 최신 커밋 정보를 가져왔으나 아직 지역 저장소에 합치지 않아 원래 git_office에 있던 최신 커밋만 나타나기 때문입니다.

파일도 변경된 것이 없습니다.

 

git status를 해보면 아래와 같이 1개가 뒤처져 있다고 나오며 지역저장소를 업데이트 할 수 있다고 알려줍니다.

git pull 명령을 사용하면 지역 저장소를 업데이트 할 수 있다고 알려줍니다.

 

그렇다면 fetch로 가져온 최신 커밋 정보는 어디에 있을까요?

fetch로 가져온 최신 커밋 정보를 확인해봅시다.

git checkout FETCH_HEAD
 

fetch로 가져온 원격 저장소는 FETCH_HEAD라는 브랜치로 가져옵니다. 이 브랜치로 가져온 정보는 지역 저장소에 바로 반영되지 않습니다.

git log 를 사용해보면 최신 커밋에 origin/master와 origin/HEAD가 표시되어 있습니다.

즉 이 커밋이 fetch로 가져온 원격 브랜치의 최신 커밋입니다.

 

fetch한 후에 최신 커밋을 git pull할수도 있고, git merge 명령으로 FETCH_HEAD에 있던 커밋을 병합할 수도 있습니다. 여기에서는 git merge 명령으로 해봅시다.

master 브랜치로 이동한 후에 병합해야합니다.

git checkout master
git merge FETCH_HEAD
 
git merge FETCH_HEAD

로그를 확인해보면 이제야 최신 커밋이 지역 저장소에 반영된 것을 볼 수 있습니다.

정리해보면 git pull = git fetch + git merge FETCH_HEAD 와 같습니다.

 

🌀fetch로 가져온 브랜치 한 번에 병합하기

fetch한 뒤 병합할 때 원격 master 브랜치에 있는 커밋이라면 다음과 같이 병합한다.

git merge origin/master
 

다른 브랜치에 있는 커밋이라면 다음과 같이 병합한다.

git merge origin/브랜치 이름
 

그러나 매번 브랜치 이름을 써야한다면 번거롭다.

다음과 같이 명령하여 fetch 한 뒤 지역 저장소에 반영하지 않은 최신 커밋을 병합할 수 있다.

git merge FETCH_HEAD
 

 

 

 

3. 협업의 기본 알아보기

여러 사용자가 협업하기 위해서는 각자 지역 저장소에서 작업한 내용을 자유롭게 원격 저장소에서 공유할 수 있어야합니다. 여기서는 공동 작업자가 3명이라고 가정해보겠습니다.

 

(1) 공동 작업자 추가하기

팀장은 원격 저장소에 manuals이라는 저장소를 생성한 후 해당 저장소에서 아래와 같이 깃허브에서 공동 작업자를 추가할 수 있습니다.

저장소 화면에서 Setting을 누른 후 Collaborators를 선택합니다. 그리고 Add people 을 누릅니다.

팀원은 협업자로 초대됐다는 메일과 깃허브 메시지를 받게 되고 수락하면 됩니다.

 

(2) 작업 환경 구성하기

각각의 팀원들은 각자의 컴퓨터에 지역 저장소를 생성해야합니다.

그리고 공동 작업에서 사용할 이름과 이메일 주소를 지정합니다.

저장소마다 다른 이름이나, 메일 주소를 사용하기 위해 git config 명령을 사용할 때 --global옵션을 빼고 이름과 메일 주소를 지정할 수 있습니다.

git init manuals
cd manuals
git config user.name "사용자이름"
git config user.email 메일주소
 

 

(3) 원격 저장소에 첫 커밋 푸시하기

팀장이 파일을 하나 생성하고 커밋한 후 원격저장소의 master 브랜치로 푸시합니다.

vim overview.txt
git add overview.txt
git commit -m "overview"
 

지역 저장소의 커밋을 원격 저장소로 푸시하려면 먼저 원격 저장소 주소를 복사해야합니다.

그리고 터미널 창에서 깃의 origin에 복사한 주소를 지정합니다.

그리고 git push명령을 사용해 origin의 master브랜치에 커밋을 올립니다.

이때 -u옵션을 붙이면 다음부터 git push명령만으로 원격 저장소의 master 브랜치에 커밋을 올릴 수 있습니다.

git remote add origin 복사한 저장소 주소
git push -u origin master
 

 

(4) 공동 작업자 컴퓨터에 원격 저장소 복제하기

git clone 원격 저장소 주소
 

 

(5) 첫 번째 커밋이 아니라면 풀 먼저하기

깃허브에서 협업할 때는 반드시 작업하기 전에 원격 저장소의 최신 커밋을 pull한 다음 자신의 커밋을 푸시해야 합니다.

 

 

 

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

협업하다보면 팀원들이 각자 다른 기능을 맡아서 작업하는 경우가 많습니다.

이럴 때는 각자의 작업이 master브랜치에 있는 문서들과 섞이지 않도록 새 브랜치를 만들어 버전을 관리합니다.

각자의 작업이 master브랜치에 있는 문서들과 섞이지 않도록 새 브랜치를 만들어서 버전을 관리합니다.

그리고 각 팀원이 만든 새 브랜치 역시 원격 저장소에 그대로 푸시할 수 있습니다.

 

(1) 새로 만든 브랜치 푸시하기

여기서는 팀장이 새로운 기능을 만들기 위해 자신의 지역저장소에 f라는 브랜치를 만들고 커밋한 다음 원격 저장소에 푸시하는 과정을 알아보겠습니다.

git checkout -b f
 

checkout 명령에 -b옵션을 사용하면 지역 저장소에 브랜치 f를 만들고 f로 체크아웃까지 한꺼번에 할 수 있습니다.이미 f브랜치가 존재한다면 f 브랜치로 체크아웃합니다.

git push origin f 라고 하면 원격 저장소에 f 브랜치를 푸시할 수 있습니다.

 

푸시가 끝난 후 웹 브라우저에서 확인해보면 2 branches라고 되어 있으며 방금 푸시한 브랜치가 나타납니다.

 

 

(2) 풀 리퀘스트로 푸시한 브랜치 병합하기

아직 원격 저장소의 파일 목록에는 f 브랜치에서 만들었던 파일이 master브랜치에는 없습니다.

푸시한 브렌치는 풀 리퀘스트(pull request)를 통해 병합해야 원격 저장소에 반영되기 때문입니다.

풀 리퀘스트하는 과정을 알아보겠습니다.

빨간상자의 브랜치 설명 옆에 New pull request를 누르세요.

 

풀 리퀘스트 메시지를 작성한 후 Create pull request를 누르면 협업 중인 저장소에 풀 리퀘스트가 전송됩니다.

 

협업 중인 원격 저장소에 등록된 풀 리퀘스트는 공동 작업자 중 누구나 살펴보고 병합할 수 있습니다.

저장소 파일 목록 위의 pull request를 누르면 풀 리퀘스트 목록이 나타납니다.

 

풀 리퀘스트 메시지를 살펴본 다음 내용에 문제가 없다면 merge pull request 를 눌러 병합합니다.

 

브랜치 병합 완료

confirm merge 를 누르면 브랜치 병합이 끝납니다.

 

브랜치가 병합되면 해당 브랜치에 있던 파일이 master 화면에 나타나게 됩니다.

브랜치 상태를 알고 싶다면 파일 목록 위에 있는 2 branches를 눌러보세요.

 

브랜치가 병합된 상태라면 merged라고 표시가 되어있습니다. 또한 누가 병합했는지 상태를 알 수 있습니다.

깃허브에서 협업할 때는 보통 작업자마다 브랜치를 만들어서 진행하고, 작업 중간 중간 풀리퀘스트를 보내서 master브랜치에 병합합니다.

그래서 깃허브로 작업할 때는 다른 작업자의 변경 내용을 바로 반영하기 위해 항상 pull 부터 한 다음 자신의 작업을 진행하는 것이 좋습니다.