summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 2dee581)
raw | patch | inline | side by side (parent: 2dee581)
author | Junio C Hamano <junkio@cox.net> | |
Fri, 9 Dec 2005 07:18:41 +0000 (23:18 -0800) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Fri, 9 Dec 2005 07:18:41 +0000 (23:18 -0800) |
Explicit <head> arguments to git-prune replaces, instead of
extends, the list of heads used for reachability analysis by
fsck-objects. By giving a subset of heads by mistake, objects
reachable only from other heads can be removed, resulting in a
corrupted repository.
This commit stops replacing the list of heads, and makes the
command line arguments to add to them instead for safety.
Signed-off-by: Junio C Hamano <junkio@cox.net>
extends, the list of heads used for reachability analysis by
fsck-objects. By giving a subset of heads by mistake, objects
reachable only from other heads can be removed, resulting in a
corrupted repository.
This commit stops replacing the list of heads, and makes the
command line arguments to add to them instead for safety.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Documentation/git-prune.txt | patch | blob | history | |
git-prune.sh | patch | blob | history |
index 05c8d4928e4869f5297cf35146a2c2fb167b9062..f694fcbde809b17dc9fd974eba458dd7805dc426 100644 (file)
DESCRIPTION
-----------
-This runs `git-fsck-objects --unreachable` using the heads
-specified on the command line (or `$GIT_DIR/refs/heads/\*` and
-`$GIT_DIR/refs/tags/\*` if none is specified), and prunes all
-unreachable objects from the object database. In addition, it
+This runs `git-fsck-objects --unreachable` using all the refs
+available in `$GIT_DIR/refs`, optionally with additional set of
+objects specified on the command line, and prunes all
+objects unreachable from any of these head objects from the object database.
+In addition, it
prunes the unpacked objects that are also found in packs by
running `git prune-packed`.
Do not interpret any more arguments as options.
<head>...::
- Instead of keeping objects
+ In addition to objects
reachable from any of our references, keep objects
- reachable from only listed <head>s.
-+
-Note that the explicitly named <head>s are *not* appended to the
-default set of references, but they replace them. In general you
-would want to say `git prune $(git-rev-parse --all) extra1
-extra2` to keep chains of commits leading to extra1, extra2,
-... in addition to what are reachable from your own refs.
-Saying `git prune extra1 extra2` would *lose* objects reachable
-only from the usual refs, which is usually not what you want.
-
+ reachable from listed <head>s.
EXAMPLE
-------
-To prune objects not used by your repository and another that
+To prune objects not used by your repository nor another that
borrows from your repository via its
`.git/objects/info/alternates`:
------------
-$ git prune $(git-rev-parse --all) \
- $(cd ../another && $(git-rev-parse --all))
+$ git prune $(cd ../another && $(git-rev-parse --all))
------------
Author
diff --git a/git-prune.sh b/git-prune.sh
index 1fd8c731cdd3651e3cd3c527915db7a4c4324be0..7e7f0ad56d381dc546f1bc598e41c1d7fa1e3a36 100755 (executable)
--- a/git-prune.sh
+++ b/git-prune.sh
done
sync
-git-fsck-objects --full --cache --unreachable "$@" |
+case "$#" in
+0) git-fsck-objects --full --cache --unreachable ;;
+*) git-fsck-objects --full --cache --unreachable $(git-rev-parse --all) "$@" ;;
+esac |
+
sed -ne '/unreachable /{
s/unreachable [^ ][^ ]* //
s|\(..\)|\1/|p