Git, Github

[Github] Fork를 이용해 pull request하기 (pull, push로 백업 활용하기)

FRDYtheme 2022. 9. 20. 10:19

풀 리퀘스트(pull request)란?

 

원작자의 github에서 git을 가져와 수정한 후 다시 보내는 것.

원작자가 공개한 코드의 개선 방안이나 협업자와 작업한 것을 보내 수정 내역 반영 요청을 할 때 사용한다.

 


Fork(포크)란?

 

원작자의 github 레파지토리를 내 레파지토리로 복사해오는 것.

github 레파지토리 내에서 오른쪽 상단에 Fork 버튼을 누르면 된다.

내 레파지토리로 포크할 다른 유저의 레파지토리 폴더로 가서 오른쪽 상단의 Fork 버튼을 누르면

내 레파지토리에 그대로 복사가 되고 내 레파지토리에 복사된 폴더로 가서

오른쪽 상단 Code 버튼 클릭.

오른쪽 상단의 초록색 Code버튼을 누르면 포크된 레파지토리의 github주소가 나온다 그걸 복사해서

git 입력창에 'git clone 복사한 포크된 레파지토리 주소' 를 입력하면

.git폴더와 함께 상대의 레파지토리가 로컬 저장소로 그대로 옮겨와진다.

 

주의할 점은 포크된 레파지토리가 그대로 복사는 되었지만 git 내 폴더 경로는 그 상위폴더에 그대로 머무르고 있기 때문에

'cd' 명령어를 사용하거나 직접 복사된 로컬 저장소로 가서 마우스 우클릭으로 'git bash here'를 사용해

해당 폴더로 이동한 후 작업을 시작해야 한다.

 

폴더 경로 옆에 (main) 혹은 (master) 표시를 꼭 확인하자.

폴더 경로 옆에 (main) 혹은 (master) 브랜치가 확인되는지 체크한 후에 작업을 시작하면 된다.

기존에 있던 파일 내용을 수정하거나 파일을 추가하는 모든 작업을 마친 후에

`git add` 와 `git commit -m` 또는 이미 있던 파일을 수정한 것이라면 `git commit -am` 으로 스테이지에 올린 뒤

git push를 입력하면 아까 포크한 레파지토리로 푸쉬하게 된다. (상대 레파지토리가 아니라 포크한 내 레파지토리.)

 

그리고 이렇게 푸쉬한 내 레파지토리의 수정 내역을 원작자에게 반영해달라고 요청하는 것이 `pull request`이다.

포크된 내 레파지토리의 제목 아래쪽에 보면 'Pull request' 버튼이 보인다.

 

오른쪽 상단에 New pull request 버튼을 누르면 된다.

 

중간쯤 우측에 있는 'Create pull request' 버튼을 누른다.

 

수정 내용과 관련해 코멘트를 적고 'Create pull request' 를 누르면 원작자에게 메시지가 간다.

 


 

pull, push로 github 백업 활용하기

 

위의 경우는 원작자가 가지고 있던 기존 레파지토리를 포크해와서 풀 리퀘스트하는 과정이라면

혼자 작업하던 로컬 레파지토리를 github 온라인 레파지토리를 활용해 다른 작업 공간이나 컴퓨터로 작업하는 것도 가능.

 

B 컴퓨터로 작업하던 폴더를 github에 push하고 집으로 돌아와 A컴퓨터로 작업하는 방법은 간단하다.

위와 동일하게 내 온라인 레파지토리의 코드를 git clone 명령어를 이용해 로컬 레파지토리로 끌어온 다음.

A컴퓨터로 작업을 끝내고 커밋 후 다시 온라인 레파지토리에 push 하고 B컴퓨터에서 git pull로 끌어오면 된다.

** 온라인 레파지토리를 처음 끌어올 때만 git clone을 사용하면 된다.

 

[ A컴퓨터 로컬 저장소 <-> 온라인 레파지토리 <-> B컴퓨터 로컬 저장소 ] 로 연결된 상태가 되면

git push와 git pull 명령어를 이용해 백업과 버전 관리를 쉽게 할 수 있다.

 

다만 이 과정에서 로컬저장소와 온라인저장소에 존재하는 파일의 수정 내용에서 충돌이 일어날 수 있는데

git pull 시 충돌(conflict) 메시지

git pull 과정에서 충돌이 발생하면 git 프로그램 내에 CONFLICT 메시지가 뜨고 어떤 파일에서 충돌이 발생했는지 나온다.

 

로컬 저장소 내 충돌 발생한 파일

이 경우는 로컬 저장소 내에 충돌이 발생한 파일을 확인해서 수정 후 다시 커밋해주면 된다.

 

충돌 수정 후 다시 git pull을 하면 conflict 메시지가 안 나온다.


 

또, 충돌은 일어나지 않았지만 협업 과정에서 오류가 발생할 수 있는데

A와 B가 온라인 레파지토리에서 비슷한 시간에 git pull을 하고 파일을 작업한 다음

A보다 B가 먼저 작업을 끝내고 git push를 했다면 A가 가져왔던 온라인레파지토리의 기록이 B의 git push로 인해

달라지면서 오류가 발생한다.

 

A가 작업을 끝내고 git push를 했으나 발생한 오류

이 경우는 B가 먼저 git push를 해서 A가 가져왔던 시간과 현재의 온라인 레파지토리에 차이점이 생겨 발생한 오류로

A는 git pull로 온라인레파지토리를 다시 끌어온 후에 다시 git push를 하면 된다.

'Git, Github' 카테고리의 다른 글

[Github] Push하기  (0) 2022.09.19
[Git] Branch(브랜치) 생성  (0) 2022.09.19
[Git] GitBash 수업 정리  (0) 2022.09.19