From: Pavel Roskin <proski@gnu.org>
To: git@vger.kernel.org
Subject: [PATCH] Add git-clean command
Date: Mon, 03 Apr 2006 18:18:41 -0400 [thread overview]
Message-ID: <20060403221841.25097.18242.stgit@dv.roinet.com> (raw)
This command removes untracked files from the working tree. This
implementation is based on cg-clean with some simplifications. The
documentation is included.
Signed-off-by: Pavel Roskin <proski@gnu.org>
---
.gitignore | 1 +
Documentation/git-clean.txt | 50 +++++++++++++++++++++++++++++++
Makefile | 2 +
git-clean.sh | 70 +++++++++++++++++++++++++++++++++++++++++++
4 files changed, 122 insertions(+), 1 deletions(-)
diff --git a/.gitignore b/.gitignore
index 75891c3..b5959d6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,6 +15,7 @@ git-checkout
git-checkout-index
git-cherry
git-cherry-pick
+git-clean
git-clone
git-clone-pack
git-commit
diff --git a/Documentation/git-clean.txt b/Documentation/git-clean.txt
new file mode 100644
index 0000000..0c671e1
--- /dev/null
+++ b/Documentation/git-clean.txt
@@ -0,0 +1,50 @@
+git-clean(1)
+============
+
+NAME
+----
+git-clean - Remove untracked files from the working tree
+
+SYNOPSIS
+--------
+[verse]
+'git-clean' [-d | -D] [-n] [-q] [-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.
+
+-D::
+ Same as above, but use chmod first. This is useful for
+ read-only directories used in some testsuites.
+
+-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.
+
+
+Author
+------
+Written by Pavel Roskin <proski@gnu.org>
+
+
+GIT
+---
+Part of the gitlink:git[7] suite
diff --git a/Makefile b/Makefile
index c79d646..221e59a 100644
--- a/Makefile
+++ b/Makefile
@@ -114,7 +114,7 @@ ### --- END CONFIGURATION SECTION ---
SCRIPT_SH = \
git-add.sh git-bisect.sh git-branch.sh git-checkout.sh \
- git-cherry.sh git-clone.sh git-commit.sh \
+ git-cherry.sh git-clean.sh git-clone.sh git-commit.sh \
git-count-objects.sh git-diff.sh git-fetch.sh \
git-format-patch.sh git-log.sh git-ls-remote.sh \
git-merge-one-file.sh git-parse-remote.sh \
diff --git a/git-clean.sh b/git-clean.sh
new file mode 100755
index 0000000..8470559
--- /dev/null
+++ b/git-clean.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+#
+# Copyright (c) 2005-2006 Pavel Roskin
+#
+
+USAGE="[-d | -D] [-n] [-q] [-x]"
+LONG_USAGE='Clean untracked files from the working directory
+ -d remove directories as well
+ -D remove directories, try harder (chmod first)
+ -n don'\''t remove anything, just show what would be done
+ -q be quiet, only report errors
+ -x remove ignored files as well'
+SUBDIRECTORY_OK=Yes
+. git-sh-setup
+
+noexclude=
+cleandir=
+cleandirhard=
+quiet=
+rmf="rm -f"
+rmrf="rm -rf"
+rm_refuse="echo Not removing"
+echo1="echo"
+
+for arg in "$@"; do
+ if [ "$arg" = "-d" ]; then
+ cleandir=1
+ elif [ "$arg" = "-D" ]; then
+ cleandir=1
+ cleandirhard=1
+ elif [ "$arg" = "-n" ]; then
+ quiet=1
+ rmf="echo Would remove"
+ rmrf="echo Would remove"
+ rm_refuse="echo Would not remove"
+ echo1=":"
+ elif [ "$arg" = "-q" ]; then
+ quiet=1
+ elif [ "$arg" = "-x" ]; then
+ noexclude=1
+ else
+ echo >&2 "Unknown option: \"$arg\""
+ exit 1
+ fi
+done
+
+excl1=
+excl2=
+if [ -z "$noexclude" ]; then
+ excl1="--exclude-per-directory=.gitignore"
+ if [ -f "$GIT_DIR/info/exclude" ]; then
+ excl2="--exclude-from=$GIT_DIR/info/exclude"
+ fi
+fi
+
+git-ls-files --others --directory "$excl1" "$excl2" |
+while read -r file; do
+ if [ -d "$file" -a ! -L "$file" ]; then
+ if [ -z "$cleandir" ]; then
+ $rm_refuse "$file"
+ continue
+ fi
+ $echo1 "Removing $file"
+ [ "$cleandirhard" ] && chmod -R 700 "$file"
+ $rmrf "$file"
+ else
+ $echo1 "Removing $file"
+ $rmf "$file"
+ fi
+done
next reply other threads:[~2006-04-03 22:18 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-04-03 22:18 Pavel Roskin [this message]
2006-04-04 0:06 ` [PATCH] Add git-clean command Junio C Hamano
2006-04-04 10:58 ` Sam Ravnborg
2006-04-04 15:52 ` Pavel Roskin
2006-04-05 16:02 ` unchecked uses of strdup Jim Meyering
2006-04-06 14:11 ` Alex Riesen
2006-04-05 6:00 ` [PATCH] Add git-clean command Pavel Roskin
2006-04-04 8:20 ` Martin Waitz
2006-04-04 9:08 ` Junio C Hamano
2006-04-04 9:17 ` Alex Riesen
2006-04-04 15:32 ` Pavel Roskin
-- strict thread matches above, loose matches on Subject: below --
2006-04-05 6:00 Pavel Roskin
2006-04-05 6:25 ` Jakub Narebski
2006-04-03 21:59 Pavel Roskin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20060403221841.25097.18242.stgit@dv.roinet.com \
--to=proski@gnu.org \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.