0

こことブログ投稿の多数の回答から知りたいことをうまくまとめることができなかったので、この質問をしています:

アップストリームのすべてのブランチとタグを取得するように git リポジトリをフォークするにはどうすればよいですか?

私が試したことは次のとおりです。

git init
git remote add origin <ORIGIN_URL> # i.e. my repo
git remote add upstream <UPSTREAM_URL> # i.e. the repo I want to fork
git fetch upstream
git push --all origin

しかし、その最後の行は、うまくいくと思っていたときに失敗します。私はこれを得る:

$ git push --all origin
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to <ORIGIN_URL>

何か案は?

編集:

この質問は、「フォーク ボタンをクリックすると、GitHub は実際に何をするのですか?」と考えることができます。これは、私が再現しようとしている動作です。

4

2 に答える 2

4

ミラーリングを試す:

git clone --mirror

このようにして、originブランチの名前空間なしでリモート (という名前) が作成されます。IOW、ミラーの refs/heads/master は、元のリポジトリの refs/heads/master に正確に対応します (そしてバインドされます)。

元のアップストリーム リポジトリの代わりに、このリポジトリを使用するだけです。ミラーを更新したい場合は、次のようにします。

cd upstream-mirror.git && git --bare fetch upstream

警告: アップストリーム ブランチを変更してミラーにプッシュすると、アップストリーム リポジトリとミラーが分岐します。それを防ぐために、プッシュ(-fオプションなし)は失敗します。

ミラーは、実際にはアップストリーム リポジトリの正確なミラーであり、その所有者として、それを変更するオプションがあります。

于 2012-07-16T09:07:25.797 に答える
1

これは、私が望んでいたことを行うための最良の方法として私が思いついたものであり、動作しているようで、GitHub と同様の動作をします。

git clone --mirror <UPSTREAM> myrepo
cd myrepo
git remote rename origin upstream
git remote add origin <MY_ORIGIN>
git push --all
git push --tags

そして、リモートをミラーリングしないよう.git/configに変更するように微調整します。これは、私が今望んでいることではないからです。upstream

于 2012-07-17T10:20:05.490 に答える