14

因此,在 Subversion 中,当我执行操作时,svn up我会得到一个添加、修改、删除和冲突的文件列表。

当我这样做时,hg pull它只hg up -v显示一个列表:getting file.ext但我无法知道该文件是新文件还是已经存在。有没有办法让 Mercurial 显示关于文件是否被添加、修改或删除的相同类型的元数据?

Mercurial 是否提供任何能力来满足我的要求?

4

4 回答 4

19

Omni 有你的答案,我投了赞成票,但只是为了显示所有选项:

拉动前

  • hg incoming # 显示您将获得的变更集
  • hg incoming --verbose # 显示您将获得的变更集,包括每个变更集的文件列表
  • hg incoming --patch # 显示您将获得的所有变更集的完整差异

拉取后(但不更新):

  • hg log -r .:tip # 显示你得到的变更集
  • hg log --verbose -r .:tip # 显示您获得的变更集,包括每个变更集的文件列表
  • hg log --patch -r .:trip # 显示你得到的所有变更集的完整差异
于 2010-07-18T23:55:53.590 回答
17

使用 status 命令列出工作副本与其父版本之间或任何两个版本之间的文件状态更改。它为您提供如下输出:

$ hg status --rev .:tip
M hgext/keyword.py
M mercurial/cmdutil.py
M mercurial/commands.py
M mercurial/context.py
M mercurial/patch.py
A tests/test-encoding-align
A tests/test-encoding-align.out

对应于此更新:

$ hg update -v
resolving manifests
getting hgext/keyword.py
getting mercurial/cmdutil.py
getting mercurial/commands.py
getting mercurial/context.py
getting mercurial/patch.py
getting tests/test-encoding-align
getting tests/test-encoding-align.out
7 files updated, 0 files merged, 0 files removed, 0 files unresolved

编辑:您可以创建一个preupdate挂钩以始终获取此信息作为更新的一部分。我碰巧现在在 Windows 上,这个钩子在这里有效:

[hooks]
preupdate = hg status --rev .:%HG_PARENT1%

在类 Unix 系统上替换%HG_PARENT1%为。$HG_PARENT1这应该使 Mercurial 体验更像 Subversion :-)

于 2010-07-20T11:15:09.727 回答
6

hg incoming --stat命令执行您所要求的操作。此外,如果您要更新到新版本,您可以这样做hg diff --git -r <rev>,它会给您一个差异,显示哪些文件是新的。

于 2010-07-18T23:13:00.363 回答
1

您可以使用hg incoming捆绑包,将 Martin 的答案应用于您尚未实际提取的更改。

> cd myrepo
# Get the latest revision in my copy
> hg tip
changeset:   17:5005ce2dc418
.
.
.
# Get a bundle file of changes, but don't put them in myrepo yet
> hg incoming --bundle changes.bundle
# Overlay the bundle on myrepo and do hg status as if I've already pulled
> hg -R changes.bundle status --rev 17:tip
A addedfile
M modifiedfile
.
.
.
# Changes are good! Pull from bundle
hg pull changes.bundle
于 2010-09-15T13:10:19.890 回答