일상/컴퓨터

[GitHub 깃 & 깃허브 입문] 협업 환경

미적미적달팽이 2023. 4. 7. 17:24

[GitHub 깃 & 깃허브 입문] 깃허브

 

[깃 & 깃 허브 입문] 깃허브

원격 저장소 지역 저장소인 작업 컴퓨터의 로컬 드라이브가 아닌, 외부 통신망을 통해 접속할 수 있거나 작업 컴퓨터 외에 저장소를 원격 저장소라 하며, 이를 통해 협업과 백업을 해서 안전하

gunrestaurant.tistory.com


원격 저장소 공유

원격 저장소 복제 - git clone

먼저 이전에 실습하면서 생셩했던 원격 저장소로 들어가서 code 버튼을 누르고 HTTPS로 전환한 주소를 복사합니다.

git clone 이라는 명령을 사용해서 새로운 디렉터리와 함께 원격 저장소를 복제합니다.
디렉터리를 이미 만들어둔 곳에 복제하려면 디렉터리명 대신 .을 입력합니다.

따로 외부에 공유할 디렉터리가 있다는 가정을 해보고, 다른 디렉터리를 똑같이 만들어 줍니다. 만들어진 상태를 ls -la 명령으로 한 번 확인까지 해봅니다.

$ git clone 주소 디렉터리명

이로써 두 개의 디렉터리에 같은 원격 저장소가 복제되어서, 같은 버전의 커밋이 각각에 존재하게 되었습니다.

두 개의 디렉터리를 이동하면서 git log와 git remote 명령으로 상태를 확인해보면 동일한 내용이 출력되는 것을 확인할 수 있습니다.

 

하나의 컴퓨터에서 작업하고 푸시

먼저 원격 저장소를 복제해둔 디렉터리 중 하나로 이동해서 기존에 있던 txt 파일을 수정해봅니다.

이제 이전에 배웠던 git commit -am으로 스테이징과 커밋을 한번에 진행을 해줍니다.

git push 명령으로 푸시까지 진행을 완료합니다. 이 작업까지 수행한 후 깃허브 사이트의 원격 저장소로 돌아와서 수정한 파일을 보면 푸시한 내용으로 업데이트 된 것을 확인할 수 있습니다.

 

다른 컴퓨터에서 푸시한 것을 이어받아서 작업하기

다른 컴퓨터에서 푸시해서 업데이트한 내용을 이어서 작업하려면, 작업하려는 곳에서 원격 저장소의 변경사항을 내려받아야 합니다.

다른 디렉터리로 이동해서 git pull 명령을 사용해 원격 저장소에서 새로운 커밋을 가져옵니다.

$ git pull

git pull이 완료된 후, 아까 작업했던 파일을 이어서 작업해봅시다. 빔 편집기로 다시 파일을 수정을 한 후 똑같이 스테이징과 커밋, 푸시까지 완료를 해줍니다.

깃허브 저장소 사이트로 돌아오면 방금 수정해서 커밋한 내용으로 업데이트가 된 것을 확인할 수 있습니다. 위의 5 commits 을 누르면 지금까지의 커밋한 내역을 확인할 수 있습니다. 

이제 먼저 작업한 디렉터리에서 작업을 이어서 하고자 하면 방금의 작업을 똑같이 반복하면 됩니다. 협업하는 프로젝트나 사업에서는 이러한 push와 pull을 습관화해야 최신의 정보를 공유할 수가 있습니다.

 

5-2 원격 브랜치 정보 업데이트

원격 저장소 main 브랜치

최신의 정보를 몽땅 무조건 합치는 것이 아닌 필요한 정보만 가져오는 것도 가능합니다. 아까 작업했던 파일을 git log로 정보를 확인해 보면 

이와 같이 브랜치가 출력되는 것을 확인할 수 있습니다. 여기서 HEAD는 해당 브랜치에서의 마지막 커밋을 뜻하며, HEAD -> main은 지역 저장소의 최종 커밋을 뜻하고, origin/main은 원격 저장소의 최종 커밋이라는 의미를 나타냅니다.

처음에 작업했던 디렉터리로 가서, 새로운 파일을 생성해서 커밋까지 진행을 해봅니다.

$ cd ~/git_office
$ vim f3.txt
$ git add f3.txt
$ git commit -m "create f3.txt"

현재 디렉터리 상태는 아래와 같습니다. 이제 지역 저장소의 main 브랜치의 HEAD는 create f3.txt을 가리키고 있습니다.

git status 명령을 사용하면, 현재 지역 저장소의 브랜치가 원격 저장소의 브랜치보다 커밋이 하나 앞서있다면서 push를 하길 권장하고 있습니다.

git push를 하고 다시 git log를 확인해 보면, 다시 HEAD가 아까처럼 지역 저장소 브랜치와 원격 저장소 브랜치를 같이 가리키고 있는 것을 확인할 수 있습니다.

 

원격 저장소의 브랜치 정보를 가져오기 - git fetch

현재 깃허브에는 create f3.txt 커밋까지 새로 업데이트가 된 상태입니다.

작업하던 디렉터리와는 다른 디렉터리로 이동해서 git fetch 명령을 사용합니다. git fetch 명령은 원격 저장소의 브랜치 정보를 가져오는 명령입니다. 이 명령을 사용하면, git pull과는 다르게 미리 수정된 정보를 한 번 읽어본 후 필요할 때만 지역 저장소로 가져오는 과정을 수행할 수 있습니다.

$ cd ~/git_home
$ git fetch

원격 저장소에서 브랜치에 대한 정보만을 가져왔기 때문에, ls -al나 git log 명령을 사용해서 확인해봤을 때, 다른 디렉터리에서 작업한 f3.txt에 대한 정보는 출력되지 않습니다. 그리고 지역 저장소의 HEAD도 다른 파일을 가리키고 있는 것을 볼 수 있습니다.

이 상태에서 git status 명령을 사용하면 아까와는 다르게 현재 브랜치의 커밋이 과거형이며, 업데이트할 것을 권장하는 문구를 출력하는 것을 볼 수 있습니다.

커밋에서 어떠한 차이를 갖고 있는지 확인하고 싶다면, git diff 명령을 사용해서 fetch로 가져온 정보를 비교해볼 수 있습니다. 여기에 HEAD까지 같이 적어주면 HEAD 커밋에 대한 내용을 중점적으로 비교할 수 있습니다. 위에는 git diff origin/main 명령을 내린 화면이고, 아래는 git diff HEAD origin/main으로 명령을 내린 화면입니다.

$ git diff HEAD origin/main

이렇게 확인한 내용은 git merge origin/main이나 git pull 명령을 사용해서 합칠 수 있습니다.

더보기

여기서 파일 하나만 원격 저장소에서 가져오고 싶다면,  git checkout 명령을 사용해서 가져올 수 있습니다.

git checkout origin/main -- f3.txt 이러한 형식으로 git checkout 브랜치 -- 경로/파일이름 을 입력하면 됩니다.

다만 이런식으로 안 된다면. git checkout으로 원격 브랜치로 이동 후 git ls-files **파일명으로 정확한 파일 경로를 찾거나, git restore 명령을 사용해볼 수 있습니다.

$ git fetch origin
$ git checkout origin/main
$ git ls-files **f3.txt
$ git checkout main
$ git branch
$ git checkout origin/main -- f3.txt
$ git switch main
$ git git restore --source origin/main -- f3.txt
$ git switch main
$ git show origin/main:f3.txt > f3.txt

이후 git status로 제대로 파일이 가져와졌는 지 확인을 하고 커밋을 합니다.

 

더보기

잘못해서 파일이 생성 되었으면 git rm으로 파일을 삭제하고, 커밋 기록을 삭제하고 싶으면 git commit --oneline으로 깃의 커밋 순서를 확인한 뒤, 위에서부터 1로 시작되는 것을 이용해서 git reset HEAD~1로 커밋 기록을 삭제 할 수 있다.

 

05-3 협업

협업용 저장소에 브랜치 만들기

협업의 환경으로 3명의 팀원이 저장소 하나를 공유한다고 가정해서 실습을 합니다. 협업의 환경을 따라하기 위해 다른 컴퓨터와 다른 깃허브 계정이 필요하지만, Hyper-V를 이용해 한 대의 컴퓨터에서도 다른 깃허브 계정을 이용해서 협업하는 환경을 조성해볼 수 있습니다.

깃허브에 협엽용 저장소를 생성해 봅니다. 이때, README 파일을 생성하는 것 까지 체크를 합니다. 이후 저장소 사이트로 가서 브랜치 버튼을 누르고 생성하고싶은 브랜치 명을 입력해봅니다. 이후 Create branch를 클릭합니다.

이후 settings으로 들어가서 collaborators 항목으로 들어가줍니다. 아래와 같은 화면이 나타나면서 같이 이 저장소를 공유할 사람을 추가할 수 있는 사이트가 나오게 됩니다. Add people로 같이 협업할 사람을 이메일이나 사용자명으로 추가하고, 초대장을 보냅니다. 이러면 초대를 받은 사람은 초대장에서 Accept invitaion을 눌러서 초대에 수락해주면, 이 저장소는 개인 소유에서 벗어나 협업이 가능해지는 겁니다.

 

협업용 원격 저장소에서 작업

앞서 작업을 해본 것처럼 일단 원격 저장소를 복제하고 나서 작업을 해봅시다. git clone 명령을 이용해 저장소를 복제합니다. 이후 이 저장소로 이동해서 본격적인 작업을 하기에 앞서서 사용할 이름과 메일을 정합니다. --global 옵션을 사용하면 모든 저장소에서 같은 이름과 메일을 사용하게 됩니다.

$ git clone 원격저장소주소 디렉터리명
$ cd manuals
$ git config user.name "사용자 이름"
$ git config user.email "사용자 이메일"

이후 작업을 했다고 가정하고, git pull로 새로 푸시를 하기 전에 원격 저장소의 내용을 내려받으려는 시도를 해봅니다. 어떠힌 변경 사항도 없으면 Already up to date라고 출력이 됩니다.

이후 아까 깃허브에서 만든 브랜치 중에 하나로 이동해서 새로운 파일을 작성하고 푸시하는 작업까지 해봅니다. 푸시를 할 때 처음 푸시를 하면 -u 옵션과 함께 푸시를 원하는 브랜치 명을 입력합니다. 이후 깃허브 사이트로 가면 새로 업데이트 된 내용을 확인 할 수 있습니다.

$ git switch apple
$ vim apple.txt
$ git add apple.txt
$ git commit -m "초안"
$ git push -u origin apple

 

풀 리퀘스트

풀 리퀘스트(PR, Pull request)란 커밋 후 자신이 커밋한 내용에 대해 간략하게 기술하는 것을 뜻합니다. 협업에서는 중요한 작업 활동 중 하나입니다. 저장소에서 커밋 내역의 드롭다운을 누르면 open pull request가 표시가 됩니다. 클릭 후 원하는 내용을 작성합니다.

이후 Pull request 목록에 들어가 추가된 다양한 풀 리퀘스트를 볼 수 있습니다. 아직 마무리 되지 않은 상태에 있는 PR을 open 상태라고 표현합니다.

open 상태의 PR을 merge pull request로 병합하는 것 또한 하나의 커밋 활동으로서 PR를 합칠 때도 PR를 남겨야 합니다. 이후 병합을 완료하면 main 브랜치로 병합이 됩니다.

 

 

명령 및 옵션

명령 및 옵션 설명
git clone 주소 디렉터리명 디렉터리에 원격 저장소를 복제를 합니다. 이미 존재하는 디렉터리에 복제를 하고 싶다면 디렉터리명 대신 .을 씁니다.
git push 원격 저장소의 최신 커밋을 받습니다.
git fetch 원격 저장소의 브랜치 정보를 출력합니다.
git diff HEAD origin/main 현재 작업 중인 저장소와 원격 저장소 main 브랜치의 HEAD commit과 다른 점을 출력해줍니다.

 

 

 

[GitHub 깃 & 깃허브 입문] 깃허브로 협업하기

 

[깃 & 깃 허브 입문] 깃허브로 협업하기

https://www.google.co.kr/books/edition/Do_it_%EC%A7%80%EC%98%A5%EC%97%90%EC%84%9C_%EC%98%A8_%EB%AC%B8%EC%84%9C_%EA%B4%80%EB%A6%AC%EC%9E%90/xAJmzwEACAAJ?hl=ko Do it! 지옥에서 온 문서 관리자 깃&깃허브 입문 저자 : 고경희 홍익대학교

gunrestaurant.tistory.com

 

반응형