-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add new git-rm command with documentation
This adds a git-rm command which provides convenience similar to git-add, (and a bit more since it takes care of the rm as well if given -f). Like git-add, git-rm expands the given path names through git-ls-files. This means it only acts on files listed in the index. And it does act recursively on directories by default, (no -r needed as in the case of rm itself). When it recurses, it does not remove empty directories that are left behind. Signed-off-by: Junio C Hamano <junkio@cox.net>
- Loading branch information
Carl Worth
authored and
Junio C Hamano
committed
Feb 23, 2006
1 parent
2cf3be1
commit d4a1cab
Showing
5 changed files
with
200 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -84,6 +84,7 @@ git-resolve | |
git-rev-list | ||
git-rev-parse | ||
git-revert | ||
git-rm | ||
git-send-email | ||
git-send-pack | ||
git-sh-setup | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
git-rm(1) | ||
========= | ||
|
||
NAME | ||
---- | ||
git-rm - Remove files from the working tree and from the index. | ||
|
||
SYNOPSIS | ||
-------- | ||
'git-rm' [-f] [-n] [-v] [--] <file>... | ||
|
||
DESCRIPTION | ||
----------- | ||
A convenience wrapper for git-update-index --remove. For those coming | ||
from cvs, git-rm provides an operation similar to "cvs rm" or "cvs | ||
remove". | ||
|
||
|
||
OPTIONS | ||
------- | ||
<file>...:: | ||
Files to remove from the index and optionally, from the | ||
working tree as well. | ||
|
||
-f:: | ||
Remove files from the working tree as well as from the index. | ||
|
||
-n:: | ||
Don't actually remove the file(s), just show if they exist in | ||
the index. | ||
|
||
-v:: | ||
Be verbose. | ||
|
||
--:: | ||
This option can be used to separate command-line options from | ||
the list of files, (useful when filenames might be mistaken | ||
for command-line options). | ||
|
||
|
||
DISCUSSION | ||
---------- | ||
|
||
The list of <file> given to the command is fed to `git-ls-files` | ||
command to list files that are registered in the index and | ||
are not ignored/excluded by `$GIT_DIR/info/exclude` file or | ||
`.gitignore` file in each directory. This means two things: | ||
|
||
. You can put the name of a directory on the command line, and the | ||
command will remove all files in it and its subdirectories (the | ||
directories themselves are never removed from the working tree); | ||
|
||
. Giving the name of a file that is not in the index does not | ||
remove that file. | ||
|
||
|
||
EXAMPLES | ||
-------- | ||
git-rm Documentation/\\*.txt:: | ||
|
||
Removes all `\*.txt` files from the index that are under the | ||
`Documentation` directory and any of its subdirectories. The | ||
files are not removed from the working tree. | ||
+ | ||
Note that the asterisk `\*` is quoted from the shell in this | ||
example; this lets the command include the files from | ||
subdirectories of `Documentation/` directory. | ||
|
||
git-rm -f git-*.sh:: | ||
|
||
Remove all git-*.sh scripts that are in the index. The files | ||
are removed from the index, and (because of the -f option), | ||
from the working tree as well. Because this example lets the | ||
shell expand the asterisk (i.e. you are listing the files | ||
explicitly), it does not remove `subdir/git-foo.sh`. | ||
|
||
|
||
Author | ||
------ | ||
Written by Linus Torvalds <torvalds@osdl.org> | ||
|
||
Documentation | ||
-------------- | ||
Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>. | ||
|
||
GIT | ||
--- | ||
Part of the gitlink:git[7] suite | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
#!/bin/sh | ||
|
||
USAGE='[-f] [-n] [-v] [--] <file>...' | ||
SUBDIRECTORY_OK='Yes' | ||
. git-sh-setup | ||
|
||
index_remove_option=--force-remove | ||
remove_files= | ||
show_only= | ||
verbose= | ||
while : ; do | ||
case "$1" in | ||
-f) | ||
remove_files=true | ||
index_remote_option=--force | ||
;; | ||
-n) | ||
show_only=true | ||
;; | ||
-v) | ||
verbose=--verbose | ||
;; | ||
--) | ||
shift; break | ||
;; | ||
-*) | ||
usage | ||
;; | ||
*) | ||
break | ||
;; | ||
esac | ||
shift | ||
done | ||
|
||
# This is typo-proofing. If some paths match and some do not, we want | ||
# to do nothing. | ||
case "$#" in | ||
0) ;; | ||
*) | ||
git-ls-files --error-unmatch -- "$@" >/dev/null || { | ||
echo >&2 "Maybe you misspelled it?" | ||
exit 1 | ||
} | ||
;; | ||
esac | ||
|
||
files=$( | ||
if test -f "$GIT_DIR/info/exclude" ; then | ||
git-ls-files \ | ||
--exclude-from="$GIT_DIR/info/exclude" \ | ||
--exclude-per-directory=.gitignore -- "$@" | ||
else | ||
git-ls-files \ | ||
--exclude-per-directory=.gitignore -- "$@" | ||
fi | sort | uniq | ||
) | ||
|
||
case "$show_only" in | ||
true) | ||
echo $files | ||
;; | ||
*) | ||
[[ "$remove_files" = "true" ]] && rm -- $files | ||
git-update-index $index_remove_option $verbose $files | ||
;; | ||
esac |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
#!/bin/sh | ||
# | ||
# Copyright (c) 2006 Carl D. Worth | ||
# | ||
|
||
test_description='Test of the various options to git-rm.' | ||
|
||
. ./test-lib.sh | ||
|
||
# Setup some files to be removed | ||
touch foo bar | ||
git-add foo bar | ||
# Need one to test -- | ||
touch -- -q | ||
git update-index --add -- -q | ||
git-commit -m "add foo, bar, and -q" | ||
|
||
test_expect_success \ | ||
'Pre-check that foo is in index before git-rm foo' \ | ||
'git-ls-files --error-unmatch foo' | ||
|
||
test_expect_success \ | ||
'Test that git-rm foo succeeds' \ | ||
'git-rm foo' | ||
|
||
test_expect_failure \ | ||
'Post-check that foo is not in index after git-rm foo' \ | ||
'git-ls-files --error-unmatch foo' | ||
|
||
test_expect_success \ | ||
'Test that "git-rm -f bar" works' \ | ||
'git-rm -f bar' | ||
|
||
test_expect_failure \ | ||
'Post-check that bar no longer exists' \ | ||
'[ -f bar ]' | ||
|
||
test_expect_success \ | ||
'Test that "git-rm -- -q" works to delete a file named -q' \ | ||
'git-rm -- -q' | ||
|
||
test_done |