Git에서 포크를 유지하는 확실한 방법

GitHub의 기본 리포지토리로 포크를 어떻게 최신 상태로 유지합니까?

지난 몇 달 동안 꽤 많은 사람들이 저에게 이것을 물었던 것 같습니다.

git에서 이 작업을 수행하기 위해 얼마나 많은 패턴이 있는지 잘 모르겠지만(상당히 많을 것 같습니다) 거의 독점적으로 사용하는 패턴이 있습니다.

이것이 왜 필요한지 먼저 알아보자. 기여하거나 사본을 보관하고 싶은 오픈 소스 저장소를 찾은 경우 해당 저장소에 대한 일반적인 관행입니다fork.

리포지토리를 분기한다는 것은 원본 리포지토리에 영향을 주지 않고 변경할 수 있도록 복사본을 만드는 것을 의미합니다. 대부분의 경우 원래 리포지토리에 대한 쓰기 액세스 권한이 없기 때문입니다.

GitHub(포크라는 용어가 일반적으로 사용되는 곳)에서는 리포지토리 상단에 있는 큰 포크 버튼을 클릭하기만 하면 됩니다. 몇 초 후에 네임스페이스 아래에 저장된 원본 리포지토리의 자체 복사본을 갖게 됩니다.

포크를 변경하려는 경우 로컬 환경에 복제할 가능성이 높습니다. 이 기사에서는 Solidus.io 프로젝트(GitHub에서 유지 관리하는 데 도움이 되는 프로젝트)의 포크를 사용합니다.

내 포크는 github.com/jacobherrington/solidus 에 있습니다. 내 로컬 컴퓨터에 복제하려면 다음 git 명령을 실행할 수 있습니다.

git clone [email protected]:jacobherrington/solidus.git


이 포크를 만들고 복제한 다음 6개월 동안 그대로 둡니다.

6개월 만에 원래 리포지토리가 크게 변경되어 이제 내 포크가 구식이 되었습니다. GitHub UI는 이러한 상황이 발생할 때 표시를 제공합니다. 그 표시는 다음과 같습니다.



그래서 그것을 잡아 보자.

1. 새 리모컨 만들기



이를 위해 git remote 명령을 사용할 것입니다! Aremote는 매우 간단합니다. 원격 저장소를 가리키는 책갈피로 생각할 수 있습니다.

예를 들어, 내가 만든 Solidus 포크의 로컬 복사본에서 git remote -v(-v 플래그는 장황함을 나타냄)를 실행하면 origin라는 기본 원격이 표시되고 가리키는 위치는 다음과 같습니다.

$ git remote -v
origin    [email protected]:jacobherrington/solidus.git (fetch)
origin    [email protected]:jacobherrington/solidus.git (push)

fetchpush 리모콘이 있음을 알 수 있습니다. 지금은 무시하고 URL 모양에 집중할 수 있습니다. 포크를 복제할 때 git에 제공한 것과 동일한 주소입니다.

이 리모컨을 사용하여 새 코드를 가져오거나 변경 사항을 푸시할 수 있습니다. git push 를 실행하면 내 코드가 기본적으로 이 리모컨에 푸시됩니다.

그러나 밀거나 당길 때 다른 주소를 지정할 수 있습니다. 그것이 포크를 따라잡기 위해 우리가 해야 할 일입니다.

첫 번째 단계는 새 리모컨을 만드는 것입니다.

$ git remote add upstream [email protected]:solidusio/solidus.git


이 명령은 GitHub의 원래 리포지토리를 가리키는 upstream라는 이름의 새 원격을 추가합니다(다른 이름을 선택할 수 있지만 이것이 제가 선호하는 이름임). 즉, 내가 원래 포크한 저장소입니다.

2. 새로운 변경 사항을 가져옵니다.



이제 업스트림 리포지토리라고 부르는 원래 리포지토리를 가리키는 원격을 만들었으므로 해당 리포지토리에서 변경 사항을 쉽게 가져와 포크로 푸시할 수 있습니다.

먼저 로컬에서 마스터 브랜치에 있고 이상한 로컬 변경 사항이 없는지 확인합니다. (주의 깊게 복사하여 붙여넣기하면 로컬에 있는 모든 작업이 삭제됩니다!)

$ git checkout master && git clean -fd


그런 다음 업스트림 저장소에서 변경 사항을 가져옵니다.

$ git pull upstream master
remote: Enumerating objects: 148, done.
remote: Counting objects: 100% (148/148), done.
remote: Total 186 (delta 148), reused 148 (delta 148), pack-reused 38
Receiving objects: 100% (186/186), 40.44 KiB | 20.22 MiB/s, done.
Resolving deltas: 100% (148/148), completed with 125 local objects.
From github.com:solidusio/solidus
 * branch                master     -> FETCH_HEAD
 * [new branch]          master     -> upstream/master
Updating 29acc0d0b..20973340b
Fast-forward
... # some files that changed
 87 files changed, 180 insertions(+), 177 deletions(-)


이 경우 약 180줄의 변경 사항을 선택했음을 알 수 있습니다. 내 원격 포크(jacobherrington/solidus에 있는 GitHub의 리포지토리)를 업데이트하려면 이러한 변경 사항을 푸시해야 합니다!

3. 변경 사항을 원격 포크로 푸시합니다.



내 로컬 마스터 분기가 실제로 분기되지 않는 한 다음과 같이 쉽습니다.

$ git push


다음과 같은 콘솔 피드백을 받게 됩니다.

Total 0 (delta 0), reused 0 (delta 0)
To github.com:jacobherrington/solidus.git
   29acc0d0b..20973340b  master -> master


이제 원격 포크가 원래 리포지토리를 따라 잡았습니다!



그게 다야. 🤠

더있다...



나는 요즘 a lot of articles을 쓰고 있고, podcast을 운영하고 있고, 내가 듣고 있는 모든 멋진 이야기에 대한 newsletter digest을 보내기 시작했습니다.

에서 저를 팔로우할 수도 있습니다. 여기에서 저는 우스꽝스러운 짤을 만들고 개발자가 되는 것에 대해 이야기합니다.

좋은 웹페이지 즐겨찾기