如果我们将错误的项目推送到另一个远程存储库会怎样?

时间:2010-08-29 18:03:24

标签: mercurial dvcs

假设我们有一个名为main的项目,然后我们有一个analytics的项目,而在Bash中,我们在analytics工作目录并意外地推送到main远程存储库,将analytics中的所有文件都添加到main项目中,是否可逆?

2 个答案:

答案 0 :(得分:3)

您将收到Mercurial的投诉,推送将被中止。它看起来像这样:

# 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

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

答案 1 :(得分:0)

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

histedit是一个Hg扩展,不与Hg捆绑在一起。安装后,您可以像这样使用它:

> hg histedit <rev>

在哪里是违规提交的开始。 Histedit将生成从提示到提交的提交列表。在此列表中,您可以向histedit指出您要保留提交,编辑注释或删除提交。 Drop应该可以做到。