以前に作成したプルリクエスト(GitHub Webインターフェイスを介して作成)をチェックアウトしたいです。私は検索して、refs/pullまたはrefs/pull/prの異なる場所を見つけました。
しかし、私はfetch = +refs/pull/*/head:refs/remotes/Origin/pr/*
をgit設定ファイルに追加してgitフェッチをするとき
何が悪いの? GitHubは自動的にpull/xyzのものを作るべきですか、それとも私は何かを設定する必要がありますか?
あなたのローカルレポにリモートPRを取得するには、
git fetch Origin pull/ID/head:BRANCHNAME
ここでID
はプルリクエストID、BRANCHNAME
は作成したい新しいブランチの名前です。ブランチを作成したら、次に単純に
git checkout BRANCHNAME
詳しくは GitHubの公式ドキュメント をご覧ください。
That Gist あなたがgitフェッチをしたときに何が起こるかを説明しています:
明らかに、githubのURLをあなたのプロジェクトのURLと一致するように変更してください。結局次のようになります。
[remote "Origin"]
fetch = +refs/heads/*:refs/remotes/Origin/*
url = [email protected]:joyent/node.git
fetch = +refs/pull/*/head:refs/remotes/Origin/pr/*
今度はすべてのpull要求を取得します。
$ git fetch Origin
From github.com:joyent/node
* [new ref] refs/pull/1000/head -> Origin/pr/1000
* [new ref] refs/pull/1002/head -> Origin/pr/1002
* [new ref] refs/pull/1004/head -> Origin/pr/1004
* [new ref] refs/pull/1009/head -> Origin/pr/1009
...
特定のプルリクエストをチェックアウトするには:
$ git checkout pr/999
Branch pr/999 set up to track remote branch pr/999 from Origin.
Switched to a new branch 'pr/999'
そのタスクを自動化するために、 issue 259 にリストされたさまざまなスクリプトがあります。
git-extrasプロジェクトは、コマンドgit-pr
を提案します( PR 262 で実装されています) =)
git-pr
(1) - プルリクエストをローカルにチェックアウトする概要
git-pr <number> [<remote>]
git-pr clean
説明
GitHubのプルリクエスト番号に基づいてローカルブランチを作成し、その後そのブランチに切り替えます。
取得元のリモートの名前。デフォルトは
Origin
です。例
これは
Origin
からのプルリクエスト226
をチェックアウトします。
$ git pr 226
remote: Counting objects: 12, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 12 (delta 3), reused 9 (delta 3)
Unpacking objects: 100% (12/12), done.
From https://github.com/visionmedia/git-extras
* [new ref] refs/pull/226/head -> pr/226
Switched to branch 'pr/226'
私はフェッチしてチェックアウトすることを好みますローカルブランチを作成せずにそしてHEADデタッチ状態であること。ローカルマシンを不要なローカルブランチで汚染することなく、プルリクエストをすばやく確認できます。
git fetch upstream pull/ID/head && git checkout FETCH_HEAD
ここで、ID
はプルリクエストID、upstream
はオリジナルのプルリクエストです(たとえば、Origin
)。
助けになれば幸いです。
Steven Pennyの答えを参考にして、テストブランチを作成してPRをテストするのが最善です。だからここにあなたがすることです。
git checkout -b test
git pull Origin pull/939/head:test
これで、このローカルテストブランチ(この場合はtestという名前)で変更を安全にテストでき、問題がなければGitHubから通常どおりにマージできます。
git config
コマンドを使用して.git/config
に新しいルールを書き込み、リポジトリからプルリクエストを取得することができます。
$ git config --local --add remote.Origin.fetch '+refs/pull/*/head:refs/remotes/Origin/pr/*'
そしてそれだけで:
$ git fetch Origin
Fetching Origin
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://github.com/container-images/memcached
* [new ref] refs/pull/2/head -> Origin/pr/2
* [new ref] refs/pull/3/head -> Origin/pr/3
123
)と作成者のブランチの名前(branch-name
)があります。これら両方をコピーしてください。git status
を実行して作業ディレクトリをきれいにします。git fetch upstream pull/<id>/head:<branch>
と入力してPRのコピーを取得します。この例では、git fetch upstream pull/123/head:branch-name
と入力します。git checkout branch-name
を使用してそれに切り替えます。あなたのディレクトリはPRの正確なコピーになります。自分自身の変更をプルリクエストに直接追加することはできないので、バグや提案について作者に必ず伝えてください。git checkout master
を使ってあなたのローカルバージョンのProject Porcupineに戻ってください。ここで完全な指示を見てください--- https://github.com/TeamPorcupine/ProjectPorcupine/wiki/How-to-Test-a-Pull-Request#testing-someone-elses-pull-request
私は誤ってgit-extrasによって提供されるものとほとんど同じものを書いてしまいました。そのため、他の追加コマンドをインストールするのではなく単一のカスタムコマンドを使用する場合は、 このgit-pr
ファイル を$PATH
のどこかに配置するだけで、次のように記述できます。
git pr 42
// or
git pr upstream 42
// or
git pr https://github.com/peerigon/phridge/pull/1
Bitbucketの場合、Wordのpull
をpull-requests
に置き換える必要があります。
まず、git ls-remote Origin
コマンドでプルリクエストのURLスタイルを確認できます。
$ git ls-remote Origin |grep pull
f3f40f2ca9509368c959b0b13729dc0ae2fbf2ae refs/pull-requests/1503/from
da4666bd91eabcc6f2c214e0bbd99d543d94767e refs/pull-requests/1503/merge
...
ご覧のとおり、それはrefs/pull-requests/1503/from
ではなくrefs/pull/1503/from
です。
それからあなたは答えのどれかのコマンドを使うことができます。
もしあなたが "github fork"のワークフローをたどっているのであれば、そこではforkを作成してリモートアップストリームレポジトリを追加します。
14:47 $ git remote -v
Origin [email protected]:<yourname>/<repo_name>.git (fetch)
Origin [email protected]:<yourname>/<repo_name>.git (Push)
upstream [email protected]:<repo_owrer>/<repo_name>.git (fetch)
upstream [email protected]:<repo_owner>/<repo_name>.git (Push)
あなたの現在のブランチに引っ張るためにあなたのコマンドは次のようになります。
git pull upstream pull/<pull_request_number>/head
新しいブランチに引っ張ると、コードは次のようになります。
git fetch upstream pull/<pull_request_number>/head:newbranch
私はハブ、githubのツールを使っています。 https://github.com/github/hub
ハブでローカルにプルリクエストをチェックアウトするのはちょっと簡単です。
hub checkout https://github.com/owner/repo/pull/1234
or
hub pr checkout 1234