2011-08-19 90 views
1

我有两个git回购站,我在本地机器上克隆。我试图从申请一个回购到其他的变化:在git中的另一个本地回购库中引用一个本地回购站中的sha1

cd path/to/local-repo1 
git fetch path/to/local-repo2 <sha1> 
// cherry-pick from fetch head, etc. 

我越来越:

fatal: Couldn't find remote ref <sha1> 
fatal: The remote end hung up unexpectedly 

我发现git: Apply changes introduced by commit in one repo to another repo,但它为什么是混帐不承认的SHA1另一个本地回购?原来,如果我用一个分支的名称替换sha1,它会成功,但我需要使用大量的sha1来做到这一点,并且不想为每个分支创建一个分支来引用它们。

+2

这不是你的具体问题的答案,但你不*有*创建分支和获取每一个。你可以只添加'local-repo2'作为远程和'git fetch local-repo2',然后挑选哈希。 –

回答

1

git fetch,你试图使用的形式是:

git fetch <repository> <refspec> 

但是,你SHA1SUM是(不可能!)一个有效的Refspec。 refspec定义源和目标存储库之间的refs(通常是分支名称)之间的映射。 SHA1sums(对象名称)与refs不同,并且错误告诉您,当您执行git fetch path/to/local-repo2 f414f31时,它将refspec扩展为f414f31:f414f31,然后在远程存储库中找不到参考​​。那是因为它不是参考。

因此,假设您的承诺是在当地的分支机构的远程仓库,我将做到以下几点:

git remote add other-local path/to/local-repo2 
git fetch other-local 
git cherry-pick f414f31 

形式git fetch <remote-name>取下远程储存于远程跟踪分行的所有地方分公司refs/remotes/<remote-name>,并确保这些分支(包括历史记录中的所有提交)所需的所有对象都存在于本地存储库中。