Mercurial中央服务器文件差异(使用'diff to local')

时间:2010-05-04 19:05:13

标签: mercurial

新手警报!

好的,我有一个工作中心的Mercurial存储库,我已经使用了几个星期。

在我遇到一个非常奇怪的问题之前,一切都很棒:我的中央服务器似乎没有同步到自己?我现在只有一个文件看起来似乎不同步,但我真的需要知道这是怎么发生的,以防止它在将来发生。

情景:

1)使用现有项目目录在服务器上创建Mercurial存储库。该目录包含文件'mypage.aspx'。

2)在我的工作站上,我克隆了中央存储库

3)我对mypage.aspx进行了编辑

4)hg commit,然后hg从我的工作站推送到中央服务器

5)现在,如果我使用TortoiseHg的存储库资源管理器查看服务器存储库中的mypage.aspx,我会看到mypage.aspx的更改历史记录 - 初始签入和一次编辑。但是,当我选择“Diff to local”时,它会显示服务器磁盘上的当前版本是原始版本,而不是编辑版本!

我还没有尝试过分支,所以我确定我没有遇到分支问题。

服务器或客户端上的

'hg status'不会返回任何挂起的更改。

如果我将服务器存储库的克隆创建到新位置,我会看到与预期相同的更改历史记录,但磁盘上的文件不包含我的编辑。

所以,回顾一下:

  

中央存储库=原始文件,但显示修订历史记录中的更改(错误)

     

本地存储库'A'=已更新文件,显示修订历史记录中的更改(好)

     

本地存储库'B'=原始文件,但显示修订历史记录中的更改(错误)

请帮忙!

谢谢,

大卫

2 个答案:

答案 0 :(得分:3)

听起来你正在看中央回购的工作副本。就像你当地的回购,有一个工作副本。在TortoiseHg中运行hg update(或“更新到分支提示”)应该将中央仓库的工作副本同步到最新版本。

答案 1 :(得分:1)

这是正常的,因为服务器上的存储库有两个组件:变更集的实际存储库(在.hg子目录中)和工作副本。当您将更改从工作站上的本地存储库推送到服务器存储库时,它会更新服务器上的存储库文件(在.hg子目录中),但它不会更改工作副本文件(在.hg子目录之外):this需要在服务器上进行显式更新操作才能更改工作副本。

如果服务器存储库仅用作存储库,并且您在克隆中完成所有实际工作,那么您最好在服务器上使用“裸存储库”(只需删除工作副本文件,只保留.hg子目录本身。)