9

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

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

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

hg status --change REV

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

顺便说一句,我如何查看修订号?

4

5 回答 5

8

尝试

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

获取分支上第一个和最后一个变更集之间的更改(hg status将隐式使用min(branch('your-branch'))并且max(branch('your-branch'))当你给它一个这样的修订范围时)。

既然你要合并,你真的应该看看

$ hg status --rev default:your-branch

查看分支和. _ 这会向您显示已完成的修改,并过滤掉因合并而对分支所做的任何修改。defaultyour-branchdefault

如果您的历史记录如下所示,这是必要的:

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存储库。当他们说“分支”时,他们的意思是“克隆”,但上述内容仍然可以根据您的情况进行调整。所有变更集都将位于default 命名的分支上,但这没关系。

在“分支”存储库的本地克隆中运行以下命令:

$ hg bookmark -r tip mybranch

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

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

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

$ hg bookmark -r tip main

您现在可以运行

$ hg status --rev main:mybranch

查看 和 之间的main变化my-branch。如果你想看看你在分支上做了什么,使用

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

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

于 2012-01-19T16:04:41.320 回答
0

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

于 2012-01-19T18:18:48.347 回答
0

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

$ hg log -b your-branch -G

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

TortoiseHg 2.0 工作台

于 2012-01-20T08:59:00.200 回答
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]
_lf = ! $HG log --rev "branch(\"$1\") and not merge()" --template '{rev}\0' | xargs -0 -I @ hg status -n --change @ | sort -u
于 2016-06-01T09:53:41.883 回答
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

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

于 2017-10-23T11:38:51.643 回答