8

直到最近,我们一直在为我们网络工作室的所有项目使用 SVN,并且在 Subversive 和 TortoiseSVN 等几个客户端中存在一个非常方便的功能,可以提取在某个版本中已更改的所有文件。

有没有办法在 Mercurial 中做到这一点?我不在乎它是通过 GUI 还是命令行完成的,在某个变更集中拥有一组已更改的文件非常方便。

PS我一定是第一次写错了。我需要的不仅仅是文件列表,将所有文件导出到其他文件夹会很棒。

4

4 回答 4

11

基于 Jerome 的回答,这将为您提供在修订版 4 中更改的文件的副本:

hg archive --type files --rev 4 -I $(hg log -r 4 --template {files} | sed 's/ / -I /g') ~/changedfiles

这会将所有更改为修订版 4 的文件放入主目录中名为 changedfiles 的新目录中。

如果您将其更改为:

hg archive --type zip --rev 4 -I $(hg log -r 4 --template {files} | sed 's/ / -I /g') ~/changedfiles.zip

然后它们出现在一个 zip 存档中。

值得注意的是,仅当文件名中没有空格时才有效。如果您犯了这个错误,那么我们将需要使用它hg status --print0 -r revision -r parent-of-revision,但希望这不是必需的。

另请注意,在我们的示例中,修订号“4”出现了两次。整个事情可以很容易地包装在一个 shell 脚本中,并且会被参数化,所以你不必记住在两个地方都改变它。

于 2009-12-18T19:41:41.667 回答
7

这为您提供了修订版 4 中已修改文件的列表:

hg log -r 4 --template {files}

更新:如果您想每行有一个文件,您可以使用Hg book 中描述的样式

于 2009-12-18T09:36:36.017 回答
1

根据您的 ned,有两个命令:

  1. 要获取与特定修订相关的更改,您可以使用hg export

    hg export -r 23
    

这将生成所有更改的差异(实际上是格式化的补丁,可以应用)

  1. 要获取所有受影响文件的名称,您可以使用hg log

    hg log -r 23 -v
    

这将打印修订的元信息,以及受影响的文件的名称。

于 2009-12-18T09:20:51.270 回答
0

此命令输出指定修订版中所有更改文件的名称:

hg export revision_num | grep ^diff | cut -f 6 -d ' '
于 2009-12-18T09:14:12.283 回答