2016-11-04 9 views
0

私はプッシュ・トゥ・エンプティとクローン・ミラーを使えば、あなたのコミットだけでなく、新しいリポジトリに多くのことをプッシュできることが分かります。たとえば、リモートブランチをコピーすることができます。しかし、リモコン自体を転送する方法はありますか?リモコンをリモコンに押し込むことはできますか?

特にクローンミラーの場合、私は直感的に、他のリポジトリ内のすべてのミラーであるはずです。だから私はこれはリモコンを含むように見えないことに驚いた。

以下の例では、2つのリモート "dest"と "blah"でrepo( "repo1")を取り出し、それを新しいベアリポジトリ "repo2"(push-to-empty)にプッシュしました。私も同じ "repo1"をとり、それを "repo3"に複製しました。 "repo2"の場合は、リモートまたはリモートの参照は一切プッシュされませんでした。 "repo3"の場合、 "dest"リモートのリモート参照がコピーされました(NB:公平に、このブランチは、それを追跡する際に "repo2"にプッシュした時点では存在しませんでした)。他の遠隔地(「ああ」)の痕跡はありません。あなたが養うためにこれらを使用することができ

remote.origin.url [email protected]:larsks/oschecks.git 
remote.origin.fetch +refs/heads/*:refs/remotes/origin/* 

:のようなものが生成されます

git config --get-regexp '^remote\.' 

C:\test-remote>mkdir repo1bare 

C:\test-remote>cd repo1bare 

C:\test-remote\repo1bare>git init --bare 
Initialized empty Git repository in C:/test-remote/repo1bare/ 

C:\test-remote\repo1bare>git ls-remote . 

C:\test-remote\repo1bare>cd .. 

C:\test-remote>git clone .\repo1bare .\repo1wd 
Cloning into '.\repo1wd'... 
warning: You appear to have cloned an empty repository. 
done. 

C:\test-remote>cd repo1wd 

C:\test-remote\repo1wd>git remote -v 
origin C:/test-remote/.\repo1bare (fetch) 
origin C:/test-remote/.\repo1bare (push) 

C:\test-remote\repo1wd>copy con dummy.txt 
^Z 
     1 file(s) copied. 

C:\test-remote\repo1wd>git add dummy.txt 

C:\test-remote\repo1wd>git commit -m "dummy" 
[master (root-commit) bf946c1] dummy 
1 file changed, 0 insertions(+), 0 deletions(-) 
create mode 100644 dummy.txt 

C:\test-remote\repo1wd>git push -u origin master 
Counting objects: 3, done. 
Writing objects: 100% (3/3), 211 bytes | 0 bytes/s, done. 
Total 3 (delta 0), reused 0 (delta 0) 
To C:/test-remote/.\repo1bare 
* [new branch]  master -> master 
Branch master set up to track remote branch master from origin. 

C:\test-remote\repo1wd>cd ..\repo1bare 

C:\test-remote\repo1bare>git ls-remote . 
bf946c1f3d14b287b2973fdfcca7379415dbc486  HEAD 
bf946c1f3d14b287b2973fdfcca7379415dbc486  refs/heads/master 

C:\test-remote\repo1bare>git remote -v 

C:\test-remote\repo1bare>git remote add blah http://blah.com/repo1 

C:\test-remote\repo1bare>git remote -v 
blah http://blah.com/repo1 (fetch) 
blah http://blah.com/repo1 (push) 

C:\test-remote\repo1bare>cd .. 

C:\test-remote>mkdir repo2bare 

C:\test-remote\repo1bare>cd repo2bare 

C:\test-remote\repo2bare>git init --bare 
Initialized empty Git repository in C:/test-remote/repo2bare/ 

C:\test-remote\repo2bare>cd ..\repo1bare 

C:\test-remote\repo1bare>git remote add dest C:\test-remote\repo2bare 

C:\test-remote\repo1bare>git remote -v 
blah http://blah.com/repo1 (fetch) 
blah http://blah.com/repo1 (push) 
dest C:\test-remote\repo2bare (fetch) 
dest C:\test-remote\repo2bare (push) 

C:\test-remote\repo1bare>git push --all dest 
Counting objects: 3, done. 
Writing objects: 100% (3/3), 211 bytes | 0 bytes/s, done. 
Total 3 (delta 0), reused 0 (delta 0) 
To C:\test-remote\repo2bare 
* [new branch]  master -> master 

C:\test-remote\repo1bare>cd ..\repo2bare 

C:\test-remote\repo2bare>git remote -v 

C:\test-remote\repo2bare>git ls-remote . 
bf946c1f3d14b287b2973fdfcca7379415dbc486  HEAD 
bf946c1f3d14b287b2973fdfcca7379415dbc486  refs/heads/master 

C:\test-remote\repo2bare>cd .. 

C:\test-remote>git clone .\repo1bare --mirror .\repo3bare 
Cloning into bare repository '.\repo3bare'... 
done. 

C:\test-remote>cd repo3bare 

C:\test-remote\repo3bare>git remote -v 
origin C:/test-remote/.\repo1bare (fetch) 
origin C:/test-remote/.\repo1bare (push) 

C:\test-remote\repo3bare>git ls-remote . 
bf946c1f3d14b287b2973fdfcca7379415dbc486  HEAD 
bf946c1f3d14b287b2973fdfcca7379415dbc486  refs/heads/master 
bf946c1f3d14b287b2973fdfcca7379415dbc486  refs/remotes/dest/master 

C:\test-remote\repo3bare> 
+0

リポジトリ間でのみコミットと参照をプッシュできます。リモートのリストやフックスクリプト、その他のリポジトリのメタデータなどの設定情報をプッシュすることはできません。 – larsks

+0

ああ、私はそれが設定であることを認識していませんでした。したがって、どのリモートも 'git config --list'に表示されます。私がそれらを特定できれば、コピーして別のリポジトリの設定に何らかの形で貼り付けることができますか?リモコンに関連する設定項目のみを取得する方法はありますか? – Kidburla

答えて

2

あなたはgitこのようなあなたのローカルリポジトリに関連付けられているリモコンのリストを取得することができますこれをgit config(そしておそらくgit remote update)に送り込み、もう片方のスクリプトはリモートリポジトリの内容を読み込みます。

関連する問題