新手警报!
好的,我有一个工作中心的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'=原始文件,但显示修订历史记录中的更改(错误)
请帮忙!
谢谢,
大卫
答案 0 :(得分:3)
听起来你正在看中央回购的工作副本。就像你当地的回购,有一个工作副本。在TortoiseHg中运行hg update
(或“更新到分支提示”)应该将中央仓库的工作副本同步到最新版本。
答案 1 :(得分:1)
这是正常的,因为服务器上的存储库有两个组件:变更集的实际存储库(在.hg子目录中)和工作副本。当您将更改从工作站上的本地存储库推送到服务器存储库时,它会更新服务器上的存储库文件(在.hg子目录中),但它不会更改工作副本文件(在.hg子目录之外):this需要在服务器上进行显式更新操作才能更改工作副本。
如果服务器存储库仅用作存储库,并且您在克隆中完成所有实际工作,那么您最好在服务器上使用“裸存储库”(只需删除工作副本文件,只保留.hg子目录本身。)