풀 요청에서 GitHub 복제?


128

GitHub에서 저장소를 복제하고 싶습니다. 문제는 내가 메인 브랜치를 원하지 않는다는 것입니다. 이 승인되지 않은 풀 리퀘스트 의 버전을 원합니다 .

메인 리포지토리 대신 풀 리퀘스트 버전을 복제 할 수 있습니까?


답변:


87

-b옵션 및 pull 요청 을 사용하여 원하는 분기를 복제 할 수 있습니다 .

git clone https://github.com/user_name/repo_name.git -b feature/pull_request_name dir_name

귀하의 경우 복제하려는 브랜치는 풀 요청 ( feature/mongoose-support) 의 소스 브랜치입니다 .

git clone https://github.com/berstend/frappe.git -b feature/mongoose-support ./mongoose-support

112

이를 수행하는 가장 쉬운 방법은 다음과 같습니다.

git fetch origin pull/2/head
git checkout -b pullrequest FETCH_HEAD

이제 풀 요청 상태에있는 새 분기에있게됩니다.

다음을 실행하여 별칭을 설정할 수 있습니다.

git config --global alias.pro '!f() { git fetch -fu ${2:-origin} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f'

이제를 실행 git pr <pr_number>하거나 git pr <pr_number> <remote>github 리모컨의 이름이 지정되지 않은 경우 모든 PR을 확인할 수 있습니다 origin.


49
더 나은 : git fetch origin pull/<#>/head:<local_branch_name>( 경유 )
schlamar

5
나는 내에이 붙어 있으므로 자신이 자주 SO 답변을 참조 발견 .gitconfig에서 파일 [alias]: pr = "!f() { git fetch $1 pull/$2/head:pull_$2; git co pull_$2; }; f". 그런 식으로 입력 git pr upstream 62하고 다음으로 아는 것은 업스트림에서 PR # 62의 새 지점에 있습니다! 항상 사용하는 경우 origin대신 하드 코딩 할 수 $1있지만 그것은 나를 위해 전환됩니다.
매트 ---

라는 이름 체크 아웃에 대한 별칭이 가정 @ 매트co
마이클 McQuade

43
git fetch origin refs/pull/PR_NUMBER/head:NEW_LOCAL_BRANCH

예 :

$ git fetch origin pull/611/head:pull_611
$ git checkout pull_611

GitHub의 포크에서 변경, 커밋, PUSH 및 새 PR 열기


이 분기를 로컬로 병합하려면 어떻게해야합니까? 방금 위와 같이 병합되지 않은 풀 요청을 복제하고 가져 왔습니다. 그리고 checkout branchname을 시도했지만 IDE / 텍스트 편집기에 변경 사항이 나타나지 않습니다.
에르 긴 두란

17

이 요점 의 지침에 따라 저장소와 브랜치를 파악하지 않고도 리모컨을 직접 확인할 수 있습니다.

사용 예

내 프로젝트 중 하나 (github3.py)의 경우 다음이 있습니다. github3.py/.git/config

[remote "github"]
    fetch = +refs/heads/*:refs/remotes/github/*
    fetch = +refs/pull/*/head:refs/remotes/github/pr/*
    url = git@github.com:sigmavirus24/github3.py

첫 번째 줄은 github원격의 이름으로 대체되는 예외를 제외하고 모든 원격의 표준입니다 . 이것이 의미하는 것은 원격 헤드 (또는 해당 서버의 분기 헤드)가 접두사가 붙은 로컬 원격에 "매핑"된다는 것 github/입니다. 그래서 만약 내가 git fetch githubGitHub에 브랜치를 가지고 있었는데 아직 내 컴퓨터에서 로컬로 발견되지 않았다면 브랜치를 다운로드 할 것이고 다음과 같이 전환 할 수있을 것 git checkout -t github/branch_name입니다.

두 번째 줄은 동일한 작업을 수행하지만 표준 git 분기 대신 풀 요청에 대해 수행합니다. 그것이 당신이 보는 이유 refs/pull/*/head입니다. GitHub에서 각 pull 요청의 헤드를 가져 와서 github/pr/#. 따라서 누군가가 pull 요청을 보내고 번호가 62 인 경우 (예 :) 다음을 수행합니다.

git fetch github
git checkout -t github/pr/62

그런 다음 pr/62(이미 존재하지 않는다고 가정) 라는 로컬 지점에 있습니다. 훌륭하고 다른 사람의 리모컨이나 지점을 추적 할 필요가 없음을 의미합니다.


2
왜 안돼? 편리하고 효율적인 방법으로이를 수행하는 방법을 정확하게 설명합니다.
Ian Stapleton Cordasco 2013

나는 멍청한 사람이고 그 문서는 이해하기 어렵 기 때문입니다. 나는 "그것을 얻지 못함" git clone https://github.com/berstend/frappe.git -b feature/mongoose-support /my_clone에서 요점 문서에서 결코 얻지 못했을 것 입니다.
Fresheyeball 2013

6
요점 문서가하는 일은 GitHub에서 가져올 추가 정보 (참조 또는 참조) 집합을 추가하는 것입니다. 당신이 git fetch github할 때 당신은 할 수 있습니다 git co -t github/pr/#. 이렇게하면 원격 URL을 복사하여 붙여넣고 브랜치 이름을 알아내는 등의 작업을 방지 할 수 있습니다. 그런 다음 추가 번거 로움없이 잘 명명되고 간결하며 정확한 브랜치 이름을 얻을 수 있습니다. 그러나 압도적으로 보일 수 있음을 이해합니다.
Ian Stapleton Cordasco 2013

오 좋아. 나는이 +1을 몰랐다! 완전한 예를 들어 주실 수 있습니까?
Fresheyeball 2013

@ sigmavirus24 정보에 감사드립니다. bitbucket에 비슷한 트릭이 있는지 궁금합니다.
Petr Kozelka 2013 년

8

1
Note git pull는 현재 분기에 병합을 만듭니다. 일반적으로 PR의 git fetch경우 원본 작성자의 코드를 얻고 싶을 것입니다 (그런 다음 FETCH_HEAD로 액세스 가능). 병합을 원하면 pull/2/merge(대신 pull/2/head) 도 언급 할 가치가 있습니다. GitHub는 지금 [Merge] 버튼을 클릭했을 때 발생하는 정확한 병합 커밋을 제공합니다.
Beni Cherniavsky-Paskin

6

사용자가 풀 요청을 제출하면 일부 변경 사항을 포크 복제본의 브랜치에서 다른 사용자의 저장소로 다시 병합하도록 요청합니다.

원하는 변경 사항은 pull 요청의 소스에서 가져올 수 있습니다. 이렇게하려면 사용자의 저장소 ( git://github.com/berstend/frappe.git)를 복제 한 다음, 그가 생성 한 풀 요청 브랜치를 확인합니다 ( feature/mongoose-support).


1

git-extras 설치 후

(cd /tmp && git clone --depth 1 https://github.com/tj/git-extras.git && cd git-extras && sudo make install)

당신은 단순히 사용할 수 있습니다 git pr

$ git pr 62 [remote]


0

이 풀 리퀘스트는 그 사람의 포크에서 커밋을 보여 주므로 그가 feature/mongoose-support브랜치 에서 변경 사항을 푸시하고 있음을 알 수 있습니다 .

그의 저장소를 복제하고 해당 브랜치를 체크 아웃 할 수 있습니다.


0

나에게는 간단했습니다.

git fetch origin pull/4/head

여기 4에서 발견 된 곳 :

여기에 이미지 설명 입력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.