プルリクエストからのGitHubクローン?


128

GitHubからリポジトリを複製したいと思います。問題は、メインブランチが必要ないことです。この未承認のプルリクエストのバージョンが必要です。

メインリポジトリの代わりにプルリクエストバージョンを複製することはできますか?


2
あなたがここにいない来た場合はcloneなく、ためにfetch参照してください:stackoverflow.com/questions/6743514/...
チロSantilli郝海东冠状病六四事件法轮功

回答:


87

-bオプションを使用してプルリクエストを行うことで、必要なブランチのクローンを作成できます。

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'

これで、PRを実行するか、githubリモートに名前が付けられていない場合にgit pr <pr_number>、PRをチェックアウトできgit pr <pr_number> <remote>ます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、それは私のために切り替わります。
マット--- 2017年

名前付きチェックアウトのエイリアスがあることを前提とする@mattco
Michael 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のフォークから新しいPRを開きます


このブランチをローカルでマージするにはどうすればよいですか?上記のように、マージされていないプルリクエストを複製してフェッチしました。ブランチ名をチェックアウトしようとしましたが、IDE /テキストエディターに変更が表示されません。
erginduran 2017年

17

この要点の指示に従って、リポジトリとブランチを理解しなくても、リモートを直接チェックアウトできます。

使用例

私のプロジェクトの1つ(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

2行目も同じことを行いますが、標準のgitブランチの代わりにプルリクエストを行います。それがあなたが見る理由ですrefs/pull/*/head。GitHubで各プルリクエストのヘッドをフェッチし、それをにマッピングしgithub/pr/#ます。したがって、誰かがプルリクエストを送信し、その番号が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から要点文書に到達することはなかっただろう。
フレッシュアイボール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
注:git pull現在のブランチにマージを作成します。通常、PRの場合はgit fetch、元の作成者のコードを取得するだけです(その後、FETCH_HEADとしてアクセスできます)。マージが必要な場合は、pull/2/merge(の代わりにpull/2/head)言及する価値もあります。これにより、GitHubは、[Merge]ボタンをクリックしたときに発生する正確なマージコミットを提供します。
Beni Cherniavsky-Paskin

6

ユーザーがプルリクエストを送信すると、フォークのクローンのブランチから別のユーザーのリポジトリにマージする変更をいくつか要求します。

必要な変更は、プルリクエストのソースから取得できます。これを行うには、ユーザーのリポジトリのクローン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ブランチから変更をプッシュしていることがわかります。

彼のリポジトリを複製してそのブランチをチェックアウトできます


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.