【问题标题】:Freshly cloned hg repository shows files as modified (Windows)新克隆的 hg 存储库显示文件已修改 (Windows)
【发布时间】:2012-01-30 18:24:51
【问题描述】:

我刚刚在 Windows XP 上克隆了一个 Hg 存储库,hg status 报告了很多(全部?)文件为Modified。可能是什么原因?

E:\myprojects\myproject>hg summary
parent: 206:03856faec803 tip
 latest commit message
branch: default
commit: 78 modified
update: (current)

即使在执行hg revert --all --no-backup 之后,hg diff --git 也会报告:

diff --git a/path/to/file1 b/path/to/file1
--- a/path/to/file1
+++ b/path/to/file1
@@ -1,332 +1,332 @@
-line1
-line2
...
-line332
+line1
+line2
...
+line332
diff --git a/path/to/file2 b/path/to/file2
--- a/path/to/file2
+++ b/path/to/file2
@@ -1,231 +1,231 @@
...
 line231
\ No newline at end of file

【问题讨论】:

  • 你能显示hg status的结果吗?至少部分输出
  • 您能否准确地复制粘贴您的发现(克隆命令、hg 状态命令及其结果...)?
  • 真的没有什么花哨的。调用 hg status 时,所有文件都直接在克隆 (hg clone ssh://user@server:<port>/repository.hg E:\myproject) 之后显示前导 M

标签: mercurial clone


【解决方案1】:

如果 hg revert 无法恢复干净的工作目录,这很可能意味着存储库不包含 canonical 形式的文件,但 hg status 将它们放入规范中在与存储库内容进行比较之前形成。这通常发生在 eol 扩展打开时,但存储库包含带有 CRLF 的文件。可以肯定的是,暂时关闭 eol-extension 并检查文件是否仍然被修改。如果是这样:

(1) 再次打开它并提交更改,因此它们也将在存储库中以规范形式出现。

(2) 确保访问您的存储库的其他用户已打开eol-extension,否则这将是一场永无止境的游戏:)

【讨论】:

  • 是的,如果我关闭 eol-extension,文件不会报告为已修改。
【解决方案2】:

试试hg diff --git,它会显示 Mercurial 认为对文件进行了哪些修改。我的猜测是执行位权限。

【讨论】:

  • 当整个 repo 被无故修改时,我的怀疑通常落在 EOL 上。但是,在这种情况下很难说……已知的事情很少。
  • 是的,Mercurial 大多不会带行尾,但也有扩展和编辑器。如果真的是一切,我的钱就是文件权限。
  • 那么@idigas 可能是正确的,并且某些东西(可能不是 Mercurial)弄乱了你的行尾。你能把hg summary 提出问题吗?
  • 好的,我已经添加了hg summary 的输出。 Hg 有类似 git reset --hard 的东西吗?
  • git reset --hardhg revert --all --no-backup(位于 mercurial.selenic.com/wiki/GitConcepts )。 hg diff --git 的输出是什么样的?至少有几个短文件值得。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
  • 2015-12-24
  • 2011-06-27
  • 1970-01-01
  • 2012-08-16
  • 2010-10-23
  • 2015-05-29
相关资源
最近更新 更多