GitHub에서 저장소를 복제하고 싶습니다. 문제는 내가 메인 브랜치를 원하지 않는다는 것입니다. 이 승인되지 않은 풀 리퀘스트 의 버전을 원합니다 .
메인 리포지토리 대신 풀 리퀘스트 버전을 복제 할 수 있습니까?
GitHub에서 저장소를 복제하고 싶습니다. 문제는 내가 메인 브랜치를 원하지 않는다는 것입니다. 이 승인되지 않은 풀 리퀘스트 의 버전을 원합니다 .
메인 리포지토리 대신 풀 리퀘스트 버전을 복제 할 수 있습니까?
답변:
-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
이를 수행하는 가장 쉬운 방법은 다음과 같습니다.
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
.
.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
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 열기
이 요점 의 지침에 따라 저장소와 브랜치를 파악하지 않고도 리모컨을 직접 확인할 수 있습니다.
사용 예
내 프로젝트 중 하나 (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 github
GitHub에 브랜치를 가지고 있었는데 아직 내 컴퓨터에서 로컬로 발견되지 않았다면 브랜치를 다운로드 할 것이고 다음과 같이 전환 할 수있을 것 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
(이미 존재하지 않는다고 가정) 라는 로컬 지점에 있습니다. 훌륭하고 다른 사람의 리모컨이나 지점을 추적 할 필요가 없음을 의미합니다.
git clone https://github.com/berstend/frappe.git -b feature/mongoose-support /my_clone
에서 요점 문서에서 결코 얻지 못했을 것 입니다.
git fetch github
할 때 당신은 할 수 있습니다 git co -t github/pr/#
. 이렇게하면 원격 URL을 복사하여 붙여넣고 브랜치 이름을 알아내는 등의 작업을 방지 할 수 있습니다. 그런 다음 추가 번거 로움없이 잘 명명되고 간결하며 정확한 브랜치 이름을 얻을 수 있습니다. 그러나 압도적으로 보일 수 있음을 이해합니다.
git clone git://github.com/dweldon/frappe
cd frappe
git pull origin pull/2/head
git pull
는 현재 분기에 병합을 만듭니다. 일반적으로 PR의 git fetch
경우 원본 작성자의 코드를 얻고 싶을 것입니다 (그런 다음 FETCH_HEAD로 액세스 가능). 병합을 원하면 pull/2/merge
(대신 pull/2/head
) 도 언급 할 가치가 있습니다. GitHub는 지금 [Merge] 버튼을 클릭했을 때 발생하는 정확한 병합 커밋을 제공합니다.
사용자가 풀 요청을 제출하면 일부 변경 사항을 포크 복제본의 브랜치에서 다른 사용자의 저장소로 다시 병합하도록 요청합니다.
원하는 변경 사항은 pull 요청의 소스에서 가져올 수 있습니다. 이렇게하려면 사용자의 저장소 ( git://github.com/berstend/frappe.git
)를 복제 한 다음, 그가 생성 한 풀 요청 브랜치를 확인합니다 ( feature/mongoose-support
).
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]
Github의 공식 새 명령 줄 인터페이스 :
gh repo clone org/repo
cd repo
gh pr checkout 44
여기서는 44
PR 번호이지만 지점 이름 일 수도 있습니다.
clone
아니라fetch
참조 : stackoverflow.com/questions/6743514/…