2016-04-04 18 views
1

まず、私はhow I can update my Bare Repositoryを知っています。現在のリポジトリがbareで、リモートリポジトリのI fetchである場合、originから取得すると以外のremote (tracking) branches‍‍‍が作成される理由を知りたいのですが、 originbare_cloneremote:私は現在のディレクトリに3つのディレクトリを持ってGitのBareリポジトリの起源からのフェッチは "リモートブランチ"を作成しません

私はこの実験を試みました。今:あなたは2つのリモートのブランチを見ることができます

$ cd ./origin 
$ git init 
$ cat > 1 
^Z 
$ git add 1 
$ git commit -m "add 1 in initial commit" 



$ cd ../bare_clone 
$ git clone --bare ../origin 

$ cd ../remote 
$ git init 
$ cat > 1 
^Z 
$ git add 1 
$ git git commit -m "add 1 in initial commit" 
$ git branch test 

$ cd ../bare_clone/origin.git/ 
$ git remote add remote_name ../../remote/ 
____________________________________________ 
$ git fetch remote_name 
warning: no common commits 
remote: Counting objects: 3, done. 
remote: Total 3 (delta 0), reused 0 (delta 0) 
Unpacking objects: 100% (3/3), done. 
From ../../remote 
* [new branch]  master  -> remote_name/master 
* [new branch]  test  -> remote_name/test 
____________________________________________ 
$ git branch -a 
* master 
    remotes/remote_name/master 
    remotes/remote_name/test 
____________________________________________ 
$ cd ../../origin/ 
$ git branch origin_test_branch 
____________________________________________ 
$ cd ../bare_clone/origin.git/ 
t$ git fetch origin 
From path/to/bare_clone/../origin 
* branch   HEAD  -> FETCH_HEAD 
____________________________________________ 
$ git branch -a 
* master 
    remotes/remote_name/master 
    remotes/remote_name/test 

remote_nameリポジトリの追跡ブランチのために作成されますが、originの枝origin_test_branchを追跡するためのリモートブランチはありません。

答えて

3

--bareクローンは一般にプッシュ操作の受信者として意図されているため、実際にはフェッチを行うことは期待されていません。

あなたが表示されます--bareクローンのconfigファイルを見れば:

$ cat config 
[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = true 
[remote "origin"] 
    url = ... 

[remote "origin"]セクションでfetch =ラインの欠如に注意してください。これは、git fetchを実行するときに参照がコピーされることがないことを意味します(コピーされる参照はfetch =行にリストされているためです)。

、例えば、git clone --mirrorとこれを比較:

$ cat config 
[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = true 
[remote "origin"] 
    url = ... 
    fetch = +refs/*:refs/* 
    mirror = true 

フェッチ操作にリモートoriginから得られたものとすべての参考文献を上書きと言っています。これはとrefs/notes/*を自動的にピックアップすることに注意してください(これはすべてrefs/*の参照を取得するためです)。

通常の「コピーのみのブランチと、コピー中にブランチの名前を変更する」ことができます。 git fetchはまた、(私がもしわからないフェッチ中にいくつかの(すべてではない)のタグの上に持って来ることがあることに注意してください、しかし

git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*' 

:もしそうなら、あなたは裸のリポジトリを作成した後、適切なfetch =行を追加する必要がありますgit fetch特殊ケースの裸クローン)。タグは改名されないので、これはあなたが望むものではない可能性があります(しかし、再度考えて、あなた自身で決定する必要があります)。

関連する問題