-
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.
This command removes untracked files from the working tree. This implementation is based on cg-clean with some simplifications. The documentation is included. [jc: with trivial documentation fix, noticed by Jakub Narebski] Signed-off-by: Pavel Roskin <proski@gnu.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
- Loading branch information
Pavel Roskin
authored and
Junio C Hamano
committed
Apr 5, 2006
1 parent
12d81ce
commit c3b831b
Showing
4 changed files
with
132 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
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,50 @@ | ||
git-clean(1) | ||
============ | ||
|
||
NAME | ||
---- | ||
git-clean - Remove untracked files from the working tree | ||
|
||
SYNOPSIS | ||
-------- | ||
[verse] | ||
'git-clean' [-d] [-n] [-q] [-x | -X] | ||
|
||
DESCRIPTION | ||
----------- | ||
Removes files unknown to git. This allows to clean the working tree | ||
from files that are not under version control. If the '-x' option is | ||
specified, ignored files are also removed, allowing to remove all | ||
build products. | ||
|
||
OPTIONS | ||
------- | ||
-d:: | ||
Remove untracked directories in addition to untracked files. | ||
|
||
-n:: | ||
Don't actually remove anything, just show what would be done. | ||
|
||
-q:: | ||
Be quiet, only report errors, but not the files that are | ||
successfully removed. | ||
|
||
-x:: | ||
Don't use the ignore rules. This allows removing all untracked | ||
files, including build products. This can be used (possibly in | ||
conjunction with gitlink:git-reset[1]) to create a pristine | ||
working directory to test a clean build. | ||
|
||
-X:: | ||
Remove only files ignored by git. This may be useful to rebuild | ||
everything from scratch, but keep manually created files. | ||
|
||
|
||
Author | ||
------ | ||
Written by Pavel Roskin <proski@gnu.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,80 @@ | ||
#!/bin/sh | ||
# | ||
# Copyright (c) 2005-2006 Pavel Roskin | ||
# | ||
|
||
USAGE="[-d] [-n] [-q] [-x | -X]" | ||
LONG_USAGE='Clean untracked files from the working directory | ||
-d remove directories as well | ||
-n don'\''t remove anything, just show what would be done | ||
-q be quiet, only report errors | ||
-x remove ignored files as well | ||
-X remove only ignored files as well' | ||
SUBDIRECTORY_OK=Yes | ||
. git-sh-setup | ||
|
||
ignored= | ||
ignoredonly= | ||
cleandir= | ||
quiet= | ||
rmf="rm -f" | ||
rmrf="rm -rf" | ||
rm_refuse="echo Not removing" | ||
echo1="echo" | ||
|
||
while case "$#" in 0) break ;; esac | ||
do | ||
case "$1" in | ||
-d) | ||
cleandir=1 | ||
;; | ||
-n) | ||
quiet=1 | ||
rmf="echo Would remove" | ||
rmrf="echo Would remove" | ||
rm_refuse="echo Would not remove" | ||
echo1=":" | ||
;; | ||
-q) | ||
quiet=1 | ||
;; | ||
-x) | ||
ignored=1 | ||
;; | ||
-X) | ||
ignoredonly=1 | ||
;; | ||
*) | ||
usage | ||
esac | ||
shift | ||
done | ||
|
||
case "$ignored,$ignoredonly" in | ||
1,1) usage;; | ||
esac | ||
|
||
if [ -z "$ignored" ]; then | ||
excl="--exclude-per-directory=.gitignore" | ||
if [ -f "$GIT_DIR/info/exclude" ]; then | ||
excl_info="--exclude-from=$GIT_DIR/info/exclude" | ||
fi | ||
if [ "$ignoredonly" ]; then | ||
excl="$excl --ignored" | ||
fi | ||
fi | ||
|
||
git-ls-files --others --directory $excl ${excl_info:+"$excl_info"} | | ||
while read -r file; do | ||
if [ -d "$file" -a ! -L "$file" ]; then | ||
if [ -z "$cleandir" ]; then | ||
$rm_refuse "$file" | ||
continue | ||
fi | ||
$echo1 "Removing $file" | ||
$rmrf "$file" | ||
else | ||
$echo1 "Removing $file" | ||
$rmf "$file" | ||
fi | ||
done |