直到最近,我们一直在为我们网络工作室的所有项目使用 SVN,并且在 Subversive 和 TortoiseSVN 等几个客户端中存在一个非常方便的功能,可以提取在某个版本中已更改的所有文件。
有没有办法在 Mercurial 中做到这一点?我不在乎它是通过 GUI 还是命令行完成的,在某个变更集中拥有一组已更改的文件非常方便。
PS我一定是第一次写错了。我需要的不仅仅是文件列表,将所有文件导出到其他文件夹会很棒。
直到最近,我们一直在为我们网络工作室的所有项目使用 SVN,并且在 Subversive 和 TortoiseSVN 等几个客户端中存在一个非常方便的功能,可以提取在某个版本中已更改的所有文件。
有没有办法在 Mercurial 中做到这一点?我不在乎它是通过 GUI 还是命令行完成的,在某个变更集中拥有一组已更改的文件非常方便。
PS我一定是第一次写错了。我需要的不仅仅是文件列表,将所有文件导出到其他文件夹会很棒。
基于 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 脚本中,并且会被参数化,所以你不必记住在两个地方都改变它。
根据您的 ned,有两个命令:
要获取与特定修订相关的更改,您可以使用hg export
:
hg export -r 23
这将生成所有更改的差异(实际上是格式化的补丁,可以应用)
要获取所有受影响文件的名称,您可以使用hg log
:
hg log -r 23 -v
这将打印修订的元信息,以及受影响的文件的名称。
此命令输出指定修订版中所有更改文件的名称:
hg export revision_num | grep ^diff | cut -f 6 -d ' '