如何列出mercurial存储库中已更改的所有文件,仅限于草稿更改集?

时间:2014-01-17 18:45:29

标签: mercurial dvcs tortoisehg

mercurial(或TortoiseHg)有办法执行以下操作吗?

  1. 获取只有草稿变更集(草稿阶段,即未推送和公开)的列表
  2. 获取该变更集子集中已更改的所有文件的列表。
  3. 作为一个额外的好处,将它们吐出到输出文件(如果通过命令行完成)
  4. 我认为我可以查看外发更改集,然后以某种方式手动浏览每个更改集,但必须有一种方法可以通过命令行在单个命令中执行此操作。


    更新

    我想要的另一个要求是显示文件的更改方式。如果您进入TortoiseHg并单击按钮(在同步工具栏中),并使用工具提示过滤传出变更集到远程存储库,您将获得变更集草稿的列表。单击每个变更集会列出传出文件,并且有一个 + 表示添加, x 表示删除,并且没有任何符号表示修改。我希望能够通过命令行获取此信息。

    相关版本信息:

    TortoiseHg 2.4.1(使用以下支持软件)
    Mercurial 2.2.2
    Python 2.6.6
    Qt 4.7.4

    我还应该提到我在Windows(7x64)上以防止使用* nix命令行实用程序来管道命令的答案。我总是可以得到unxutils或cygwin等,但此时我宁愿不这样做(除非没有其他选择)。

2 个答案:

答案 0 :(得分:4)

我找到了一种方法, 除了我在问题中添加的另一项要求 (请参阅相关编辑)。

基于this stackoverflow答案,我可以列出所有在传出的变更集中已更改的文件(另一种说法是他们处于草稿阶段):

  • 创建一个文件(我称之为 c:\ temp \ out-style.txt
  • 在文件中输入以下内容:
  

changeset =“{files}”
  file =“{file} \ n”

  • 从命令行执行以下命令:
  

hg -q outgoing --style C:\ temp \ out-style.txt | sort -u

我正在使用powershell执行此操作,因此我执行了以下操作(基于我的调查结果here)将输出通过管道传输到名为 c:\ temp \ outgoing-changes.txt <的文件中/ em>(在粗体中添加):

  

hg -q outgoing --style C:\ temp \ out-style.txt | sort -u | Out-File C:\ Temp \ outgoing-changes.txt -encoding UTF8

所以现在缺少的是 每个文件的更改(添加,删除,修改)。这是我想知道的信息。

答案 1 :(得分:1)

两种略有不同的解决方案

Jason的改进版本,状态指示符

我太懒了,不能在输出中使用过多的换行符,sort -u无论如何都会杀掉它,所以

更改了样式文件(在关键字之前添加了状态和\ n,因为{file_ *}关键字输出以空格分隔的列表,与{file}相反)

changeset = '{file_mods}\n{file_dels}\n{file_adds}'
file_mod = '\nM {file_mod}'
file_add = '\nA {file_add}'
file_del = '\nD {file_del}'

使用过的hg log -r“outgoing(PATH)”(可能会有所改进,可能会以某种方式放在[revsetalias]中)

示例输出

M 404.php


M functions.php
M readme.txt
M screenshot.png
M style.css


M readme.txt
M sidebar.php
M style.css


M comments.php
M functions.php
M header.php
M readme.txt
M sidebar.php
M style.css


M footer.php
M functions.php
M header.php
M search.php
M style.css


A readme.txt
M functions.php


M functions.php




A 404.php
A archive.php
A archives.php
A comments.php
A footer.php
A functions.php
A header.php
A html5.js
A image.php
A index.php
A license.txt
A links.php
A page.php
A screenshot.png
A search.php
A sidebar.php
A single.php
A style.css

基于状态的解决方案

如果是单一范围的传出(推送仅影响一个分支),则可以定义传出的第一个和最后一个变更集(Windows的手工): hg log -r "(min(outgoing()))"(以下简称A) hg log -r "(max(outgoing()))"(以下称B,可能总是提示)

带有两个指定修订版的

hg status将显示所有更改及其各自的状态

hg st --rev A --rev B

对于来自解决方案1和相同范围的相同repo

hg st --rev 1 --rev 7
M 404.php
M comments.php
M footer.php
M functions.php
M header.php
M screenshot.png
M search.php
M sidebar.php
M style.css
A readme.txt

如果工作目录parent是传出范围内的最新变更集(提示和WD-parent是提示是偶然的情况),可以跳过st中的secong修订版(默认情况下hg status将与工作目录进行比较)状态变为hg status --rev A