2014-02-26 31 views
1

我一直在努力掌握使用Mercurial跟踪对本地Galaxy实例所做的更改。在投入生产之前,我有一台测试服务器(本地笔记本电脑)和一台开发服务器(集群)来测试所有东西。我从开发推动到bitbucket回购,并从bitbucket拉到我的测试服务器。现在我试图让东西走向另一个方向。 我使用Eclipse Mercurial插件从测试推送到了bb。现在,我尝试从开发如下:Mercurial更新似乎覆盖本地文件

hg pull 
hg update 
hg resolve --all 
emacs .hgignore 
hg resolve -m .hgignore 
hg commit -m 'Helpful and informative message' 

我想,这将合并我已经开发服务器在我的当前工作目录上测试所做的更改。我开始从开发人员那里工作,但很明显,开发中的一些文件被更新完全覆盖。我慌了,并试图摆脱它:

hg heads 
hg rollback 
hg incoming 
hg heads 
hg status 
hg incoming 
hg pull 

我真的不知道该怎么在这种情况下做的,因为我不希望以这样的方式,这将是剥离或拉的退出记录或移除我在测试服务器上所做的所有艰苦工作,当我从开发人员推送到bb时。我尝试再次拉动:

hg update -C bf3924ee142c 
#Revert to a clean copy of my last working code 
146 files updated, 0 files merged, 0 files removed, 0 files unresolved 
less job_conf.xml 
#This is my most recent local copy and it looks correct 
hg merge 6dc34fa   
abort: nothing to merge (use 'hg update' or check 'hg heads') 
hg update 6dc34fa 
201 files updated, 0 files merged, 15 files removed, 0 files unresolved 
less job_conf.xml 
#Entirely replaced by the remote copy 

它重现相同的行为,我的本地副本完全丢失。我尝试从我的测试服务器上跟踪文件中删除文件,并推送到BB,然后拉到开发,但文件被完全删除在开发。 每次安装软件时,必须对此job_conf.xml文件进行不同的设置,因此在我将其设置在测试服务器上时,我更改了该文件。我可能删除了它,然后从job_conf.xml.sample文件中复制它(将其重命名为job_conf.xml) - 我不确定这是否会导致问题。

我希望对此行为有任何建议/启示!

+0

我注意到你的第一部分命令中没有'hg merge'。这是剪切和粘贴错误? 'hg pull'后的'hg heads'的输出是什么?在这一点上你应该有两个头(至少)。什么是6dc34fa?根据上面的输出,它似乎不是一个单独的头部。 –

+0

不是一个错字 - 我没有合并,然后(我认为它说我更新后,更新)。我不记得当时的头部输出是什么,但现在看来我只有一个。 6dc34fa是在BB提示之前的变更集 - 在我从追踪中删除文件之前。 – user1885897

+0

当你做拉时你有没有修改任何文件?我不明白你为什么要做'hg resolve'命令。通常,只有在合并时发生冲突时才会这样做。 –

回答

0

如果您有需要在部署时更改的文件,那么它们不应该在Mercurial中,或者它们应该处于非活动名称下。否则,当你拉它时会被Mercurial中的内容覆盖。

您可以在单独的分支上单独配置并从“trunk”合并核心更改,但您必须小心谨慎,这可能是值得的更多工作。我有一个开发环境可以做到这一点。我将我的开源分支合并到我的专有分支。我只需要小心地按照正确的方向进行合并。