Lsiron

타인과 협업하기 - git clone, git pull, pull request, git checkout 본문

공부방/Git

타인과 협업하기 - git clone, git pull, pull request, git checkout

Lsiron 2024. 6. 9. 15:09

타인과 협업 할 때, 혹은 회사에서 일을 할 때 프로젝트를 진행하기 위해서는 원격저장소에서 파일을 가져와야 하는 경우가 발생한다.

 

그러면 우리는 하기와 같은 방법 및 명령어를 통해 파일들을 가져올 수 있다.

 

1. git clone

원격저장소에 있는 파일을 통으로 가져올때 사용하는 방법이 바로 git clone 이다. 통으로 가져오는 방법에는 총 두 가지가 있다.

 

첫 번째 방법은 Download ZIP을 통해 파일을 직접 다운받는 것이다. (git hub로 예시를 들겠다.)

 

 

두 번째 방법은 git 명령어를 통해 원격저장소에 있는 파일을 통으로 가져오는 것이다. 첫 번째 방법보다 더 간편하다.

 

$ git clone 원격저장소 주소

 

=> 위와 같이 명령어를 입력 해 준다. 원격저장소 주소는 위 첫 번째 방법을 사용할 때 본 사진에 있는 HTTPS 주소를 그대로 복사해서 붙여주면 된다.

 

이 후, 파일을 수정하여 push를 해서 원격저장소에 넣어주려면 먼저 우리는 git hub 아이디를 가지고 있어야 한다.

 

또한 하기 페이지에서 프로젝트 담당자가 우리의 git hub 아이디를 등록해 놓아야 git push가 가능하다.

 

 

 

2. git pull

허나, git push를 할 때 또 하나의 문제점이 발생할 수 있다.

 

우리가 git push를 하기 전에 다른 팀원이 최근에 git push를 했으면 우리는 git push를 하지 못 한다.

즉, 원격저장소와 우리의 로컬저장소가 다른 내용이 있으면 git push를 하지 못한다는 말이다.

 

때문에 우리는 수정된 원격저장소와 우리의 로컬저장소를 동일하게 만들어주어야 한다.

 

수정된 원격저장소를 바꿀 순 없으니, 로컬저장소를 바꿔야한다. 

 

이 때, 수정된 원격저장소와 우리의 로컬저장소를 동일하게 만들어주는 즉, 원격저장소의 수정된 파일을 로컬 저장소로 옮겨주는 명령어가 바로 git pull 이다.

 

$ git pull 원격저장소주소 브랜치명

 

=> 위 명령어가 바로 원격저장소의 수정된 파일을 로컬저장소로 옮겨주는 명령어이다. 

 

$ git remote add 변수명 주소

 

=> 원격저장소 주소를 매번 입력하는 것은 번거로우니 위 처럼 변수로 지정해 주고 사용을 해보자.

 

$ git remote add origin https://github.com/lsiron/Send-server.git

 

=> 원격 저장소 주소를 origin 변수에 담았다고 가정을 해보고, 로컬 브랜치명이 main 이라고 가정을 해보자. 그렇다면 다음과 같이 명령어를 입력할 수 있다.

 

$ git pull origin main

 

=> 이렇게 하면 팀원이 git push를 한 파일도 로컬저장소에 담기게 된다. 

 

허나 여기서 더 간단하게 쓰는 방법이 있다. git pull 을 할 때 -u를 추가하면 주소를 기억하라는 뜻이다.

이 때, 한번이라도 -u를 사용했었다면 다음과 같이 명령어를 입력하면 git pull 이 가능하다.

 

<-u를 사용한 경우>

$ git pull -u origin main

 

<이 후, 사용할 때>

$ git pull

 

git pull 명령어는 사실 git fetch + git merge 이다.

 

여기에서 나온 git pull = git fetch + git merge를 분석해보자면,

git fetch란 원격저장소에 있는 신규 commit을 가져와서 임시저장소에 저장하는 명령어 이다.

그리고 git merge는 그 임시저장소에 저장된 branch를 내 로컬 branch에 merge 해 달라는 뜻이다.

 

즉, 원격저장소에 있는 신규 commit을 가져와서 임시저장소에 저장하고 그 branch를 내 로컬 branch에 merge 하는 작업이 git pull 이다.

 

이 merge 요소 때문에 git merge에서 발생하는 conflict 가 발생 할 수 있다. ( 최근에 팀원이 수정한 파일의 요소와 내가 수정하는 파일의 요소가 같을 때)

 

결론 : 협업을 할 땐 git push를 하기 전에 git pull 부터 하는게 좋다.

 

 

3. pull request

협업시에, 새로 생성한 branch 를 통해 수정한 파일이 괜찮을 경우 원격저장소 브랜치에 merge 하고 싶을 때가 있다.

이 땐 프로젝트 담당자에게 코드리뷰를 받아야 한다. ( 협업을 안 할땐 상관없다. )

 

이 때 사용하는게 pull request 이다. 

 

먼저, 원격저장소에 새로운 branch를 만드는 방법이다.

 

 

git hub 사이트에서 위 버튼을 통해 생성 할 수 있다.

 

참고로 원격저장소에서 branch를 확인하는 방법과 삭제하는 방법은 다음과 같다.

 

 

=> 위 버튼을 클릭하면 원격저장소에 등록되어있는 branch 들을 확인 할 수 있다.

 

=> 위 버튼을 누르면 해당 branch를 삭제 할 수 있다.

 

 

로컬 작업환경에서도 branch를 생성 할 수 있다. 즉, 로컬 작업환경에서 branch를 만들고 git push를 해도 위 사이트에서 branch를 만드는 것과 똑같은 것이다.

(작업자가 너무 많아서 branch 이름이 중복되는 경우가 생길 수 있다. 이 땐 원격저장소에서 branch 명을 확인 한 뒤에 알아서 중복을 피해야한다.)

 

$ git branch lsiron
$ git switch lsiron

 

=> git branch 명령어를 통해 새로운 branch를 생성 해 준 뒤 git switch를 통해 생성한 branch로 이동을 해준다.

 

파일을 수정하고 나서 gid add 명령어를 통해 스테이징 한 후에, git commit 명령어를 사용하여 commit을 해 준다.

이 후, git switch main 을 통해 다시 main branch로 돌아와서 다음 명령어를 입력 해 준다.

 

$ git push origin lsiron

 

=> 위 명령어에서 branch 자리에 새로 생성한 branch를 넣어줘야 한다. (저는 제가 생성한 lsiron branch를 넣었습니다.)이렇게 되면 로컬에서도 새로운 branch를 생성하여 원격저장소에 넣어줄 수 있다.

 

이제, 원격저장소 main 브랜치에 merge를 하기 위해 프로젝트 담당자에게 코드 리뷰를 받아보자.

 

보통 git hub 같은 사이트에서 온라인으로 merge를 하는 경우가 많다. 

 

 

=> 위 사이트 에서 Pull requests 가 바로 merge 요청이다.

 

 

 

=> New pull request 를 통해 어떤 브랜치를 메인에 merge를 할 지 선택한다.

 

 

=> 그러면 위와 같이 수정내역이 보여진다. 그리곤, create pull request를 눌러준다.

 

 

=> Add a description에 프로젝트 담당자가 볼 수 있도록 수정내역을 입력해준 뒤, create pull request를 눌러준다.

 

 

=> 그러면 위와 같은 창이 보여질 것이고, 프로젝트 담당자 입장에서는 Add a comment를 통해 comment를 입력하고 comment 버튼을 누르면 해당 branch 를 통해 commit을 넣은 팀원에게 의견을 줄 수 있다.

 

 

=> 이렇게 의견을 남길 수 있다.

 

 

=> 그리곤 프로젝트 담당자는 수정된 파일이 마음에 들 경우 merge pull request 버튼을 통해 merge를 시켜줄 수 있다.

3개의 선택지 중 마음에 드는 것으로 merge 해 주면 된다.

 

4. git checkout

git checkout 은 브랜치를 전환하는 데 가장 오래된 방법 중 하나이다. 또한 특정 커밋이나 파일로 워킹 디렉토리를 변경하는 데도 사용된다. 허나 Git 2.23.0 버전에서 브랜치 전환에만 집중된 명령어로, git switch가 도입되었다.

 

git checkout 은 여전히 다양한 작업에 사용되지만, 브랜치 전환 작업에서는 git switch를 사용하는 것이 더 간편하고 명확하다.

 

그러면 예시를 통해 git checkout으로 할 수 있는 작업과 git switch로 할 수 있는 작업에 대해 알아보자.

 

<git checkout>

 

1) branch 전환

$ git checkout 브랜치명

 

2) 새로운 branch 생성과 동시에 전환

$ git checkout -b 새로운브랜치명

 

3) 특정 commit 아이디로 HEAD를 이동

$ git checkout 커밋아이디

 

4) 특정 파일을 마지막 commit 상태로 복원

$ git checkout -- <file_name>

 

<git switch>

 

1) branch 전환

$ git switch 브랜치명

 

2) 새로운 branch 생성과 동시에 전환

$ git switch -c 새로운브랜치명

 

 

참조: 코딩애플 https://codingapple.com/course-status/