programing

다른 사용자의 저장소에서 원격 분기를 가져오는 방법

bestprogram 2023. 5. 27. 12:03

다른 사용자의 저장소에서 원격 분기를 가져오는 방법

저는 GitHub에서 호스팅되는 프로젝트가 있는데, 누군가가 이 프로젝트에 참여했습니다.그들의 포크에 새로운 지점 "foo"를 만들고 몇 가지 변경을 가했습니다.레포에서 "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

의견에 대한 응답:

멋지네요 :) 그리고 그 지점을 직접 변경하려면 "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://path/to/coworkers/repo.git theirbranch:ournameforbranch

이렇게 하면 다음 이름의 로컬 분기가 생성됩니다.ournameforbranch그것은 정확히 무엇과 같습니다.theirbranch그들을 위한 것이었습니다.질문 예제의 경우, 마지막 인수는 다음과 같습니다.foo:foo.

git://path/to/coworkers/repo.git부품은 GitHub 저장소 페이지의 URL로 대체해야 합니다.SSH URL은 다음과 같습니다.git@github.com:theirusername/reponame.git그리고 HTTPS 같은 것.https://github.com/theirusername/reponame.git.

메모:ournameforbranch자신의 지사 중 하나와 충돌하지 않는 이름을 생각하는 것이 번거로운 경우에는 부분을 더 생략할 수 있습니다.이 경우, 다음과 같은 참조가 있습니다.FETCH_HEAD사용할 수 있습니다.넌 할 수 있다.git log FETCH_HEAD그들의 약속을 보고 다음과 같은 일을 합니다.cherry-picked그들의 커밋을 신중하게 고르는 것.

그들에게 다시 밀어붙이기:

종종, 여러분은 그들의 무언가를 고치고 그것을 바로 뒤로 밀기를 원합니다.그것도 가능합니다.

git fetch git://path/to/coworkers/repo.git theirbranch
git checkout FETCH_HEAD

# fix fix fix

git push git://path/to/coworkers/repo.git HEAD:theirbranch

분리된 상태에서 작업하는 것이 걱정된다면 반드시 다음을 사용하여 지점을 생성합니다.:ournameforbranch 를 대체합니다.FETCH_HEAD그리고.HEAD에 이닌아로ournameforbranch.

다음은 다른 사용자의 포크에서 홍보 지점을 체크아웃하기 위해 GitHub과 함께 작동하는 좋은 편법 솔루션입니다.꺼내기 요청 ID(GitHub이 PR 제목과 함께 표시하는 ID)를 알아야 합니다.

예:

꺼내기 요청 #8
앨리스는 하나의 커밋을 병합하려고 합니다.your_repo:masterher_repo:branch

git checkout -b <branch>
git pull origin pull/8/head
  • <branch>로의 her_repo:branch
  • 리모컨 이름을 다른 이름으로 부른 경우 대체origin.
  • 8올바른 당김 요청 ID를 사용합니다.

만약 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>

업데이트: 이것은 더 이상 작동하지 않는 것 같습니다. Github이 UI를 변경함에 따라, 그들이 그것을 복구하기를 바랍니다.


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

  1. 할 수 있습니다.Merge또는Squash and merge단추를 채우다
  2. 하세요: 오른쪽에링클릭합니다크를는있▁on다▁click니▁the▁link합릭클.view command line instructions
  3. 1단계 오른쪽에 있는 복사 아이콘을 누릅니다.
  4. 터미널에 명령을 붙여넣습니다.

분기된 레포를 직접 밀어넣을 수 없도록 보호하고 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의 로컬 복사본이 있고 관련 업스트림은 없습니다.변경사항을 커밋한 후(또는 그렇지 않은 경우) 자신의 원격 저장소로 이동할 수 있습니다.

git push --set-upstream origin foo

이제 foo는 GitHub의 평판에 있고 당신의 지역 foo는 그것을 추적하고 있습니다.만약 그들이 foo를 계속 변경한다면, 당신은 그들의 foo를 가져와서 당신의 foo에 병합할 수 있습니다.

git checkout foo 
git fetch protected_repo
git merge protected_repo/foo

git fetch upstream pull/<pr_number>/head:<your_local_hostname>

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