是否有可能确定我可以安全地从新的远程存储库中提取,即这两个存储库共享一个共同的祖先?我正在编写一个自动克隆和更新大量git,hg等存储库的程序,我想无缝地处理远程存储库移动到新URL的情况。似乎git允许我从任何远程拉出来,可能会造成大规模冲突。 Svn拥有存储库uuid来确定您是否可以切换到新的URL。我意识到git是分布式的,并且意味着很容易分叉,所以uuid真的没有意义,但是在git中有没有类似的特性/功能?
答案 0 :(得分:3)
您可以add and fetch the remote branch到您的存储库,而无需将其合并到您的历史记录中。然后,您可以使用git merge-base
git remote add test-remote foo@bar:/path/to/repo.git
git remote update
git merge-base test-remote/master master || echo "No common ancestors!"
答案 1 :(得分:1)
我意识到git是分布式的,并且意味着很容易分叉,所以uuid真的没有意义,但git中是否有类似的功能/功能?
相反,git作为分布式版本控制系统如此有用的部分原因是每个提交都有一个唯一定义该提交及其完整历史记录的ID。 (这些是你看到的与git中的提交相关联的哈希,正确地称为“对象名称”。)从提取或推送提交的存储库无关紧要,它仍然代表树的完全相同的状态和完全相同的历史,包括作者身份等。
从你的问题来看,我不清楚你想知道的是(a)是否有任何共同的祖先或(b)分支A的历史是否完全包含分支B的历史(即如此将A合并到B将是“快进”。
如果您在(a)之后,则Brian Campbell's answer就是您想要的,即基本上测试git merge-base test-remote/master master
是否成功返回。
另一方面,如果您在(b)之后,则应测试git merge-base test-remote/master master
的输出是否与git rev-parse --verify master
相同。
答案 2 :(得分:0)
git中的“pull”只是一个“fetch”,然后是“合并”到当前分支中。当您在没有共享祖先的遥控器上执行git“fetch”时,会收到此警告:
警告:没有常见提交
您应该可以从URL获取,然后从该操作的输出中检测此消息。