05-1 여러 컴퓨터에서 원격 저장소 사용
05 깃허브로 협업하기
팀 프로젝트를 할 때 깃허브를 어떻게 사용하는지
05-1 여러 컴퓨터에서 원격 저장소 함께 사용하기
이제부터 git_home과 git_office라는 2개의 디렉터리를 만들어 깃허브로
협업을 연습해보자 위의 각 디렉터리를 개인 컴퓨터와 회사 컴퓨터 저장소로
또는 하나는 데스크탑PC, 하나는 노트북의 저장소라고 상상해도 좋다.
모두 하나의 깃허브 계정으로 둘 이상의 컴퓨터에서 원격 저장소를 공유해
버전 관리하는 방법이다.
원격 저장소 복제하기(git clone)
원격 저장소를 기존에 연결된 지역 저장소 외에 다른 지역 저장소에서 사용하려면
원격 저장소에 담긴 내용 전체를 지역 저장소로 가져와야 한다. 원격 저장소를
지역 저장소로 똑같이 가져오는 것을 '복제한다'고 하거나 '클론(clone)' 또는
'클로닝(cloning)'이라고 한다.
1. 깃허브에 있는 저장소를 선택한 후 [Code] [>_ Clone] HTTPS 주소복사
2. 터미널 창에서 git_home과 git_office 디렉터리를 만들고 해당 위치로 이동
$ git clone 복사한 주소 붙여넣기 git_home
$ git clone 복사한 주소 붙여넣기 git_office
원격 저장소를 현재 디렉터리에 복제하려면 git_home대신 마침표(.) 입력
3. 각각의 디렉터리로 이동 후 git log 명령 실행
4. 이렇게 원격 저장소를 복제하면 자동으로 지역 저장소와 원격 저장소가 연결된다.
git_home디렉터리나 git_office 디렉터리에서 git remote -v 명령을 사용하면
연결이 되어 있는지 확인할 수 있다.
$ git remote -v
개인 컴퓨터에서 작업하고 올리기
같은 원격 저장소를 복제한 2대의 컴퓨터 중 한 곳에서 커밋을 만들고 푸시해 보자
git_home 디렉터리(개인pc)에서 작업
1. cd git_home
vi f1.txt
a
b
c
입력 저장
2. git commit -am 'add c'
git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 261 bytes | 130.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/narospace/test-1.git
b5bf78c..7590dc2 master -> master
3. 깃허브 원격 저장소로 접속해서 제대로 커밋이 올라왔는지 확인[commmits]
4. 이렇게 원격 저장소의 내용을 복제한 지역 저장소에서 내용을 수정하고 커밋한 후
다시 원격 저장소에 올렸다.
회사 컴퓨터에서 내려받아 작업하기
개인 컴퓨터에서 컷밋을 푸시했기에 회사 컴퓨터에서 원격 저장소를 복제했을 때와
원격 저장소의 커밋 상황이 달라졌다. 따라서 회사 컴퓨터에서 작업하려면 먼저
원격 저장소에 새로 올라온 커밋을 가져와야 합니다.
1. cd git_office
git log --oneline
b5bf78c (HEAD -> master, origin/master, origin/HEAD) Create f2.txt
2. git pull
앞에서 복제 과정을 거쳤기 때문에 git_office의 master브랜치는 origin에 이미
연결되어 있다. 터미널 창에서 git_office 디렉터리 이동 후 git pull 명령을
입력하면 원격 저장소에 새로 올라온 커밋을 가져온다.
3. git log --oneline
7590dc2 (HEAD -> master, origin/master, origin/HEAD) add c
cat f1.txt : 개인 컴퓨터의 커밋 내용 'c'가 포함되어 있는지 확인
4. vi f1.txt <- 'd'추가 저장
git commin -am 'add d'
git push
'd'를 추가하고 'add d' 메시지로 커밋을 만들고 원격 저장소로 푸시
5. 웹 브라우저에서 깃허브 저장소를 열고 [commits] 확인
6. cd ../git_home
git pull
git log
다시 개인 컴퓨터(git_home)에서 작업할 때는 git pull 명령으로 원격 저장소에서
최신 커밋을 가져와 작업 시작. git log 명령으로 확인
하나의 원격 저장소에 둘 이상의 컴퓨터를 연결해서 사용한다면 풀과 푸시를 습관화하는 것이
좋다. 그러면 어떤 컴퓨터에서 접속하든 항상 최신 소스를 유지할 수 있다.
05-2 원격 브랜치 정보 가져오기
git pull 명령은 원격 저장소의 최신 커밋을 지역 저장소에 합쳐준다.
하지만 최신 커밋을 합치기 전에 원격 저장소에 어떤 변화가 있는지 먼저 살펴보자.
이 절에서는 원격 브랜치의 역할과 원격 브랜치에서 정보를 가져오는 방법,
가져온 정보를 지역 저장소에 병합하는 과정을 알아보자.
원격 master 브랜치
지역 저장소의 master 브랜치처럼 원격 저장소도 만들 때 기본으로 master
브랜치가 생성된다. 앞에서 git_home 저장소와 git_office 저장소로 원격
저장소를 복제한 상태로 실습을 계속하면서 확인해 보자. 이제부터 원격 저장소
에 있는 브랜치는 '원격 브랜치'로, 원격 저장소에 있는 master 브랜치는
'원격 master 브랜치'로 구별해서 명명한다.
1. 깃허브에서 test-1 저장소로 접속한 후 [commits]를 클릭
'add d'라는 커밋이 마지막, 여기에서 원격 저장소에 있는 HEAD는 원격
저장소의 master 브랜치를 가리킬 것이고, 원격 master 브랜치는 'add d'
라는 최종 커밋을 가리킨다.
2. cd git_home
git log --oneline
fc26b88 (HEAD -> master, origin/master, origin/HEAD) add d
여기에서 HEAD->master는 이 커밋이 지역 저장소의 최종 커밋이라는 뜻,
origin/master는 원격 저장소의 최종 커밋이라는 뜻이다.
아직 git_home 디렉터리가 원격 저장소를 복제한 상태 그대로이기 때문에
지역 저장소와 원격 저장소 모두의 최종 커밋이 같다.
3. git_home 디렉터리에 새로운 커밋을 만들어 보자.
vi f3.txt <- 'a' 입력 저장
4. git add f3.txt
git commit -m 'create f3.txt'
5. git log --oneline
1c0cf41 (HEAD -> master) create f3.txt
fc26b88 (origin/master, origin/HEAD) add d
7590dc2 add c
b5bf78c Create f2.txt
fbeb28b add b
6c1f1b9 add a
(HEAD->master)는 방금 커밋한 'create f3.txt'를 가리킨다. 지역 저장소의
최종 커밋이 'create f3.txt'커밋이라는 뜻,
하지만 (origin/master, origin/HEAD)는 아직 'add d' 커밋을 가리키고 있다.
6. git status
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
이 상태에서 git status를 입력해 보면 현재 master 브랜치가 origin에 있는
원격 master 브랜치의 버전보다 하나 앞서 있는 것을 알 수 있다. 그리고
push 명령으로 지역 저장소의 커밋을 원격 저장소로 올리라고 알려준다.
7. git push
git log --oneline
이제 git push 명령을 사용해서 'create f3.txt'라는 커밋을 원격 저장소로 올리자
그러고나서 커밋 로그를 확인하면 푸시하기 전까지는 master 브랜치와 origin/master
브랜치가 가리키는 커밋이 달랐지만, 푸시한 후에는 master와 origin/master 브랜치가
같은 커밋을 가리키게 됩니다.
1c0cf41 (HEAD -> master, origin/master, origin/HEAD) create f3.txt
fc26b88 add d
7590dc2 add c
b5bf78c Create f2.txt
fbeb28b add b
6c1f1b9 add a
원격 브랜치 정보 가져오기(git fetch)
패치(fetch)는 '불러오다, 가져오다'라는 뜻, 그래서 git fetch 명령은 원격 저장소의
정보를 가져오는 기능이 있다. 풀 명령이 원격 저장소의 커밋을 가져와서 무조건 지역
저장소와 합친다면, 패치 명령은 원격 브랜치에 어떤 변화가 있는지 그 정보만 가져온다.
팀 작업을 할 때 다른 사람이 수정한 소스를 한번 더 훑어보고 지역 저장소와 합치고
싶다면 풀 대신 패치를 사용해서 커밋을 가져온 다음 지역 저장소와 합치면 된다.
1. cd ../git_office
git fetch
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 272 bytes | 13.00 KiB/s, done.
From https://github.com/narospace/test-1
fc26b88..1c0cf41 master -> origin/master
회사 컴퓨터 저장소로 이동해서 진행. 원격 저장소에서 무언가 가져옴
2. ls -al
분명히 원격 저장소에 있는 커밋을 가져왔는데 git_home에서 원격 저장소로 푸시했던
f3.txt 파일이 없네?
3. git log --oneline
fc26b88 (HEAD -> master) add d
7590dc2 add c
b5bf78c Create f2.txt
fbeb28b add b
6c1f1b9 add a
커밋 해시 오른쪽을 보면 (HEAD -> master)만 보이고 원격 저장소의 (origin/master)
는 보이지 않는다. 원격 저장소의 최신 커밋 정보를 가져왔지만 아직 지역 저장소에
합치지 않아 원래 git_office에 있던 최신 커밋만 나타나기 때문이다.
4. git status
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
(use "git pull" to update your local branch)
현재 브랜치가 origin/master에 비해 1개 커밋이 뒤처져 있다고 표시
즉 원격 저장소의 최신 커밋 하나가 아직 지역 저장소에 반영되지 않았다는 뜻
git pull 명령 사용하여 업데이트 하라고 알려줌
5. 그렇다면 패치로 가져온 최신 커밋 정보는 어디에 있을까?
패치로 가져온 원격 저장소 정보는 origin/master 브랜치가 아닌 FETCH_HEAD라는 브랜치로
가져옴. 이 브랜치로 가져온 정보는 지역 저장소에 바로 반영되지 않는다.
6. git checkout FETCH_HEAD
패치해서 가저온 최신 커밋을 살펴보고 싶다면 FETCH_HEAD 브랜치로 체크아웃
...
HEAD is now at 1c0cf41 create f3.txt
happycom@HAPPY-COM MINGW64 /e/Lecture/01.강의자료/SRC/Git/git_office ((1c0cf41...))
7. git log
commit 1c0cf41623eaec15b0e4501be1e8b757d61534cb (HEAD, origin/master, origin/HEAD)
Author: happyhome <call1212@narospace.com>
Date: Sat Nov 6 21:39:36 2021 +0900
create f3.txt
...
FETCH_HEAD 브랜치에서 git log 명령 실행 (HEAD, origin/master, origin/HEAD)가 표시
즉 이 커밋이 패치로 가져온 원격 브랜치의 최신 커밋이다. 이 내용을 살펴보고 원격 브랜치
의 최신 커밋을 지역 저장소에 합칠지 말지를 결정하면 된다.
happycom@HAPPY-COM MINGW64 /e/Lecture/01.강의자료/SRC/Git/git_office ((1c0cf41...))
$ ls -al
...
-rw-r--r-- 1 happycom 197121 3 Nov 7 00:19 f3.txt
f3.txt 파일 확인
8. git checkout master
git merge FETCH_HEAD
패치한 후에 최신 커밋을 현재 브랜치에 합치려면 git pull 명령을 사용해서 원격 저장소의
소스를 내려받을 수도 있고, git merge 명령으로 FETCH_HEAD에 있던 커밋을 병합할 수도
있다.
9. git log --oneline
ls -al
05-3 협업의 기본
05-3 협업의 기본 알아보기
깃허브의 원격 저장소를 사용해 협업할 때 가장 기본으로 사용되는 방법을 알아보자
하나의 작업을 사용자가 협업하기 위해서는 각자 지역 저장소에서 작업한 내용을
자유롭게 원격 저장소에서 공유할 수 있어야 한다.
여기서 사용자가 총 세명이라고 가정해보자.
[1] 공동 작업자 추가하기
깃허브 공개 저장소는 주소만 알면 누구든지 접속해서 올라와 있는 소스를 살펴
볼 수 있다. 또 깃허브 회원이라면 누구나 오픈 소스 프로젝트의 소스를 내려받을
수도 있다. 하지만 누구나 저장소에 커밋을 푸시할 수는 없다. 공개 저장소든
비공개 저장소든 여러 사람이 협업한다면 승인된 공동 작업자에게만 커밋을 올릴
수 있는 권한을 주어야 한다. 그래야 프로젝트 소스가 무분별하게 수정되는 일을
막을 수 있기 때문이다.
여기에서는 '팀장'과 '팀원1', '팀원2' 이렇게 세 사람이 깃허브를 통해 협업한
다고 생각해보자. 팀 작업을 하려면 팀원 중 누군가 원격 저장소를 만들고 나머지
팀원들은 공동 작업자로 추가해야 한다. 여기에서는 팀장이 manuals라는 저장소를
만들었다고 가정해 보자.
팀장은 manuals 저장소 화면에서
1. Repository에서 [Settings] 메뉴 선택,
2. 왼쪽 옵션에서 [Manage Access] 선택,
'Manage access' 에서
3. [Add people] 버튼 클릭
초대할 ID 검색 및 email 등록
4. 각 팀원은 초대 메일 확인
[2] 작업 환경 구성하기
원격 저장소에 공동 작업자가 추가 되었다면 팀장과 팀원들이 번갈아 커밋을 올리
거나 내려받으면서 작업할 수 있다. 이 작업은 둘 이상의 컴퓨터에서 하나의 깃허브에
접속하는 것이기 때문에 이후의 실습은 두 대의 서로 다른 컴퓨터에서 진행해야 한다.
먼저 각 작업자의 컴퓨터에 지역 저장소를 만들어야 한다. 그리고 공동 작업에서
사용할 이름과 이메일 주소를 지정한다.
저장소마다 다른 이름이나 이메일 주소를 사용하기 위해
git config 명령을 사용할 때 --global 옵션을 빼고 이름과 메일 주소를 지정
$ git init manuals
$ cd manuals
$ git config user.name '사용자 이름'
$ git config user.email '메일 주소'
$ git config -l
팀장뿐만 아니라 공동 작업자 모두 같은 방식으로 지역 저장소와 기본 사용자 환경을
지정한다.
[3] 원격 저장소에 첫 커밋 푸시하기
우선 팀장이 overview.txt 라는 문서를 만들고 커밋한 후 원격 저장소의 master 브랜치
로 푸시하는 과정을 살펴보자. 원격 저장소에 처음 올라가는 커밋이라면 앞에서 공부한
것처럼 간단히 올릴 수 있다.
1. vi overview.txt
git add overview.txt
git commit -m 'overview'
git log
2. git remote add origin 복사한 저장소 주소
git push -u origin master
git log
지역 저장소의 커밋을 원격 저장소에 푸시하려면 먼저 원격 저장소 주소를 복사
그리고 터미널 창에서 깃의 origin에 복사한 주소를 지정
git push 명령을 사용해 origin의 master브랜치에 커밋을 올린다.
이 때 다음과 같이 -u 옵션을 붙이면 다음부터 git push 명령만으로
원격 저장소의 master브랜치에 커밋을 올릴 수 있다.
3. 깃허브의 원격 저장소를 확인하면 팀장이 올린 overview.txt 문서의 최종 커밋이
올라와 있다.
[4] 공동 작업자 컴퓨터에 원격 저장소 복제하기
원격 저장소에서 협업할 때 공동 작업자는 자신의 작업을 진행하기 전에
git clone 명령을 사용해서 원격 저장소를 복제(clone)한다.
$ git clone 원격 저장소 주소
[5] 첫 번째 커밋이 아니라면 풀 먼저하기
깃허브에서 협업할 때는 여러 사람이 함께 문서를 수정하고 푸시하기 때문에 반드시
작업하기 전에 원격 저장소의 최신 커밋을 풀한 다음 자신의 커밋을 푸시해야 한다.
1. vi overview.txt
git commit -am 'update overview'
git push
팀원 모두가 원격 저장소를 복제한 다음 팀장이 overview.txt를 수정해서
'update overview'라는 메시지와 함께 커밋하고 푸시했다고 가정해 보면,
즉 팀원1과 팀원2가 저장소를 복제한 뒤 원격 저장소에 새로운 커밋이 올라온 상태
2. 팀장이 새 커밋을 만들어 원격 저장소에 푸시하는 동안 팀원1이 다른 컴퓨터에서 다른
커밋을 푸시한다고 가정해보자. 팀원1의 컴퓨터에서 'apple.txt'문서를 작성한 후 커
밋을 만든다.
vi apple.txt
git add apple.txt
git commit -m 'apple'
3. 팀원1이 작성한 커밋을 원격 저장소에 푸시한다.
git push -u origin master
4. To https://github.com/narospace/manuals.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/narospace/manuals.git'
그런데 예상하지 못한 오류가 표시된다!!!
![rejected]라고 하는 오류 메시지는 원격 저장소에 있는 최신 커밋 정보가 팀원1의
컴퓨터에 저장되어 있지 않기 때문에 나타난다.
이런 오류가 생기지 않게 하려면 자신의 커밋을 푸시하기 전에 원격 저장소의 최신 커밋
을 가저와야 한다.
5. git pull
원격 저장소에 있는 최신 커밋을 가져오기 위해 git pull 명령 실행
6. 자동으로 vi(편집기)가 실행되면서 커밋 메시지가 표시된다
원하는 내용을 추가해도 되고 기본 메시지를 사용해도 된다.
7. git push -u origin master
원격 저장소에서 최신 커밋 정보를 가져왔으므로 이제 팀원1이 만들었던 커밋을 푸시할
수 있다. 원격 저장소에서 협업할 때는 이렇게 원격 저장소의 최신 커밋 정보를 가져온
다음 지역 저장소의 커밋을 올려야 한다는 점을 꼭 기억해 둘것!!!
05-4 협업에서 브랜치 사용
05-4 협업에서 브랜치 사용하기
협업을 하다 보면 팀원들이 각자 다른 기능을 맡아서 작업하는 경우가 많다.
팀원1은 '기능A'를 만들고 팀원2는 '기능B'를 만드는 것처럼...
이럴 때는 각자의 작업이 master브랜치에 있는 문서들과 섞이지 않도록
새 브랜치를 만들어서 버전을 관리한다.
그리고 각 팀원이 만든 새 브랜치 역시 원격 저장소에 그대로 푸시할 수 있다.
새로 만든 브랜치 푸시하기
여기에서는 '팀장'이 새로운 기능을 만들기 위해 자신의 지역 저장소에
f라는 브랜치를 만들고 커밋한 다음 원격 저장소에 푸시하는 과정을 해보자
1. git pull
원격 저장소에 다른 팀원들의 커밋이 추가되어 있는지 확인하기 위해
먼저 git pull 명령을 사용해 최신 커밋 정보를 가져온다.
2. 새로운 기능을 구현하기 위해 지역 저장소에 브랜치 f 를 만들고 f로
체크아웃한다. -b 옵션을 사용하면 브랜치를 만들고 체크아웃하는 것을
한꺼번에 할 수 있다.
git checkout -b f
3. vi f1.txt
git add f1.txt
git commit -m 'features1'
4. git push origin f
원격 저장소에 f 브랜치까지 함께 푸시 git push 뒤에 origin f 추가
하면 원격 저장소(origin)에 f 브랜치를 푸시한다는 의미
참고| push 403 error 대처
$ git remote set-url origin https://call1212@github.com/narospace/manuals.git
$ git remote -v
5. 푸시가 끝났다면 웹 브라우저에서 원격 저장소로 접속 확인
저장소 파일목록 위에 '2 branches'라고 되어 있다. 눌러 보면 방금
푸시한 브랜치가 나타난다.
풀 리퀘스트로 푸시한 브랜치 병합하기
아직 원격 저장소의 파일 목록에는 f 브랜치에서 만들었던 f1.txt 파일이 없다.
푸시한 브랜치는 풀 리퀘스트(pull request)를 통해 병합해야 원격 저장소에
반영되기 때문이다. 풀 리퀘스트 하는 과정을 알아보자.
1. 브랜치 설명 옆에 있는 [Compare & pull request] 클릭
2. 풀 리퀘스트 메시지를 작성한 후 [Create pull request]를 클릭하면
협업 중인 저장소에 풀 리퀘스트가 전송된다.
3. 협업 중인 원격 저장소에 등록된 풀 리퀘스트는 공동 작업자 중 누구나 살펴
보고 병합할 수 있다. 저장소 파일 목록 위의 [Pull request]를 누르면
등록된 풀 리퀘스트 목록이 나타난다. 등록된 풀 리퀘스트를 클릭
4. 풀 리퀘스트 메시지를 살펴본 다음 내용에 문제가 없으면 [Merge pull request]
를 눌러 병합한다. 필요하다면 이 공간을 통해 풀 리퀘스트를 남긴 사람과 메시지를
주고 받을 수도 있다.
5. 커밋 메시지를 직접 입력하거나 기본 메시지를 사용할 수도 있다.
[Confirm merge]를 클릭 브랜치 병합을 끝낸다.
6. 브랜치가 병합되면 해당 브랜치에 있던 파일이 master 화면에 나타난다.
브랜치 상태를 알고 싶다면 파일 목록 위에 있는 '2 branches' 클릭
7. 브랜치가 병합된 상태라면 'merged'라고 표시되어 있다. 그리고 공동 작업자 중
누가 브랜치를 병합했는지도 알 수 있다.
8. 깃허브에서 협업할 때는 보통 작업자마다 브랜치를 만들어서 진행하고, 작업 중간
중간 풀리퀘스트를 보내서 master 브랜치에 병합한다. 그래서 깃허브로 협업할 때는
다른 작업자의 변경 내용을 바로 반영하기 위해 항상 풀(pull)부터 한 다음 자신의
작업을 진행하는 것이 좋다.
브랜치를 마스터에서 메인으로 변경하는법
- echo 명령어 리눅스
- 마크다운(md)파일 만들기
- 명령어 생각 안나면 이거 복사해서 그대로 붙여넣으면 파일 푸쉬가능
- 따라해보기
협업 실습
위에 쌓이면
'⚙️ 4. 개발도구 > 4-1 Git' 카테고리의 다른 글
[Git] 6장 깃허브 관리하기 (0) | 2021.11.12 |
---|---|
[Git] 4장 깃허브로 백업하기(1) - 원격 저장소와 깃허브 / 지역저장소를 원격 저장소에 연결 / 원격 저장소에 올리고 내려받기 / 깃허브에 SSH 원격 접속 (0) | 2021.11.10 |
[Git] 3장 깃과 브렌치 - 브랜치 개념 및 정보 확인 / 브랜치 병합과 관리 (0) | 2021.11.08 |
[Git] 2장 깃으로 버전 관리하기 - 깃 저장소 및 버전 생성 / Commit 내용 확인 / 버전 단계 파일 확인 (0) | 2021.11.08 |
[Git] 1장 깃 시작하기 - Git 개념과 설치 및 환경설정 / 리눅스 명령어 (0) | 2021.11.08 |
댓글