도서 : Do it! 지옥에서 온 문서관리자 깃&깃허브 입문
원격 저장소 복제하기
git clone 복사한HTTPS주소 로컬저장소명
클론(Clone), 클로닝(Cloning): 원격 저장소를 기존에 연결된 로컬 저장소 외에 다른 로컬 저장소에서 사용하기 위해.. 원격 저장소에 담긴 내용 전체를 로컬 저장소로 가져오는 행위
- 로컬저장소 git_home이 없으면 자동으로 만들어줌
※ 원격 저장소와 연결이 잘 되어있는지 확인
git remote -v
개인 컴퓨터에서 작업한 후 푸시
git push
- 해당 사항은 깃허브 원격 저장소의 commits 눌러보면 커밋 로그 확인 가능.
회사 컴퓨터에서 작업 내용(새로 커밋한) 가져오기
git pull
이런 루틴이다.
[실습] 원격 브랜치 정보 가져오기
git pull 명령은 원격 저장소의 최신 커밋을 로컬 저장소에 합쳐준다.
그러나 최신 커밋을 합치기 전에 원격 저장소에 어떤 변화가 있었는지 살펴봐야 함.
이때, 원격 브랜치에서 정보만 먼저 가져올 수 있다. 가져온 정보를 로컬 저장소에 병합하는 과정까지 알아보자.
0. 깃허브 commits 로그 확인
- 원격 저장소에 있는 HEAD는 원격 저장소의 master 브랜치를 가리킴.
- 원격 master 브랜치는 'add d'라는 최종 커밋을 가리킴
1. git bash 창에서 git_home 로컬 저장소의 로그 확인
HEAD -> master : 이 커밋이 로컬 저장소의 최종 커밋이다.
origin/master : 원격 저장소의 최종 커밋이다.
2. 로컬저장소에 f3.txt 생성 후 커밋
- 현재 master 브랜치가 origin에 있는 원격 master 브랜치의 버전보다 1 commit 앞서 있다.
- git push해서 로컬 커밋을 올려라.
- 푸시해줘
3. 원격 브랜치 정보 가져오기
fetch: 불러오다, 가져오다
git fetch #원격 저장소의 정보를 가져오는 기능
pull 명령이 원격 저장소의 커밋을 가져와서 무조건 로컬 저장소와 합친다면, fetch는 원격 브랜치에 어떤 변화가 있는지 그 정보만 가져온다.
- 다른 사람이 수정한 소스를 한번 더 흝어보고 로컬과 합치고 싶으면 pull 대신 fetch
- git_office 로컬 저장소에는 f1.txt, f2.txt만 있는 상태. 원격 저장소에는 f3.txt 추가로 존재
로그를 확인해보니, HEAD -> master만 보이고 원격 저장소의 origin/master는 보이지 않는다.
원격 저장소의 최신 커밋 정보는 가져왔지만, 아직 로컬에 합치지 않았기 때문임.
origin/master에 비해 1개의 커밋이 뒤쳐져있다.원격 저장소의 최신 커밋 하나가 아직 지역 저장소에 반영되지 않았음을 의미한다.
fetch로 가져온 최신 커밋 정보는 origin/master 브랜치가 아닌, FETCH_HEAD 라는 브랜치로 가져온다. 해당 브랜치로 가져온 정보는 로컬 저장소에 바로 반영되지 않음. 한번 확인해보자.
git checkout FETCH_HEAD
최신 커밋에 origin/master와 origin/HEAD가 표시됨.
이 커밋이 fetch 명령어로 가져온 원격 브랜치의 최신 커밋이다. 이 내용을 살펴보고 로컬 저장소에 합칠지 말지 결정.
4. 해당 커밋을 현재 브랜치에 합치기 위해 두 가지 방법 사용 가능
1) git pull
2) git merge
- master 브랜치로 이동한 뒤 merge
git checkout master
git merge FETCH_HEAD
※ fetch로 가져온 브랜치 한 번에 병합하기
fetch한 뒤 병합할 때 원격 master 브랜치에 있는 커밋이라면 다음과 같이 병합한다.
git merge origin/master
다른 브랜치에 있는 커밋이라면 다음과 같이 병합한다.
git merge origin/브랜치이름
매번 브랜치 이름을 쓰기 귀찮다. fetch한 뒤 로컬 저장소에 반영하지 않은 최신 커밋을 병합
git merge FETCH_HEAD
협업의 기본
깃허브 public 저장소는 주소만 알면 누구든 접속해서 소스를 확인할 수 있음.
하지만 누구나 해당 저장소에 커밋을 푸시할 수는 없다. 승인된 공동 작업자에게만 커밋을 올릴 수 있는 권한을 주어야 함.
공동작업자 추가하는 방법
1) 해당 저장소의 Settings
2) collaborators로 들어가서 공동작업자의 깃허브 아이디 혹은 메일 주소 입력
3) Add collaborators
협업에서 브랜치 사용하기
협업하다보면 각 팀원마다 다른 기능을 맡아서 작업하는 경우가 많다.
팀원 1은 기능 A를, 팀원 2는 기능 V를 만드는 것.
이런 경우, 각자의 작업이 master 브랜치에 있는 문서들과 섞이지 않도록 새 브랜치를 만들어서 버전관리한다.
그리고 각 팀원이 만든 새 브랜치 역시 원격 저장소에 그대로 푸시할 수 있음.
새로 만든 브랜치 푸시
1. 원격 저장소에 다른 팀원들의 커밋이 추가되어 있는지 확인 위해 git pull 사용 -> 최신 커밋 정보 가져옴
2. 새로운 기능을 구현하기 위해 로컬저장소에 브랜치 FuncA 제작, 후 FuncA로 체크아웃
git checkout -b FuncA
- checkout에 -b옵션을 추가하면 브랜치를 만들고 체크아웃까지 한번에 가능
3. FuncA.txt 생성 후 커밋
4. 원격 저장소에 FuncA 브랜치까지 함께 푸시
git push origin FuncA
- git push 뒤에 origin FuncA를 추가하면, 원격 저장소(origin)에 FuncA 브랜치를 푸시한다는 의미이다.
5. 풀 리퀘스트로 푸시한 브랜치 병합하기
위 과정까지 진행하면, 아직 원격 저장소의 파일 목록에는 FuncA 브랜치에서 만들었던 FuncA.txt가 없는 상태이다.
푸시한 브랜치는 풀 리퀘스트(pull request)를 통해 병합해야 원격 저장소에 반영됨.
- New pull request 클릭
- 상단에 Pull Requests 누르면 풀 리퀘스트 목록이 나타난다.
- 메시지를 살펴본 후 내용에 문제가 없으면 "Merge pull request" 눌러서 병합
- 커밋 메시지 입력한 후 "Confirm merge"
- 브랜치 상태를 확인하면 merged
※ 깃허브에서 협업할 때는 보통 작업자마다 브랜치를 만들어서 진행하고, 작업 중간중간 풀리퀘스트를 보내서 master 브랜치에 병합한다.
깃허브로 협업할 때는 다른 작업자의 변경 내용을 바로 반영하기 위해 항상 풀(PULL)부터 한 다음 자신의 작업을 진행하는 것이 좋다.
'기타' 카테고리의 다른 글
AWS 공동 책임 모델 (0) | 2022.10.23 |
---|---|
클라우드 서비스(SaaS, PaaS, IaaS, FaaS) 개념 (0) | 2022.10.23 |
[Git] Git bash로 깃허브(Github) 연동하기, HTTPS와 SSH (0) | 2022.10.12 |
[Git] 브랜치(Branch), 병합(Merge), 체크아웃, stash 스택 (0) | 2022.10.10 |
[Git] Git이란? Git 사용 방법과 명령들 (0) | 2022.10.10 |