问题
Is there a command in mercurial that will list all files currently under source control?
I can do a dir /s
to list all files in my folder and subfolders, but I have no idea which have been added to my repository. I have a variety of excluded file types and folders and I want verify that none of them were added before I set them up in my .hgignore file.
回答1:
hg status --all
will list all the files in the tree, with a letter indicating its status: M for modified, C for clean (owned by hg), and I for ignored.
For just ignored files, use hg status -i
. For just files that will be added on the next commit, use hg status -a
. These show only what you need to know and don't require scanning a long file list.
回答2:
You might also check out the hg locate
command. I use it, along with the -I
option when I want to limit the files to a certain directory.
To list all files in your repository:
hg locate
From the repository ("root") directory:
hg locate -I dir/sub_dir/dir_of_interest
The path passed to -I
needs to change depending on the directory in which you run the command. If you run the command from the dir
directory in the example above, you'd need to modify your argument to locate:
hg locate -I sub_dir/dir_of_interest
The list of output files will remain the same, showing each file's full path in the repository.
Try hg help -v locate
for more info.
回答3:
hg manifest
will list only the files in the repository, while hg status --all
will list all the files in the repository's structure and include a marker for which are being tracked and which aren't.
回答4:
Listing Only Ignored Or Added Files
To list only the ignored files, do: hg status -i
.
For just added files, do hg status -a
.
If you don't like typing much, you can shorten these to hg sta -i
and hg sta -a
.
This two uses of status
are more simple than locate
and will give you the specific files states that you are concerned about, so it is significantly less error prone.
More about hg status
To list all files in a mercurial repo do: hg status --all
.
The files will be given a prefix before them when they are listed:
M = modified
A = added
R = removed
C = clean
! = missing (deleted by non-hg command, but still tracked)
? = not tracked
I = ignored
If you want to list only the files in a folder, you can provide a path:
hg st --all MyFolder
– all files in MyFolderhg sta -i MyFolder
– just ignored files in MyFolder.
As well as the -i
for "Ignored" and -a
for "Added", other flags are available to list only the files having a particular status.
Getting help
Read the other very useful answer here for a comprehensive explanation of the status
command. It has down votes because the author has tried to show that you can discover all of the above by asking Mercurial about the status
command like this:
hg help status
You can ask Mercurial to tell you about any of it's commands like this. And if you want a list of Mercurial's commands, then type hg help
.
回答5:
C:\>hg help -v status hg status [OPTION]... [FILE]... aliases: st show changed files in the working directory Show status of files in the repository. If names are given, only files that match are shown. Files that are clean or ignored or the source of a copy/move operation, are not listed unless -c/--clean, -i/--ignored, -C/--copies or -A/--all are given. Unless options described with "show only ..." are given, the options -mardu are used. Option -q/--quiet hides untracked (unknown and ignored) files unless explicitly requested with -u/--unknown or -i/--ignored. NOTE: status may appear to disagree with diff if permissions have changed or a merge has occurred. The standard diff format does not report permission changes and diff only reports changes relative to one merge parent. If one revision is given, it is used as the base revision. If two revisions are given, the differences between them are shown. The --change option can also be used as a shortcut to list the changed files of a revision from its first parent. The codes used to show the status of files are: M = modified A = added R = removed C = clean ! = missing (deleted by non-hg command, but still tracked) ? = not tracked I = ignored = origin of the previous file listed as A (added) options: -A --all show status of all files -m --modified show only modified files -a --added show only added files -r --removed show only removed files -d --deleted show only deleted (but tracked) files -c --clean show only files without changes -u --unknown show only unknown (not tracked) files -i --ignored show only ignored files -n --no-status hide status prefix -C --copies show source of copied files -0 --print0 end filenames with NUL, for use with xargs --rev show difference from revision --change list the changed files of a revision -I --include include names matching the given patterns -X --exclude exclude names matching the given patterns global options: -R --repository repository root directory or name of overlay bundle file --cwd change working directory -y --noninteractive do not prompt, assume 'yes' for any required answers -q --quiet suppress output -v --verbose enable additional output --config set/override config option (use 'section.name=value') --debug enable debugging output --debugger start debugger --encoding set the charset encoding (default: cp1252) --encodingmode set the charset encoding mode (default: strict) --traceback always print a traceback on exception --time time how long the command takes --profile print command execution profile --version output version information and exit -h --help display help and exit
来源:https://stackoverflow.com/questions/3000095/how-to-list-all-files-in-a-repository-in-mercurial-hg