IT story

다른 사람의 저장소에서 원격 지점을 가져 오는 방법

hot-time 2020. 4. 11. 10:13
반응형

다른 사람의 저장소에서 원격 지점을 가져 오는 방법


누군가가 포크 한 GitHub에 호스팅 된 프로젝트가 있습니다. 포크에 새 분기 "foo"를 만들고 몇 가지 사항을 변경했습니다. 내 "Repo"에서 "foo"라는 새 분기로 "foo"를 어떻게 가져 옵니까?

본인이 풀 요청을 제출할 수 있음을 이해했지만이 절차를 직접 시작하고 싶습니다.

다음을 가정하십시오.

  1. 그들이 내 프로젝트를 포크했기 때문에 우리의 두 저장소는 모두 같은 '역사'를 공유합니다.
  2. GitHub가 그들의 프로젝트가 광산에서 분기되었다고 표시하지만, 내 로컬 저장소에는이 사람의 프로젝트에 대한 언급이 없습니다. 리모컨으로 리모컨을 추가해야합니까?
  3. 아직 "foo"라는 브랜치가 없습니다. 먼저 수동으로 만들어야하는지 모르겠습니다.
  4. 나는 이것이 내 주인이 아닌 별도의 지점으로 끌어 들이고 싶습니다.

git remote add coworker git://path/to/coworkers/repo.git
git fetch coworker
git checkout --track coworker/foo

이것은 로컬 지점을 설정 foo하고 원격 지점을 추적합니다 coworker/foo. 따라서 동료가 변경 한 내용을 쉽게 가져올 수 있습니다.

git checkout foo
git pull

의견에 대한 답변 :

Cool :) 그리고 해당 분기를 직접 변경하려면 "foo"에서 두 번째 로컬 분기 "bar"를 작성하고 "foo"에서 직접 대신 작업해야합니까?

내가 추천하더라도 새 브랜치를 만들 필요는 없습니다. 또한 foo동료 에게 직접 커밋 하고 동료가 지점을 가져 오도록 할 수도 있습니다. 그러나 해당 지점이 이미 존재하고 foo지점을 업스트림 지점으로 설정해야합니다.

git branch --set-upstream foo colin/foo

colin다음과 같은 방식으로 정의 된 리포지토리 (동료 리포지토리에 원격)가 있다고 가정 합니다.

git remote add colin git://path/to/colins/repo.git

아니요, 리모컨으로 추가하지 않아도됩니다. 그것은 번거롭고 매번 할 고통입니다.

커밋 잡기 :

git fetch git@github.com:theirusername/reponame.git theirbranch:ournameforbranch

이렇게하면 로컬 분기가 만들어졌으며 원래 분기 ournameforbranch와 정확히 동일 theirbranch합니다. 질문 예제의 경우 마지막 인수는입니다 foo:foo.

참고 :ournameforbranch자신의 지점 중 하나와 충돌하지 않는 이름을 생각하는 것은 귀찮은 인 경우 부분은 더 중단 할 수 있습니다. 이 경우 호출 된 참조 FETCH_HEAD를 사용할 수 있습니다. 당신 git log FETCH_HEAD은 그들의 커밋을보고 cherry-picked체리를 커밋하는 것과 같은 일을 할 수 있습니다 .

다시 그들에게 밀기 :

종종, 당신 은 그들의 무언가 고치고 그것을 바로 뒤로 밀고 싶어합니다 . 그것도 가능합니다 :

git fetch git@github.com:theirusername/reponame.git theirbranch
git checkout FETCH_HEAD

# fix fix fix

git push git@github.com:theirusername/reponame.git HEAD:theirbranch

에서 작업하는 경우 분리 된 상태 것이 당신을 걱정, 반드시 지점을 사용하여 생성 :ournameforbranch및 교체 FETCH_HEADHEAD와 위 ournameforbranch.


antak의 답변 인 경우 :

git fetch git@github.com:<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH> 

당신에게 제공합니다 :

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

그런 다음 (Przemek D의 조언에 따름) 사용

git fetch https://github.com/<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH>

갈래 리포가 보호되어 있으므로 직접 푸시 할 수 없으며 목표는 foo를 변경하는 것입니다. 그러면 분기 foo를 다음과 같이 리포로 가져와야합니다.

git remote add protected_repo https://github.com/theirusername/their_repo.git
git fetch protected_repo 
git checkout --no-track protected_repo/foo

이제 업스트림이없는 로컬 foo 복사본이 있습니다. 변경 사항을 커밋하거나하지 않고 foo를 자신의 원격 저장소에 푸시 할 수 있습니다.

git push --set-upstream origin foo

이제 foo가 GitHub의 리포지토리에 있고 로컬 foo가 추적하고 있습니다. 그들이 계속 foo를 변경하면 그것들을 가져 와서 foo에 병합 할 수 있습니다.

git checkout foo 
git fetch protected_repo
git merge protected_repo/foo

다음은 다른 사용자의 포크에서 PR 브랜치를 체크 아웃하기 위해 GitHub와 함께 작동하는 편리한 솔루션입니다. 풀 요청 ID (GitHub가 PR 제목과 함께 표시 함)를 알아야합니다.

예:

당신의 안전하지 않은 코드를 수정 # 8
앨리스는 1로 커밋 병합 싶어 your_repo:master에서her_repo:branch

git checkout -b <branch>
git pull origin pull/8/head

와 다른 경우 리모컨을 대체하십시오 origin. 올바른 풀 요청 ID로
대체 8하십시오.


GitHub는 이전 답변과 관련하여 새로운 옵션을 제공합니다. PR에서 명령 행을 복사 / 붙여 넣기 만하면됩니다.

  1. PR 하단으로 스크롤하여 Merge또는 Squash and merge버튼 을 확인 합니다
  2. 오른쪽의 링크를 클릭하십시오 : view command line instructions
  3. 1 단계 오른쪽에있는 복사 아이콘을 누릅니다.
  4. 터미널에 명령을 붙여 넣기

참고 URL : https://stackoverflow.com/questions/5884784/how-to-pull-remote-branch-from-somebody-elses-repo

반응형