创建一个新的分支,做了很多更改,如何查看文件列表更改?

时间:2012-01-19 15:56:09

标签: mercurial branch dvcs kiln

因此创建了一个新的分支,我们对代码库进行了一些重大更改。

现在我们要合并,但在此之前我想获得分支中已更改的所有文件的列表。

如何获取文件列表?我试过了:

hg status --change REV

但我不确定这是否是我想要的,因为我希望在此分支中更改所有文件而不是分支中的特定修订。

BTW,如何查看修订号?

5 个答案:

答案 0 :(得分:8)

尝试

$ hg status --rev "branch('your-branch')"

获取分支上第一个和最后一个变更集之间的更改(hg status将隐式使用min(branch('your-branch'))max(branch('your-branch')),当您为其提供一系列此类修订时。< / p>

由于你要合并,你应该真正看看

$ hg status --rev default:your-branch

查看 default分支与your-branch之间的更改内容。这将向您显示已完成的修改,并筛选出由于与default合并而在分支上完成的任何修改。

如果你的历史记录是这样的话,这是必要的:

your-branch:      x --- o --- o --- o --- o --- o --- y
                 /           /           /
default:  o --- a --- o --- b --- o --- c --- o --- o --- d

您已经将default合并到您的分支机构中几次。将default合并到您的分支中是正常的,因为您希望定期整合来自该分支的最新内容,以避免分支相互偏离太远。

但如果default上引入了新文件,之后合并到B,那么您并不想在hg status输出中看到该文件。如果你这样做,你会看到它

$ hg status --rev a:y

因为该文件不在a中,但存在于y中。如果你这样做

$ hg status --rev d:y

然后你不会在输出中看到该文件,假设它存在于两个脑袋中。


您在评论中写道,您正在使用 Kiln 存储库。他们的意思是&#34;克隆&#34;当他们说&#34;分支&#34;,但上述仍然可以适应你的情况。所有更改集都位于default named branch,但没关系。

在&#34;分支&#34;的本地克隆中运行以下命令存储库:

$ hg bookmark -r tip mybranch

这标志着当前的提示是mybranch的头部。然后从主存储库中提取所有变更集:

$ hg pull https://you.kilnhg.com/Repo/public/Group/Main

然后将 new 提示标记为主存储库的提示:

$ hg bookmark -r tip main

您现在可以运行

$ hg status --rev main:mybranch

查看mainmy-branch之间的更改。如果你想看看你在分支上做了什么,使用

$ hg status --rev "::mybranch - ::main"

::mybranch部分将选择作为mybranch祖先的变更集 - 这是您的所有新作品,加上您分支之前的旧历史记录。我们使用- ::main删除旧历史记录。在旧版本的Mercurial中,您可以使用hg log -r -r mybranch:0 -P main

答案 1 :(得分:0)

在这种情况下,我更喜欢从新签出的repo副本进行测试合并。这样做的好处是我可以看到合并会产生多少冲突,并且我可以保留合并结果,因为我是在自己的副本中完成的。

答案 2 :(得分:0)

要查看修订号,请启用graphlog extension并运行:

$ hg log -b your-branch -G

这为您提供了一个很好的ASCII图形。这可以很方便地快速查看图表,但我建议将TortoiseHg用于跨平台日志查看器:

TortoiseHg 2.0 workbench

答案 3 :(得分:0)

我不得不将默认分支合并到我的分支中以获得一些修复,现在上面的命令也显示由于合并而更改的文件(这些文件在默认分支中再次合并后更改)。

因此,为了获得正确的文件我使用这样的东西:

hg log --rev "branch('my-branch') and not merge()" --template '{files}\n' | sed -e 's/ /\n/g' | sort -u

如果文件名中有空格,可以这样做:

hg log --rev "branch('my-branch') and not merge()" --template '{rev}\0' | xargs -0 -I @ hg status -n --change @ | sort -u

要回答您的上一个问题,可以通过以下方式显示修订:

hg log --rev "branch('my-branch') and not merge()" --template '{rev}\n'

提示:我为此使用了hg-alias:

[alias]
_lf = ! $HG log --rev "branch(\"$1\") and not merge()" --template '{rev}\0' | xargs -0 -I @ hg status -n --change @ | sort -u

答案 4 :(得分:0)

使用 mercurial ,如果您想获取当前分支中更改的所有文件的列表(更改集的更改已完成),您可以使用以下命令:

hg log --branch $(hg branch) --stat | grep '|' | awk -F\  '{printf ("%s\n", $1)}' | sort -u

示例结果:

api/tests/test_my_app.py
docker/run.sh
api/my_app.py

命令说明:

hg log --branch $(hg branch) --stat

显示整个存储库或文件的修订历史记录,并输出diffstat样式的更改摘要

hg branch

显示当前分支名称

grep '|'

搜索文本模式,在这种情况下,它是“|”

awk -F\  '{printf ("%s\n", $1)}'

空格分隔符表示记录中的每个字段,并在新行中打印每个字段

sort -u

对所有打印行进行排序并删除重复项