重新组织后,告诉Mercurial有关移动文件的信息

Jes*_*son 30 mercurial

我们最近在我们的服务器上重新组织了一个非常无组织的站点.该网站使用Mercurial进行版本控制.我们重新组织了一切.成千上万的文件.现在,当我这样做时,hg status它显示了大量新的未跟踪文件,由?大量丢失的文件表示,这些文件与未跟踪的文件相同,由a表示!.

我如何告诉Mercurial我们移动了这些文件?我知道我可以一个接一个地做,但鉴于有数以千计,这不是一个选择.

Eri*_*c Y 81

您可以hg mv --after用来表示您已经移动了该文件.

  • 另外`hg mv --after`可以使用通配符,因此如果将大组文件从一个目录移动到另一个目录,则可以使用一个命令处理它们. (5认同)

Mar*_*nen 22

hg addremove如果文件默认情况下100%相似,则会在事后检测重命名,并且可以覆盖相似性阈值-s.

此外,如果使用TortoiseHg,thg guess将弹出一个对话框,您可以使用滑块设置相似性并查看添加和删除文件之间的匹配结果,然后选择要作为重命名记录的对.

例:

C:\>hg init test
C:\>cd test
C:\test>echo >file1
C:\test>echo ONE>file1
C:\test>echo TWO>file2
C:\test>hg ci -Am init
adding file1
adding file2

C:\test>ren file1 file3
C:\test>ren file2 file4
C:\test>hg st
! file1
! file2
? file3
? file4

C:\test>hg addrem
removing file1
removing file2
adding file3
adding file4
recording removal of file1 as rename to file3 (100% similar)
recording removal of file2 as rename to file4 (100% similar)

C:\test>hg status -C   # -C shows file copies.
A file3
  file1                # file3 copied from file1...
A file4
  file2                # file 4 copied from file2...
R file1
R file2
Run Code Online (Sandbox Code Playgroud)


Cat*_*lus 12

使用hg addremove.你不能只是移动文件并期望Mercurial知道这一点 - 如果你正在移动跟踪文件,请使用hg mv.

  • +1.请注意,`hg mv`强制Mercurial跟踪文件的历史记录,而使用`hg addremove`则可以抑制文件移动/重命名的事实. (5认同)
  • @Helgi,@ keykeeper,`hg addremove`会在事后检测到重命名.看我的回答. (4认同)
  • @MarkTolonen:你解释的很好,谢谢。但是,根据我的经验,这种“重新组织”通常意味着对许多重命名的文件进行了修改。 (2认同)
  • 请看一下 Steve Losh 的帖子:[Addremove 可以跟踪重命名,但除非你问得很好,否则不会](http://stevelosh.com/blog/2009/05/what-i-hate-about- mercurial/#addremove-can-track-renames-but-won-t-unless-you-ask-it-really-nicely)。看起来您必须使用显式的`similarity` 选项:`hg addremove --similarity 100` (2认同)