2010-08-29 56 views
1

说,如果我们有一个称为main一个项目,然后我们有一个项目,是analytics,并猛砸,我们在analytics工作目录,并意外地推到main远程仓库,将在analytics所有文件添加到main项目,它是可逆的吗?如果我们将错误的项目推送到另一个远程存储库,会发生什么情况?

+0

你为什么不自己尝试一下呢?看看我的答案,看看测试这些东西有多容易:-) – 2010-08-29 18:13:12

回答

3

你会从水银得到一个投诉,并推动将被中止。它看起来像这样:

# create main repo: 
% hg init main 
% touch main/a.txt 
% hg -R main commit --addremove -m main 
adding a.txt 

# create analytics repo 
% hg init analytics 
% touch analytics/a.txt 
% hg -R analytics commit --addremove -m analytics 
adding a.txt 

# try the push: 
% hg -R analytics push main 
pushing to main 
searching for changes 
abort: repository is unrelated 

水银知道,如果两个储存根据其根节点的是相关。也就是说,如果存储库A和B共享共同的根节点,则它们是相关的。

+0

Mercurial如何知道?比如说,如果两个项目只有一个文件是'index.html',那么它如何知道哪个项目是哪个项目?或者,如果两个项目都碰巧有一个文件在相同的路径,如'config/database.yml' – 2010-08-29 18:15:52

+0

我不确定这个评论 - 我只是尝试了两个本地回购,并从CLI没有警告。我知道TortoiseHg会发出一些警告,但可以通过选择“强制推送”选项来避免这些警告。 – dls 2010-08-29 18:16:10

+0

有趣的是,如何知道他们是不相关的?是否通过使用转数(长整数)来检查它们来自同一个“根”?事实上,我可以推动John的机器,或推动分级,推动测试,或从测试推到分级,看起来可能是任意的。 – 2010-08-29 18:25:29

0

如果main是本地存储库,则可导航到main并执行histedit以删除违规提交。您也可以从基于服务器的main发出声音,但如果有其他用户创建了克隆,则当他们推到主体时,他们将重新添加更改。

histedit是汞的扩展,没有附带汞捆绑在一起。一旦你安装它,你可以像这样使用它:

> hg histedit <rev> 

哪里是违规提交的开始。 Histedit将生成一个提交列表,直到提示。在这个列表中,您可以向histedit表明您想要保留提交,编辑注释或放弃提交。滴应该做的伎俩。

相关问题