Git

깃허브로 협업하기, 깃허브에서 개발자와 소통하기

코딩공부 2022. 1. 4. 02:06

[ 5일 완성 코스 4일차, 5일차]

 

05장 깃허브로 협업하기

05-1 여러 컴퓨터에서 깃허브 저장소 함께 사용하기

 

원격 저장소 복제하기 - git clone

git clone 

원격 저장소에서 지역 저장소로 가져오는것을 복제한다, 클론, 클로닝 이라고 함

$ git clone 복사한 주소 붙여넣기 git_home 

$ git clone https://github.com/ohjihoon2/test-git.git git_home

$ git clone https://github.com/ohjihoon2/test-git.git git_office

git_home 은 local repository 

git_office 는 회사 컴퓨터 repository  라고 생각

 

$ git remote -v

clone을 하게 되면 자동으로 지역 저장소와 원격 저장소가 연결되게됨

 

 

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

$ cd ~
$ cd git_home
$ vim c1.txt

vim으로 c1.txt 수정 

 

$ git commit -am "add c"
$ git push

스테이징과 커밋 처리 하고 원격저장소에 commit 처리 

 

github에서 commit된것을 확인 할 수 있음

 

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

$ cd ~/git_office
$ git pull

원격 저장소에 있는 데이터 내려받기 

 

$ vim c1.txt

c1.txt파일이 수정된것을 확인 가능

추가적으로 수정함 

 

$ git commit -am "add d"
$ git push

추가적으로 수정한것 원격저장소에 올리기 

 

$ cd ~/git_home
$ git pull
$ git log

다시 개인 컴퓨터에서 회사 컴퓨터에서 수정한 파일 내려받기

 

 

하나의 원격 저장소에 둘 이상의 컴퓨터를 연결해서 사용한다면 pull & push 를 습관화 하는 것이 좋음

어떤 컴퓨터에서 접속하든 최신의 소스를 유지 할 수 있음

 

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

git pull 명령은 원격 저장소의 최신 커밋을 로컬 저장소에 합쳐줌

하지만 최신커밋을 합치기 전에 원격 저장소에 어떤 변화가 있는지 먼저 살펴봐야함

이럴 경우 원격 브랜치에서 정보만 먼저 가져올 수 있음

 

원격 master branch

로컬 저장소의 master branch 처럼 원격 저장소도 만들 때 기본으로 master 브랜치가 생성됨

$ git ~/git_home
$ git log --oneline

 

최종 커밋인 add 3 앞에 (HEAD -> master, origin/master, origin/HEAD) 표시 되어 있음

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

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

 

아직 복제한 상태 그대로 이므로 모두 최종 커밋은 같음

 

$ vim c4.txt

새로운 커밋을 생성( 새파일 )

 

$ git add c4.txt
$ git commit -m "add c4.txt"

스테이징, 커밋 처리

 

$ git log --oneline

(HEAD -> master) 는 방금 커밋한 'add c4.txt'를 가르킴

로컬 저장소의 최종 커밋이 add c4 라는 뜻

하지만 (origin/master, origin/HEAD)는 아직 'add c4.txt' 커밋을 가르킴

 

이상태에서 git status를 입력하면 

현재 master 브랜치가 origin에 있는 원격 master 브랜치보다 버전이 하나 앞서 있는것을 알 수 있음

그리고 git push 명령으로 원격 저장소로 올리라고 알려줌

 

$ git push
$ git log --oneline

원격저장소에 commit 

푸시 후에는 다시 같은 커밋을 가르킴

 

 

원격 브랜치 정보 가져오기 - git fetch

페치(fetch)는 '불러오다', '가져오다' 라는 뜻

그래서 git fetch 명령은 원격 저장소의 정보를 가져오는 기능

 

pull 명령원격 저장소의 커밋을 무조건 가져와서 로컬 저장소와 합친다면 !

fetch 명령원격 브랜치에 어떤 변화가 있는지 그 정보만 가져옴

 

다른 사람이 수정한 소스를 한번 더 훑어보고 로컬 저장소와 합치고 싶다면 pull 대신 fetch 를 사용해서 커밋을 가져온다음 로컬 저장소와 합치면 됨

 

$ cd ~/git_office
$ git fetch

원격 저장소에서 무언가를 가져옴

 

분명히 원격저장소에 있던 커밋을 가져왔는데 git_home에서 원격 저장소로 push 했던 c4.txt가 보이지 않음

 

$ git log

(HEAD -> master)만 보이고 원격 저장소의 origin/master는 보이지 않음

 

 

$ git status

현재 branch가 origin/master에 비해 1개의 커밋이 뒤처져 있다고 나옴

즉 원격 저장소의 최신 커밋 하나가 아직 지역 저장소에 반영되지 않았다는 뜻

 

 

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

 

fetch로 가져온 원격 저장소의 정보origin/master branch가 아닌 FETCH_HEAD branch로 가져옴

 

FETCH_HEAD 로 가져온 정보는 지역 저장소에 바로 반영되지 않음

 

fetch해서 가져온 최신 커밋을 살펴보고 싶다면 FETCH_HEAD branch에 switch 해서 확인

 


checkout 대신 switch 를 사용 !

 

git switch  를 사용해서 branch 전환

git switch -c 를 이용해서 새로운 branch 생성


Try to switch to a detached HEAD of a known ref or commit:

 

Git Switch can also take us to a previous commit point with the help of -d or --detach.

This will be a Detached HEAD state.

 

Detached HEAD란?

HEAD가 특정 branch가 아닌 특정 commit을 직접 참조하고 있는 상태

 

$ git switch -d FETCH_HEAD

branch 전환

 


$ git diff HEAD origin/master

로컬 저장소의 최신 커밋과 fetch한 커밋의 차이를 비교 하려면 git diff HEAD origin/master 입력


$ git status
$ git log --oneline
$ git log

최신 커밋에 origin/master와 origin/HEAD가 표시되어 있음

즉, 이커밋이 fetch로 가져온 원격 브랜치의 최신 커밋임

해당 내용을 보고 원격 브랜치의 최신 커밋을 로컬 저장소에 합칠지 말지를 결정

 

 

$ git switch master
$ git merge FETCH_HEAD

fetch 한 후에 최신 커밋을 현재 branch에 합치려면

git pull 명령을 사용해서 받을 수도 있고,

git merge 명령으로 FETCH_HEAD에 있던 커밋을 병합할 수 있음

 

 

git pull 명령은 git fetch 명령과 git merge FETCH_HEAD 명령 두개를 합친 것과 같은 기능 수행

즉, git fetch를 사용해 원격 브랜치를 가져온 다음 git merge 명령을 사용해 원격 브랜치와 현재 브랜치를 합쳐주는것을 

git pull 명령으로 한꺼번에 할 수 있음

 

05-3 협업의 기본 알아보기

공동작업자 추가 

작업 환경 구성

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

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

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

 


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

새로 만든 브랜치 푸시하기

팀장이 새로운 기능을 만들기 위해 자신의 로컬 저장소에 f 라는 브랜치를 만들고 원격 저장소에 푸시하는 과정

 

$ git pull

$ git switch -c f

$ vim f1.txt

$ git push origin f

 

git push origin f = 원격 저장소에 f 브랜치를 푸시한다는 의미 

 

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

1. 브랜치 설명 옆에 있는 new pull request를 누름

2. pull request message 작성 한 후 create pull request 누르면 협업중인 저장소에 pull request 가 전송 됨

 

3. 협업 중인 원격 저장소에 등록 된 pull request는 공동 작업자 누구나 살펴보고 병함 가능

 

저장소 목록의 pull request를 누르면 등록된 pull request 목록이 나타남.

등록된 pull request를 누름 

 

4. pull request message를 살펴본 다음 내요에 문제가 없으면 [Merge pull request] 를 눌러 병합함

필요하다면 pull request를 남긴 사람과 메시지를 주고 받을 수 있음

 

5. 커밋 메시지를 직접 입력하거나 기본 메시지를 사용 할 수도 있음

[Confirm merge] 를 누르면 브랜치 병합이 끝남

 

confrim merge 를 클릭하면 상태가 merged로 변경 됨 

6. 브랜치가 병합되면 해당 브랜치에 있던 파일이 master 화면에 나타날 것임

브랜치 상태를 알고 싶다면 파일 목록 위에 있는 '2 branches' 클릭

7. 브랜치가 병합된 상태라면 'merged'라고 표시 되어 있음

공동 작업자 중 누가 브랜치 병합을 했는지 알 수 있음

 

8. github에서 협업할 때는 보통 작업자마다 브랜치를 만들어서 진행하고, 작업 중간중간 pull request를 보내서 master 브랜치에 병합함. 그래서 github로 협업할 때는 다른 작업자의 변경 내용을 바로 반영하기 위해 항상 pull 부터 한 다음 자신의 작업을 진행하는 것이 좋음.

 

 

 

06장 깃허브에서 개발자와 소통하기


06-1 깃허브 프로필 관리하기
06-2 README 파일 작성하기
06-3 오픈 소스 프로젝트에 기여하기
06-4 깃허브에 개인 블로그 만들기

 

 

 

'Git' 카테고리의 다른 글

깃허브로 백업하기  (0) 2021.12.30
깃과 브랜치  (0) 2021.12.29
Git 시작하기, 깃으로 버전 관리하기  (0) 2021.12.28