깃허브의 원격 저장소를 이용하여 하나의 작업을 여러 사용자가 협업하기 위해서는 각자 지역 저장소에서 작업한 내용을 자유롭게 원격 저장소에서 공유할수 있어야합니다.
1. 공동 작업자 추가하기
깃허브의 공개 저장소는 주소만 알면 누구든 접속하여 소스를 볼수 있습니다.
또한 깃허브 회원이라면 누구나 오픈소스 프로젝트의 소스를 내려 받을수도 있습니다.
하지만 누구나 commit 하거나 push 할수는 없습니다.
여러 사람이 협업을 한다면 승인된 공동 작업자만 commit을 할수 있는 권한을 주어야 소스코드가 무분별하게 수정되는 것을 막아줄수있습니다.
만약 '팀장', '팀원1', '팀원2' 세사람이 깃허브를 통해 협업한다고 가정했을때 팀 작업을 하려면 팀원 중 누군가 원격 저장소를 만들고 나머지 팀원들을 공동 작업자로 추가해야합니다.
여기에서 팀장이 projecttest라는 저장소를 만들었다고 가정해보겠습니다.
해당 repository로 들어가서 Settings - Manage access - Invite a collaborator를 누르면
username이나 email등을 이용하여 초대할수 있습니다.
초대 받은 팀원들은 협업자로 초대 되었다는 메일과 깃허브 메시지를 받게 되는데, 깃허브 메시지 화면에서 Accept Invitation을 누르면 수락됩니다.
수락한 공동 작업자들은 모두 화면에 나올것입니다.
( 실제로 준비할수가 없어서 글로만 표현하겠습니다 )
2. 작업 환경 구성하기
공동작업자가 모두 추가 되었다면 팀장과 팀원 1, 팀원 2가 번갈아 커밋을 올리거나 내려받으면서 작업 할수 있습니다.
먼저 각 작업자의 컴퓨터에 지역 저장소를 만들어야 합니다.
그리고 공동 작업에서 사용할 이름과 이메일 주소를 지정합니다.
$git init projecttest
$cd projecttest
$git config user.name "사용자 이름"
$git config user.email 메일 주소
이와 같은 방식으로 팀장과 팀원들 모두 같은 방법으로 지역 저장소와 기본 사용자 환경을 지정해야합니다.
3. 원격 저장소에 첫 commit, push하기
우선 팀장이 원격저장소와 지역저장소를 연결하고 viewtest.txt 파일을 만들어 원격 저장소의 master 브랜치로 push했다고 해보겠습니다.
$git remote add origin 복사한 원격저장소URL
$vim viewtest.txt
$git add .
$git commit -m "viewtest"
$git push -u origin master
이처럼 명령어를 작성하면 깃허브 원격저장소에 viewtest.txt파일이 올라가 있을 것입니다.
4. 공동 작업자 pc에 원격 저장소 clone
원격 저장소에서 협업할 떄 공동 작업자는 자신의 작업을 진행하기 전에 원격 저장소를 clone 해야합니다.
$git clone 원격저장소URL
5. 첫 번째 commit이 아니라면 pull
깃허브에서 협업을 할때는 여러 사람이 함께 문서를 수정하고 push하기 떄문에 반드시 작업을 하기 전에 원격 저장소의 최신 커밋을 pull로 당겨온 다음에 자신의 commit을 push해야합니다.
1) 팀원 모두가 원격 저장소를 복제한 다음 팀장이 viewtest.txt를 수정해서 'viewtest 수정'이라는 커밋 메세지와 함꼐 commit을 하고 push까지 했다고 가정해 보겠습니다.
팀원1과 팀원2가 저장소를 복제하고 나서 원격저장소에 새로운 commit이 올라왔습니다.
$vim viewtest.txt
$git add viewtest.txt
$git commit -m "viewtest 수정"
2) 팀장이 새로운 commit을 원경 저장소에 push 하는동안 팀원1이 다른 작업을 하고 commit, push를 하여 viewtest02.txt 파일을 원격저장소에 올렸습니다.
$vim viewtest02.txt
$git add viewtest02.txt
$git commit -m "viewtest02"
3) ![rejected]로 시작하는 오류가 발생할것입니다. 원격 저장소에 있는 새로운 commit 내역은 팀원1의 pc에는 존재 하지 않기때문에 발생하는 에러입니다. commit 전 pull로 먼저 당겨와야합니다. pull명령을 사용하여 당겨오는 경우 자동으로 vim이 실행되면서 commit message가 표시 됩니다. 원하는 내용으로 추가해도 되고 기본 메세지를 사용해도 됩니다.
$git pull
4) pull로 당겨왔을 경우 원격 저장소에 있는 최신 정보를 당겨왔으므로 이제 commit할수 있게됩니다. 새로운 수정내용을 commit 하고 push하면됩니다.
$git commit -m "viewtest02"
$git push -u origin master
6. 새로운 브랜치로 push하기
협업을 할때에는 각기 다른 기능을 작업하는 경우가 대부분입니다.
이럴 때는 master 브랜치에 있는 문서들과 섞이지 않도록 새브랜치를 만들어 버전관리를 하며 협업하여야 합니다.
각 팀원의 새로운 브랜치에서도 원격저장소에 push할수 있기때문입니다.
1) 원격 저장소에 다른 팀원들의 commit이 추가되어 있는지 확인하기 위해 git pull 명령을 사용하여 최신 수정 내역를 당겨옵니다.
$git pull
2) 다른 기능 및 작업을 위해서 지역저장소에 새로운 브랜치를 만들고 새로운 브랜치로 이동(checkout)합니다.
$git branch -b team1
이 과정에서 브랜치명에 대한 브랜치가 이미 있다면 해당 브랜치로 이동(checkout)합니다.
3) 브랜치를 이동했다면 문서를 만든후 commit 합니다.
$vim viewtest03.txt
$git add viewtest03.txt
$git commit -m "viewtest03"
4) 원격 저장소에 브랜치까지 함꼐 push합니다. git push 명령 뒤에 origin 브랜치 를 적어 주면 원격저장소(origin)에 새로운 브랜치를 push한다는 의미입니다.
$git push origin team1
5) push가 끝났다면 웹 브라우저에서 원격 저장소로 접속해 봅니다. 저장소 파일 목록 위에 '2 branches'라고 되어 방금 push한 브랜치가 나타날것입니다.
7. pull request로 push한 branch merge하기
원격 저장소의 파일목록에는 team1 브랜치에서 만들었던 viewtest03.txt파일이 없을것입니다.
push한 브랜치는 pull request를 통해 병합해야 원격 저장소에 반영이 되기 때문입니다.
1) branch 설명 옆에 New 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을 먼저 당긴후에 자신의 작업을 진행하는 것을 권장합니다.
본 포스팅은 DO it! 지옥에서 온 문서 관리자 깃&깃허브 입문 도서를 참고하며 공부한 내용을 포스팅 하였습니다.
'Git > Github' 카테고리의 다른 글
[Github] GIthub에서 README.md 작성하기 (0) | 2022.06.29 |
---|---|
[Git & GitHub] 원격 브랜치 정보 (0) | 2022.06.27 |
[Git & GitHub] 여러 PC에서 원격 저장소 함께사용하는법 (0) | 2022.06.26 |
[Git & GitHub] 깃허브 SSH(Secure Shell) 원격 접속 (0) | 2022.06.25 |
[Git & GitHub] 원격저장소에 파일 올리고 내려받기(push & pull) (0) | 2022.06.24 |