Go to file
Jeff King ea56c4e02f refs.c: drop curate_packed_refs
When we delete a ref, we have to rewrite the entire
packed-refs file. We take this opportunity to "curate" the
packed-refs file and drop any entries that are crufty or
broken.

Dropping broken entries (e.g., with bogus names, or ones
that point to missing objects) is actively a bad idea, as it
means that we lose any notion that the data was there in the
first place. Aside from the general hackiness that we might
lose any information about ref "foo" while deleting an
unrelated ref "bar", this may seriously hamper any attempts
by the user at recovering from the corruption in "foo".

They will lose the sha1 and name of "foo"; the exact pointer
may still be useful even if they recover missing objects
from a different copy of the repository. But worse, once the
ref is gone, there is no trace of the corruption. A
follow-up "git prune" may delete objects, even though it
would otherwise bail when seeing corruption.

We could just drop the "broken" bits from
curate_packed_refs, and continue to drop the "crufty" bits:
refs whose loose counterpart exists in the filesystem. This
is not wrong to do, and it does have the advantage that we
may write out a slightly smaller packed-refs file. But it
has two disadvantages:

  1. It is a potential source of races or mistakes with
     respect to these refs that are otherwise unrelated to
     the operation. To my knowledge, there aren't any active
     problems in this area, but it seems like an unnecessary
     risk.

  2. We have to spend time looking up the matching loose
     refs for every item in the packed-refs file. If you
     have a large number of packed refs that do not change,
     that outweighs the benefit from writing out a smaller
     packed-refs file (it doesn't get smaller, and you do a
     bunch of directory traversal to find that out).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-03-20 12:41:41 -07:00
Documentation refs: introduce a "ref paranoia" flag 2015-03-20 12:40:49 -07:00
block-sha1
builtin repack: turn on "ref paranoia" when doing a destructive repack 2015-03-20 12:41:38 -07:00
compat Merge branch 'dm/compat-s-ifmt-for-zos' 2014-12-22 12:27:16 -08:00
contrib Merge branch 'av/wincred-with-at-in-username-fix' into maint 2015-03-05 13:13:04 -08:00
ewah Merge branch 'jk/pack-bitmap' into maint 2015-03-05 13:13:02 -08:00
git-gui
gitk-git Merge git://ozlabs.org/~paulus/gitk 2014-10-30 10:07:33 -07:00
gitweb gitweb: hack around CGI's list-context param() handling 2014-11-18 11:23:10 -08:00
mergetools mergetools: stop setting $status in merge_cmd() 2014-11-21 11:27:53 -08:00
perl Merge branch 'ew/svn-maint-fixes' into maint 2015-03-06 14:57:55 -08:00
po l10n: ca.po: Fix trailing whitespace 2015-01-30 15:02:34 -07:00
ppc
t refs.c: drop curate_packed_refs 2015-03-20 12:41:41 -07:00
templates pre-push.sample: remove unnecessary and misleading IFS=' ' 2014-12-22 10:27:42 -08:00
vcs-svn
xdiff
.gitattributes
.gitignore
.mailmap
COPYING
GIT-VERSION-GEN Git 2.3.3 2015-03-13 22:57:25 -07:00
INSTALL git-imap-send: use libcurl for implementation 2014-11-10 09:17:27 -08:00
LGPL-2.1
Makefile Makefile: handle broken curl version number in version check 2015-02-03 18:30:24 -08:00
README
RelNotes Git 2.3.3 2015-03-13 22:57:25 -07:00
abspath.c
aclocal.m4
advice.c
advice.h
alias.c
alloc.c
archive-tar.c
archive-zip.c
archive.c tree.c: update read_tree_recursive callback to pass strbuf as base 2014-12-01 11:32:29 -08:00
archive.h
argv-array.c
argv-array.h
attr.c
attr.h
base85.c
bisect.c Merge branch 'jc/merge-bases' 2015-01-07 12:55:05 -08:00
bisect.h
blob.c
blob.h
branch.c
branch.h
builtin.h
bulk-checkin.c
bulk-checkin.h
bundle.c bundle: split out ref writing from bundle_create 2014-10-30 14:52:45 -07:00
bundle.h
cache-tree.c Merge branch 'jk/cache-tree-protect-from-broken-libgit2' 2014-11-06 10:51:35 -08:00
cache-tree.h
cache.h refs: introduce a "ref paranoia" flag 2015-03-20 12:40:49 -07:00
check-builtins.sh
check-racy.c
check_bindir
color.c parse_color: fix return value for numeric color values 0-8 2015-01-20 15:56:03 -08:00
color.h parse_color: recognize "no$foo" to clear the $foo attribute 2014-11-20 12:42:55 -08:00
column.c use child_process_init() to initialize struct child_process variables 2014-10-28 14:56:17 -07:00
column.h
combine-diff.c
command-list.txt
commit-slab.h
commit.c Merge branch 'jc/merge-bases' 2015-01-07 12:55:05 -08:00
commit.h Merge branch 'jc/merge-bases' 2015-01-07 12:55:05 -08:00
config.c Merge branch 'jk/config-no-ungetc-eof' into maint 2015-03-05 13:13:00 -08:00
config.mak.in
config.mak.uname configure.ac: check for clock_gettime and CLOCK_MONOTONIC 2015-01-09 15:33:39 -08:00
configure.ac configure.ac: check for HMAC_CTX_cleanup 2015-01-09 15:33:57 -08:00
connect.c Merge branch 'jk/daemon-interpolate' into maint 2015-03-13 22:55:59 -07:00
connect.h
connected.c
connected.h
convert.c
convert.h
copy.c
credential-cache--daemon.c
credential-cache.c
credential-store.c
credential.c Merge branch 'jk/credential-quit' 2014-12-22 12:27:20 -08:00
credential.h credential: let helpers tell us to quit 2014-12-04 10:11:12 -08:00
csum-file.c
csum-file.h Merge branch 'jk/pack-bitmap' 2014-12-12 14:31:42 -08:00
ctype.c kwset: use unsigned char to store values with high-bit set 2015-03-02 12:32:24 -08:00
daemon.c Merge branch 'rs/daemon-interpolate' into maint 2015-03-13 22:56:01 -07:00
date.c Merge branch 'jk/approxidate-avoid-y-d-m-over-future-dates' into maint 2015-01-12 14:01:18 -08:00
decorate.c
decorate.h
delta.h
diff-delta.c
diff-lib.c
diff-no-index.c
diff.c Merge branch 'mk/diff-shortstat-dirstat-fix' into maint 2015-03-13 22:56:04 -07:00
diff.h
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c Merge branch 'jk/diffcore-rename-duplicate' into maint 2015-03-13 22:56:08 -07:00
diffcore.h
dir.c
dir.h
editor.c
entry.c
environment.c refs: introduce a "ref paranoia" flag 2015-03-20 12:40:49 -07:00
exec_cmd.c Merge branch 'jc/exec-cmd-system-path-leak-fix' 2014-12-22 12:27:01 -08:00
exec_cmd.h system_path(): always return free'able memory to the caller 2014-11-30 16:39:47 -08:00
fast-import.c Merge branch 'jk/fast-import-die-nicely-fix' into maint 2015-03-05 13:13:13 -08:00
fetch-pack.c
fetch-pack.h
fmt-merge-msg.h
fsck.c Merge branch 'js/fsck-tag-validation' 2014-12-22 12:27:41 -08:00
fsck.h
generate-cmdlist.sh
gettext.c
gettext.h
git-add--interactive.perl Merge branch 'ak/add-i-empty-candidates' into maint 2015-02-24 22:10:42 -08:00
git-am.sh git-am: add --message-id/--no-message-id 2014-11-25 15:27:01 -08:00
git-archimport.perl
git-bisect.sh bisect: parse revs before passing them to check_expected_revs() 2014-12-29 11:19:55 -08:00
git-compat-util.h Merge branch 'bw/kwset-use-unsigned' into maint 2015-03-13 22:56:07 -07:00
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl
git-difftool--helper.sh difftool--helper: add explicit exit statement 2014-11-21 11:27:53 -08:00
git-difftool.perl Merge branch 'da/difftool' 2014-10-29 10:09:35 -07:00
git-filter-branch.sh
git-instaweb.sh
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh mergetool--lib: remove use of $status global 2014-11-21 11:27:53 -08:00
git-mergetool.sh mergetool: simplify conditionals 2014-11-21 11:27:53 -08:00
git-p4.py
git-parse-remote.sh
git-pull.sh
git-quiltimport.sh
git-rebase--am.sh
git-rebase--interactive.sh Merge branch 'ks/rebase-i-abbrev' into maint 2015-03-05 13:12:56 -08:00
git-rebase--merge.sh
git-rebase.sh
git-relink.perl
git-remote-testgit.sh transport-helper: do not request symbolic refs to remote helpers 2015-01-21 22:46:59 -08:00
git-request-pull.sh
git-send-email.perl git-send-email.perl: support no- prefix with older GetOptions 2015-02-16 13:26:51 -08:00
git-sh-i18n.sh
git-sh-setup.sh Merge branch 'dw/shell-basename-dashdash-before-stripping-leading-dash-from-login' 2014-12-22 12:26:48 -08:00
git-stash.sh
git-submodule.sh Merge branch 'ps/submodule-sanitize-path-upon-add' into maint 2015-03-05 13:13:10 -08:00
git-svn.perl git-svn: make it play nicely with submodules 2015-01-15 08:35:55 +00:00
git-web--browse.sh
git.c Merge branch 'ak/fewer-includes' 2015-01-14 12:37:19 -08:00
git.rc
git.spec.in
gpg-interface.c
gpg-interface.h
graph.c
graph.h
grep.c Merge branch 'jk/blame-commit-label' into maint 2015-02-24 22:09:54 -08:00
grep.h
hashmap.c
hashmap.h
help.c
help.h
hex.c Merge branch 'sb/hex-object-name-is-at-most-41-bytes-long' into maint 2015-03-05 13:12:55 -08:00
http-backend.c
http-fetch.c
http-push.c http-push: trim trailing newline from remote symref 2015-01-14 10:28:02 -08:00
http-walker.c
http.c Merge branch 'jk/dumb-http-idx-fetch-fix' into maint 2015-02-24 22:10:37 -08:00
http.h
ident.c
imap-send.c imap-send.c: set CURLOPT_USE_SSL to CURLUSESSL_TRY 2015-01-06 12:18:32 -08:00
khash.h
kwset.c kwset: use unsigned char to store values with high-bit set 2015-03-02 12:32:24 -08:00
kwset.h kwset: use unsigned char to store values with high-bit set 2015-03-02 12:32:24 -08:00
levenshtein.c
levenshtein.h
line-log.c Merge branch 'tm/line-log-first-parent' 2014-11-06 10:52:37 -08:00
line-log.h
line-range.c
line-range.h
list-objects.c rev-list: add an option to mark fewer edges as uninteresting 2014-12-29 09:57:55 -08:00
list-objects.h
ll-merge.c
ll-merge.h
lockfile.c lockfile.c: store absolute path 2014-11-03 11:00:28 -08:00
lockfile.h
log-tree.c
log-tree.h
mailmap.c mailmap: use higher level string list functions 2014-12-04 15:10:21 -08:00
mailmap.h
match-trees.c
merge-blobs.c
merge-blobs.h
merge-recursive.c Merge branch 'jc/merge-bases' 2015-01-07 12:55:05 -08:00
merge-recursive.h
merge.c
mergesort.c
mergesort.h
name-hash.c
notes-cache.c
notes-cache.h
notes-merge.c Merge branch 'jc/merge-bases' 2015-01-07 12:55:05 -08:00
notes-merge.h
notes-utils.c use strbuf_complete_line() for adding a newline if needed 2014-12-12 11:23:45 -08:00
notes-utils.h
notes.c Merge branch 'jk/blame-commit-label' into maint 2015-02-24 22:09:54 -08:00
notes.h
object.c
object.h
pack-bitmap-write.c Merge branch 'jk/pack-bitmap' 2014-12-12 14:31:42 -08:00
pack-bitmap.c Merge branch 'jk/pack-bitmap' 2014-12-12 14:31:42 -08:00
pack-bitmap.h pack-bitmap: do not use gcc packed attribute 2014-11-30 18:07:34 -08:00
pack-check.c
pack-objects.c
pack-objects.h
pack-revindex.c
pack-revindex.h
pack-write.c
pack.h
pager.c Merge branch 'jk/decimal-width-for-uintmax' into maint 2015-03-05 13:12:59 -08:00
parse-options-cb.c
parse-options.c
parse-options.h
patch-delta.c
patch-ids.c
patch-ids.h
path.c Sync with v2.1.4 2014-12-17 11:46:57 -08:00
pathspec.c
pathspec.h
pkt-line.c pkt-line: allow writing of LARGE_PACKET_MAX buffers 2014-12-10 13:09:21 -08:00
pkt-line.h
preload-index.c
pretty.c Merge branch 'rs/simple-cleanups' into maint 2015-03-06 14:57:57 -08:00
prio-queue.c
prio-queue.h
progress.c
progress.h
prompt.c Merge branch 'jk/credential-quit' 2014-12-22 12:27:20 -08:00
prompt.h
quote.c ls-tree: remove path filtering logic in show_tree 2014-12-01 11:32:34 -08:00
quote.h ls-tree: remove path filtering logic in show_tree 2014-12-01 11:32:34 -08:00
reachable.c
reachable.h
read-cache.c Merge branch 'sb/plug-leak-in-make-cache-entry' into maint 2015-03-05 13:13:14 -08:00
reflog-walk.c
reflog-walk.h
refs.c refs.c: drop curate_packed_refs 2015-03-20 12:41:41 -07:00
refs.h repack_without_refs(): make the refnames argument a string_list 2014-11-25 10:09:58 -08:00
remote-curl.c Merge branch 'jk/remote-curl-an-array-in-struct-cannot-be-null' into maint 2015-02-24 22:10:35 -08:00
remote-testsvn.c
remote.c Merge branch 'jk/blame-commit-label' into maint 2015-02-24 22:09:54 -08:00
remote.h
replace_object.c
rerere.c Merge branch 'jn/rerere-fail-on-auto-update-failure' into maint 2015-02-24 22:10:13 -08:00
rerere.h
resolve-undo.c
resolve-undo.h
revision.c Merge branch 'bc/fetch-thin-less-aggressive-in-normal-repository' 2015-01-12 11:38:57 -08:00
revision.h rev-list: add an option to mark fewer edges as uninteresting 2014-12-29 09:57:55 -08:00
run-command.c Merge branch 'jc/hook-cleanup' 2014-12-22 12:27:10 -08:00
run-command.h Merge branch 'jc/hook-cleanup' 2014-12-22 12:27:10 -08:00
send-pack.c pack-objects: use --objects-edge-aggressive for shallow repos 2014-12-29 09:58:25 -08:00
send-pack.h
sequencer.c Merge branch 'cc/interpret-trailers-more' 2014-12-22 12:26:24 -08:00
sequencer.h Merge branch 'jc/conflict-hint' into cc/interpret-trailers-more 2014-11-10 09:56:39 -08:00
server-info.c update-server-info: create info/* with mode 0666 2015-01-06 13:46:52 -08:00
setup.c
sh-i18n--envsubst.c
sha1-array.c
sha1-array.h
sha1-lookup.c
sha1-lookup.h
sha1_file.c Merge branch 'jk/prune-mtime' into maint 2015-03-05 13:13:08 -08:00
sha1_name.c Merge branch 'rs/simple-cleanups' into maint 2015-03-06 14:57:57 -08:00
shallow.c Merge branch 'jk/blame-commit-label' into maint 2015-02-24 22:09:54 -08:00
shell.c
shortlog.h
show-index.c
sideband.c
sideband.h
sigchain.c
sigchain.h
split-index.c
split-index.h
strbuf.c Merge branch 'jc/strbuf-add-lines-avoid-sp-ht-sequence' 2015-01-07 12:49:19 -08:00
strbuf.h
streaming.c
streaming.h
string-list.c Merge branch 'sb/string-list' 2014-12-22 12:27:30 -08:00
string-list.h Merge branch 'sb/string-list' 2014-12-22 12:27:30 -08:00
submodule.c Merge branch 'jc/merge-bases' 2015-01-07 12:55:05 -08:00
submodule.h
symlinks.c
tag.c
tag.h
tar.h
test-chmtime.c
test-config.c
test-ctype.c
test-date.c
test-delta.c
test-dump-cache-tree.c
test-dump-split-index.c
test-genrandom.c
test-hashmap.c Merge branch 'js/test-hashmap-squelch-gcc' 2014-12-22 12:27:46 -08:00
test-index-version.c
test-line-buffer.c
test-match-trees.c
test-mergesort.c
test-mktemp.c
test-parse-options.c
test-path-utils.c
test-prio-queue.c
test-read-cache.c
test-regex.c
test-revision-walking.c
test-run-command.c
test-scrap-cache-tree.c
test-sha1-array.c
test-sha1.c
test-sha1.sh
test-sigchain.c
test-string-list.c
test-subprocess.c
test-svn-fe.c
test-urlmatch-normalization.c
test-wildmatch.c
thread-utils.c
thread-utils.h
trace.c configure.ac: check for clock_gettime and CLOCK_MONOTONIC 2015-01-09 15:33:39 -08:00
trace.h
trailer.c do not include the same header twice 2015-02-13 13:16:12 -08:00
trailer.h
transport-helper.c Merge branch 'jc/push-cert' into maint 2015-03-05 13:12:58 -08:00
transport.c transport: simplify duplicating a substring in transport_get() using xmemdupz() 2014-12-29 09:39:23 -08:00
transport.h
tree-diff.c
tree-walk.c
tree-walk.h
tree.c tree.c: update read_tree_recursive callback to pass strbuf as base 2014-12-01 11:32:29 -08:00
tree.h tree.c: update read_tree_recursive callback to pass strbuf as base 2014-12-01 11:32:29 -08:00
unicode_width.h
unimplemented.sh
unix-socket.c
unix-socket.h
unpack-trees.c Sync with v2.2.1 2014-12-18 12:30:53 -08:00
unpack-trees.h
update_unicode.sh update_unicode.sh: delete the command group 2014-12-22 10:03:37 -08:00
upload-pack.c pack-objects: use --objects-edge-aggressive for shallow repos 2014-12-29 09:58:25 -08:00
url.c
url.h
urlmatch.c
urlmatch.h
usage.c
userdiff.c do not include the same header twice 2015-02-13 13:16:12 -08:00
userdiff.h
utf8.c Merge branch 'maint-2.1' into maint 2015-01-07 13:28:10 -08:00
utf8.h utf8: add is_hfs_dotgit() helper 2014-12-17 11:04:39 -08:00
varint.c
varint.h
version.c
version.h
versioncmp.c
walker.c Merge branch 'jk/blame-commit-label' into maint 2015-02-24 22:09:54 -08:00
walker.h
wildmatch.c
wildmatch.h
wrap-for-bin.sh
wrapper.c
write_or_die.c
ws.c
wt-status.c Merge branch 'jk/status-read-branch-name-fix' into maint 2015-02-24 22:10:22 -08:00
wt-status.h
xdiff-interface.c
xdiff-interface.h
zlib.c

README

////////////////////////////////////////////////////////////////

	Git - the stupid content tracker

////////////////////////////////////////////////////////////////

"git" can mean anything, depending on your mood.

 - random three-letter combination that is pronounceable, and not
   actually used by any common UNIX command.  The fact that it is a
   mispronunciation of "get" may or may not be relevant.
 - stupid. contemptible and despicable. simple. Take your pick from the
   dictionary of slang.
 - "global information tracker": you're in a good mood, and it actually
   works for you. Angels sing, and a light suddenly fills the room.
 - "goddamn idiotic truckload of sh*t": when it breaks

Git is a fast, scalable, distributed revision control system with an
unusually rich command set that provides both high-level operations
and full access to internals.

Git is an Open Source project covered by the GNU General Public
License version 2 (some parts of it are under different licenses,
compatible with the GPLv2). It was originally written by Linus
Torvalds with help of a group of hackers around the net.

Please read the file INSTALL for installation instructions.

See Documentation/gittutorial.txt to get started, then see
Documentation/giteveryday.txt for a useful minimum set of commands, and
Documentation/git-commandname.txt for documentation of each command.
If git has been correctly installed, then the tutorial can also be
read with "man gittutorial" or "git help tutorial", and the
documentation of each command with "man git-commandname" or "git help
commandname".

CVS users may also want to read Documentation/gitcvs-migration.txt
("man gitcvs-migration" or "git help cvs-migration" if git is
installed).

Many Git online resources are accessible from http://git-scm.com/
including full documentation and Git related tools.

The user discussion and development of Git take place on the Git
mailing list -- everyone is welcome to post bug reports, feature
requests, comments and patches to git@vger.kernel.org (read
Documentation/SubmittingPatches for instructions on patch submission).
To subscribe to the list, send an email with just "subscribe git" in
the body to majordomo@vger.kernel.org. The mailing list archives are
available at http://news.gmane.org/gmane.comp.version-control.git/,
http://marc.info/?l=git and other archival sites.

The maintainer frequently sends the "What's cooking" reports that
list the current status of various development topics to the mailing
list.  The discussion following them give a good reference for
project status, development direction and remaining tasks.