简体   繁体   中英

What files will be changed vs added when I do an hg pull and hg update

So in Subversion when I do an svn up I get a list of files that were added, modified, deleted, and conflicted.

When I do an hg pull then hg up -v it just displays a list of: getting file.ext but I have no way of know if that file is new or already existed. Is there a way to have Mercurial display the same sort of meta about if the file was added, modified, or deleted?

Does Mercurial offer any ability to do what I am asking?

Omni has your answer, and I voted for it, but just to show all the options:

Before pulling

  • hg incoming # shows the changesets you'll get
  • hg incoming --verbose # shows the changesets you'll get including a file list for each
  • hg incoming --patch # shows the full diffs of all the changesets you'll be getting

After pulling (but not updating):

  • hg log -r .:tip # shows the changesets you got
  • hg log --verbose -r .:tip # shows the changesets you got including a file list for each
  • hg log --patch -r .:trip # shows the full diffs of all the changesets you got

Use the status command to list changes in file status between the working copy and its parent revision or between any two revisions . It gives you output like this:

$ 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

which corresponds to this update:

$ 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

Edit: You can create a preupdate hook to always get this information as part of your updates. I happen to be on Windows right now, and here this hook works:

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

Replace %HG_PARENT1% with $HG_PARENT1 on Unix-like systems. This should make the Mercurial experience even more Subversion-like :-)

The hg incoming --stat command does something like what you're asking. Also, if you're updating to a new revision, you can do hg diff --git -r <rev> and it will give you a diff that shows which files are new.

You can use hg incoming with bundles, to apply Martin's answer to changes you haven't actually pulled yet.

> 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM