Go to file
Shawn O. Pearce c9ced051c3 Fix random fast-import errors when compiled with NO_MMAP
fast-import was relying on the fact that on most systems mmap() and
write() are synchronized by the filesystem's buffer cache.  We were
relying on the ability to mmap() 20 bytes beyond the current end
of the file, then later fill in those bytes with a future write()
call, then read them through the previously obtained mmap() address.

This isn't always true with some implementations of NFS, but it is
especially not true with our NO_MMAP=YesPlease build time option used
on some platforms.  If fast-import was built with NO_MMAP=YesPlease
we used the malloc()+pread() emulation and the subsequent write()
call does not update the trailing 20 bytes of a previously obtained
"mmap()" (aka malloc'd) address.

Under NO_MMAP that behavior causes unpack_entry() in sha1_file.c to
be unable to read an object header (or data) that has been unlucky
enough to be written to the packfile at a location such that it
is in the trailing 20 bytes of a window previously opened on that
same packfile.

This bug has gone unnoticed for a very long time as it is highly data
dependent.  Not only does the object have to be placed at the right
position, but it also needs to be positioned behind some other object
that has been accessed due to a branch cache invalidation.  In other
words the stars had to align just right, and if you did run into
this bug you probably should also have purchased a lottery ticket.

Fortunately the workaround is a lot easier than the bug explanation.

Before we allow unpack_entry() to read data from a pack window
that has also (possibly) been modified through write() we force
all existing windows on that packfile to be closed.  By closing
the windows we ensure that any new access via the emulated mmap()
will reread the packfile, updating to the current file content.

This comes at a slight performance degredation as we cannot reuse
previously cached windows when we update the packfile.  But it
is a fairly minor difference as the window closes happen at only
two points:

 - When the packfile is finalized and its .idx is generated:

   At this stage we are getting ready to update the refs and any
   data access into the packfile is going to be random, and is
   going after only the branch tips (to ensure they are valid).
   Our existing windows (if any) are not likely to be positioned
   at useful locations to access those final tip commits so we
   probably were closing them before anyway.

 - When the branch cache missed and we need to reload:

   At this point fast-import is getting change commands for the next
   commit and it needs to go re-read a tree object it previously
   had written out to the packfile.  What windows we had (if any)
   are not likely to cover the tree in question so we probably were
   closing them before anyway.

We do try to avoid unnecessarily closing windows in the second case
by checking to see if the packfile size has increased since the
last time we called unpack_entry() on that packfile.  If the size
has not changed then we have not written additional data, and any
existing window is still vaild.  This nicely handles the cases where
fast-import is going through a branch cache reload and needs to read
many trees at once.  During such an event we are not likely to be
updating the packfile so we do not cycle the windows between reads.

With this change in place t9301-fast-export.sh (which was broken
by c3b0dec509) finally works again.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-01-17 22:39:20 -08:00
Documentation close_lock_file(): new function in the lockfile API 2008-01-16 15:35:03 -08:00
arm
compat Simplify strchrnul() compat code 2007-11-11 12:10:35 -08:00
contrib hg-to-git: improve popen calls 2008-01-15 17:24:29 -08:00
git-gui Merge git://repo.or.cz/git-gui 2008-01-04 22:03:42 -08:00
gitk-git Merge ../gitk 2008-01-11 00:51:30 -08:00
gitweb gitweb: fix whitespace in config_to_multi (indent with tab) 2007-12-20 19:07:24 -08:00
mozilla-sha1
perl Don't cache DESTDIR in perl/perl.mak. 2007-12-11 00:38:46 -08:00
ppc
t Be more careful about updating refs 2008-01-16 11:53:35 -08:00
templates Make default pre-commit hook less noisy 2008-01-14 13:52:27 -08:00
xdiff Remove unreachable statements 2007-11-15 21:23:47 -08:00
.gitignore Remove old generated files from .gitignore. 2007-12-20 17:05:31 -08:00
.mailmap GIT 1.5.4-rc1 2007-12-19 17:24:04 -08:00
COPYING
GIT-VERSION-GEN GIT 1.5.4-rc3 2008-01-11 21:40:55 -08:00
INSTALL Mention 'cpio' dependency in INSTALL 2007-10-02 17:35:29 -07:00
Makefile Fix git-rerere documentation 2008-01-14 16:14:29 -08:00
README
RelNotes GIT 1.5.3.8 2008-01-07 22:41:43 -08:00
alloc.c
archive-tar.c Fix the expansion pattern of the pseudo-static path buffer. 2007-09-20 22:19:17 -07:00
archive-zip.c preserve executable bits in zip archives 2007-09-18 14:56:55 -07:00
archive.h archive: specfile support (--pretty=format: in archive files) 2007-09-03 16:46:16 -07:00
attr.c Merge branch 'maint' 2007-10-19 01:18:55 -04:00
attr.h
base85.c
blob.c
blob.h
builtin-add.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-annotate.c
builtin-apply.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-archive.c Merge branch 'js/forkexec' 2007-11-01 13:47:47 -07:00
builtin-blame.c Fix grammar nits in documentation and in code comments. 2008-01-03 09:15:17 -08:00
builtin-branch.c git config --get-colorbool 2007-12-05 17:57:11 -08:00
builtin-bundle.c bundle create: keep symbolic refs' names instead of resolving them 2007-11-22 15:15:25 -08:00
builtin-cat-file.c
builtin-check-attr.c Full rework of quote_c_style and write_name_quoted. 2007-09-20 23:45:49 -07:00
builtin-check-ref-format.c
builtin-checkout-index.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-clean.c git-clean: fix off-by-one memory access when given no arguments 2008-01-12 11:10:09 -08:00
builtin-commit-tree.c Re-fix "builtin-commit: fix --signoff" 2007-12-09 00:55:55 -08:00
builtin-commit.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-config.c config --get-colorbool: diff.color is a deprecated synonym to color.diff 2007-12-05 23:05:10 -08:00
builtin-count-objects.c Make builtin-count-objects.c use parse_options. 2007-10-29 21:03:31 -07:00
builtin-describe.c make 'git describe --all --contains' work 2007-12-19 14:59:19 -08:00
builtin-diff-files.c add a "basic" diff config callback 2008-01-04 16:05:23 -08:00
builtin-diff-index.c add a "basic" diff config callback 2008-01-04 16:05:23 -08:00
builtin-diff-tree.c add a "basic" diff config callback 2008-01-04 16:05:23 -08:00
builtin-diff.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-fast-export.c Fix git-fast-export for zero-sized blobs 2007-12-12 10:59:22 -08:00
builtin-fetch--tool.c Error out when user doesn't have access permission to the repository 2007-11-30 13:10:11 -08:00
builtin-fetch-pack.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-fetch.c Rewrite builtin-fetch option parsing to use parse_options(). 2007-12-04 23:48:39 -08:00
builtin-fmt-merge-msg.c Fix parent rewriting in --early-output 2007-11-14 03:59:37 -08:00
builtin-for-each-ref.c for-each-ref: Fix quoting style constants. 2007-12-06 07:53:20 -08:00
builtin-fsck.c Make 'git fsck' complain about non-commit branches 2008-01-16 11:37:57 -08:00
builtin-gc.c slightly better auto gc message 2008-01-07 14:02:25 -08:00
builtin-grep.c Don't access line[-1] for a zero-length "line" from fgets. 2008-01-04 12:28:58 -08:00
builtin-http-fetch.c Modularize commit-walker 2007-09-19 03:22:30 -07:00
builtin-init-db.c Allow a relative builtin template directory. 2007-11-14 15:18:39 -08:00
builtin-log.c git show <tag>: show the tagger 2007-12-19 14:59:11 -08:00
builtin-ls-files.c Export three helper functions from ls-files 2007-11-22 17:05:05 -08:00
builtin-ls-remote.c ls-remote: add -t and -h options. 2008-01-15 17:04:21 -08:00
builtin-ls-tree.c Full rework of quote_c_style and write_name_quoted. 2007-09-20 23:45:49 -07:00
builtin-mailinfo.c Make mailsplit and mailinfo strip whitespace from the start of the input 2007-11-02 01:58:40 -07:00
builtin-mailsplit.c Merge branch 'maint' 2007-11-09 00:21:44 -08:00
builtin-merge-base.c
builtin-merge-file.c
builtin-merge-ours.c git-merge-ours: make it a builtin. 2007-11-22 14:21:59 -08:00
builtin-mv.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-name-rev.c Make builtin-name-rev.c use parse_options. 2007-10-29 21:03:31 -07:00
builtin-pack-objects.c pack-objects: remove redundant and wrong call to deflateEnd() 2008-01-10 23:27:39 -08:00
builtin-pack-refs.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-prune-packed.c return the prune-packed progress display to the inner loop 2007-11-01 15:22:32 -07:00
builtin-prune.c Add "--expire <time>" option to 'git prune' 2007-11-30 15:47:01 -08:00
builtin-push.c Merge branch 'sp/refspec-match' 2007-12-04 17:07:10 -08:00
builtin-read-tree.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-reflog.c
builtin-rerere.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-reset.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-rev-list.c Don't access line[-1] for a zero-length "line" from fgets. 2008-01-04 12:28:58 -08:00
builtin-rev-parse.c git-rev-parse --symbolic-full-name 2008-01-06 18:41:43 -08:00
builtin-revert.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-rm.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-send-pack.c Update callers of check_ref_format() 2008-01-02 11:20:09 -08:00
builtin-shortlog.c shortlog: mention the "-e" option in the usage 2008-01-09 12:25:27 -08:00
builtin-show-branch.c format-patch -s: add MIME encoding header if signer's name requires so 2007-11-07 18:37:27 -08:00
builtin-show-ref.c
builtin-stripspace.c Clean up stripspace a bit, use strbuf even more. 2007-09-27 00:33:33 -07:00
builtin-symbolic-ref.c Make builtin-symbolic-ref.c use parse_options. 2007-10-29 21:03:31 -07:00
builtin-tag.c Fix $EDITOR regression introduced by rewrite in C. 2007-12-22 10:26:08 -08:00
builtin-tar-tree.c
builtin-unpack-objects.c relax usage of the progress API 2007-10-30 16:08:40 -07:00
builtin-update-index.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-update-ref.c Make builtin-update-ref.c use parse_options 2007-10-29 21:03:31 -07:00
builtin-upload-archive.c
builtin-verify-pack.c
builtin-verify-tag.c verify-tag: also grok CR/LFs in the tag signature 2007-09-03 16:44:35 -07:00
builtin-write-tree.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin.h Merge branch 'kh/commit' 2007-12-04 17:16:33 -08:00
bundle.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
bundle.h Move bundle specific stuff into bundle.[ch] 2007-09-19 03:22:30 -07:00
cache-tree.c Small cache_tree_write refactor. 2007-09-26 02:27:06 -07:00
cache-tree.h Small cache_tree_write refactor. 2007-09-26 02:27:06 -07:00
cache.h Fix random fast-import errors when compiled with NO_MMAP 2008-01-17 22:39:20 -08:00
check-builtins.sh
check-racy.c ce_match_stat, run_diff_files: use symbolic constants for readability 2007-11-10 00:24:51 -08:00
color.c Support GIT_PAGER_IN_USE environment variable 2007-12-11 00:42:05 -08:00
color.h git config --get-colorbool 2007-12-05 17:57:11 -08:00
combine-diff.c Fix rewrite_diff() name quoting. 2007-12-26 17:13:36 -08:00
command-list.txt Retire git-runstatus for real. 2007-12-14 22:08:25 -08:00
commit.c Merge branch 'lt/rev-list-interactive' 2007-11-18 16:03:24 -08:00
commit.h add -i: Fix running from a subdirectory 2007-11-25 10:23:13 -08:00
config.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
config.mak.in autoconf: Check asciidoc version to automatically set ASCIIDOC8 2007-12-11 00:38:38 -08:00
configure.ac autoconf: Check asciidoc version to automatically set ASCIIDOC8 2007-12-11 00:38:38 -08:00
connect.c Miscellaneous const changes and utilities 2007-11-02 22:40:43 -07:00
convert.c treat any file with NUL as binary 2008-01-16 09:10:34 -08:00
copy.c
csum-file.c remove dead code from the csum-file interface 2007-11-05 12:55:33 -08:00
csum-file.h remove dead code from the csum-file interface 2007-11-05 12:55:33 -08:00
ctype.c
daemon.c Style: place opening brace of a function definition at column 1 2007-11-08 15:35:32 -08:00
date.c parse_date_format(): convert a format name to an enum date_mode 2007-09-29 20:31:59 -07:00
decorate.c
decorate.h
delta.h
diff-delta.c fix style of a few comments in diff-delta.c 2007-12-18 15:22:28 -08:00
diff-lib.c Use is_absolute_path() in diff-lib.c, lockfile.c, setup.c, trace.c 2007-11-26 12:32:05 -08:00
diff.c Correct spelling in diff.c comment 2008-01-16 11:37:58 -08:00
diff.h add a "basic" diff config callback 2008-01-04 16:05:23 -08:00
diffcore-break.c rename: Break filepairs with different types. 2007-12-02 02:24:46 -08:00
diffcore-delta.c optimize diffcore-delta by sorting hash entries. 2007-10-04 00:05:36 -07:00
diffcore-order.c Use xmemdupz() in many places. 2007-09-18 17:42:17 -07:00
diffcore-pickaxe.c
diffcore-rename.c Fix a pathological case in git detecting proper renames 2007-11-30 15:49:17 -08:00
diffcore.h copy vs rename detection: avoid unnecessary O(n*m) loops 2007-10-26 23:18:06 -07:00
dir.c Fix a memory leak 2007-12-16 12:50:08 -08:00
dir.h per-directory-exclude: lazily read .gitignore files 2007-11-29 02:19:14 -08:00
dump-cache-tree.c
entry.c Merge branch 'jc/maint-add-sync-stat' 2007-11-14 14:15:40 -08:00
environment.c Support GIT_PAGER_IN_USE environment variable 2007-12-11 00:42:05 -08:00
exec_cmd.c Trace and quote with argv: get rid of unneeded count argument. 2007-12-03 22:11:53 -08:00
exec_cmd.h use only the $PATH for exec'ing git commands 2007-10-29 20:51:37 -07:00
fast-import.c Fix random fast-import errors when compiled with NO_MMAP 2008-01-17 22:39:20 -08:00
fetch-pack.h Always obtain fetch-pack arguments from struct fetch_pack_args 2007-09-19 03:22:31 -07:00
fixup-builtins
generate-cmdlist.sh Consolidate command list to one. 2007-12-01 23:48:28 -08:00
git-add--interactive.perl add--interactive: allow diff colors without interactive colors 2008-01-06 18:41:44 -08:00
git-am.sh git-am: Run git gc only once and not for every patch. 2008-01-05 00:07:57 -08:00
git-archimport.perl Make git-archimport log entries more consistent 2007-08-30 19:22:02 -07:00
git-bisect.sh git-bisect visualize: work in non-windowed environments better 2007-12-08 02:58:26 -08:00
git-checkout.sh Fix a typo in checkout.sh and cleanup one-line help messages 2007-12-11 09:52:44 -08:00
git-clone.sh clone: fix options '-o' and '--origin' to be recognised again 2007-12-19 14:59:18 -08:00
git-compat-util.h Uninline prefixcmp() 2008-01-03 01:23:12 -08:00
git-cvsexportcommit.perl cvsexportcommit: fix massive commits 2007-12-14 12:06:04 -08:00
git-cvsimport.perl cvsimport: remove last use of repo-config from git standard tools 2008-01-13 21:48:22 -08:00
git-cvsserver.perl git-cvsserver runs hooks/post-update 2007-12-05 01:15:01 -08:00
git-filter-branch.sh filter-branch: work correctly with ambiguous refnames 2008-01-06 18:41:43 -08:00
git-help--browse.sh rename git-browse--help to git-help--browse 2007-12-16 12:52:40 -08:00
git-instaweb.sh Fix git-instaweb breakage on MacOS X due to the limited sed functionality 2007-12-19 14:59:19 -08:00
git-lost-found.sh Merge branch 'ph/parseopt-sh' 2007-11-17 21:39:37 -08:00
git-merge-octopus.sh
git-merge-one-file.sh Support a merge with conflicting gitlink change 2007-12-11 00:40:56 -08:00
git-merge-resolve.sh Fixing comment in merge strategies 2007-08-30 17:18:22 -07:00
git-merge-stupid.sh Fixing comment in merge strategies 2007-08-30 17:18:22 -07:00
git-merge.sh Merge branch 'ph/parseopt-sh' 2007-11-17 21:39:37 -08:00
git-mergetool.sh Allow git-mergetool to handle paths with a leading space 2008-01-07 21:00:54 -08:00
git-parse-remote.sh
git-pull.sh "git pull --tags": error out with a better message. 2007-12-28 21:01:24 -08:00
git-quiltimport.sh Replace instances of export VAR=VAL with VAR=VAL; export VAR 2007-11-28 17:23:18 -08:00
git-rebase--interactive.sh Squelch bogus progress output from git-rebase--interactive 2008-01-14 20:04:02 -08:00
git-rebase.sh Merge branch 'maint' 2007-11-28 17:06:57 -08:00
git-relink.perl
git-remote.perl Merge branch 'maint' 2007-10-26 23:17:23 -07:00
git-repack.sh Migrate git-repack.sh to use git-rev-parse --parseopt 2007-11-05 22:48:13 -08:00
git-request-pull.sh Merge branch 'ph/parseopt-sh' 2007-11-17 21:39:37 -08:00
git-send-email.perl Make git send-email accept $EDITOR with arguments 2007-12-22 00:21:30 -08:00
git-sh-setup.sh shell-scripts usage(): consistently exit with non-zero 2007-12-20 12:58:06 -08:00
git-stash.sh git-stash clear: refuse to work with extra parameter for now 2008-01-06 18:41:36 -08:00
git-submodule.sh Do not rely on the exit status of "unset" for unset variables 2007-12-04 14:48:45 -08:00
git-svn.perl git-svn: handle leading/trailing whitespace from svnsync revprops 2008-01-12 10:58:06 -08:00
git.c Merge branch 'kh/commit' 2007-12-04 17:16:33 -08:00
git.spec.in RPM spec: include gitk message files. 2008-01-11 21:40:25 -08:00
grep.c
grep.h
hash-object.c git-hash-object should honor config variables 2007-11-11 02:51:53 -08:00
hash.c Do linear-time/space rename logic for exact renames 2007-10-26 23:18:06 -07:00
hash.h Do linear-time/space rename logic for exact renames 2007-10-26 23:18:06 -07:00
help.c rename git-browse--help to git-help--browse 2007-12-16 12:52:40 -08:00
http-push.c Fix double-free() in http-push.c:remote_exists() 2007-12-30 12:24:13 -08:00
http-walker.c Move fetch_ref from http-push.c and http-walker.c to http.c 2007-12-14 21:31:59 -08:00
http.c Move fetch_ref from http-push.c and http-walker.c to http.c 2007-12-14 21:31:59 -08:00
http.h Move fetch_ref from http-push.c and http-walker.c to http.c 2007-12-14 21:31:59 -08:00
ident.c Fix grammar nits in documentation and in code comments. 2008-01-03 09:15:17 -08:00
imap-send.c strbuf change: be sure ->buf is never ever NULL. 2007-09-29 02:13:33 -07:00
index-pack.c Merge branch 'np/progress' 2007-11-14 14:04:19 -08:00
interpolate.c Merge branch 'mv/unknown' 2007-10-03 04:28:24 -07:00
interpolate.h
list-objects.c Fix memory leak in traverse_commit_list 2007-11-10 01:52:54 -08:00
list-objects.h
lockfile.c close_lock_file(): new function in the lockfile API 2008-01-16 15:35:03 -08:00
log-tree.c Make the diff_options bitfields be an unsigned with explicit masks. 2007-11-11 16:54:15 -08:00
log-tree.h rev-list: implement --bisect-all 2007-10-26 23:27:23 -07:00
mailmap.c mailmap: fix bogus for() loop that happened to be safe by accident 2007-12-08 03:40:12 -08:00
mailmap.h
match-trees.c Improved const correctness for strings 2007-10-21 01:43:27 -04:00
merge-file.c xdl_diff: identify call sites. 2007-12-13 23:04:26 -08:00
merge-index.c
merge-recursive.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
merge-tree.c xdl_diff: identify call sites. 2007-12-13 23:04:26 -08:00
mktag.c Now that cache.h needs strbuf.h, remove useless includes. 2007-09-16 17:30:03 -07:00
mktree.c Rework unquote_c_style to work on a strbuf. 2007-09-20 23:32:18 -07:00
object-refs.c
object.c Don't dereference NULL upon lookup failure. 2007-12-22 11:15:38 -08:00
object.h
pack-check.c
pack-redundant.c
pack-write.c Merge branch 'np/progress' 2007-11-02 16:27:37 -07:00
pack.h Merge branch 'np/progress' 2007-11-02 16:27:37 -07:00
pager.c Support GIT_PAGER_IN_USE environment variable 2007-12-11 00:42:05 -08:00
parse-options.c Force the sticked form for options with optional arguments. 2007-12-22 10:26:08 -08:00
parse-options.h parse-options: Allow to hide options from the default usage. 2007-11-22 22:11:28 -08:00
patch-delta.c
patch-id.c
patch-ids.c Make the diff_options bitfields be an unsigned with explicit masks. 2007-11-11 16:54:15 -08:00
patch-ids.h
path-list.c path-list.c: always free strdup'ed paths 2007-08-15 13:43:08 -07:00
path-list.h path-list.c: always free strdup'ed paths 2007-08-15 13:43:08 -07:00
path.c Add is_absolute_path() and make_absolute_path() 2007-08-01 00:38:30 -07:00
pkt-line.c
pkt-line.h
pretty.c custom pretty format: tolerate empty e-mail address 2008-01-06 18:41:43 -08:00
progress.c Flush progress message buffer in display(). 2007-11-20 13:16:15 -08:00
progress.h nicer display of thin pack completion 2007-11-08 15:43:41 -08:00
quote.c Fix rewrite_diff() name quoting. 2007-12-26 17:13:36 -08:00
quote.h Fix rewrite_diff() name quoting. 2007-12-26 17:13:36 -08:00
reachable.c
reachable.h
read-cache.c Merge branch 'jc/maint-add-sync-stat' 2007-11-14 14:15:40 -08:00
receive-pack.c receive-pack: reject invalid refnames 2008-01-04 15:59:43 -08:00
reflog-walk.c
reflog-walk.h
refs.c refs.c: rework ref_locks by abstracting from underlying struct lock_file 2008-01-16 15:36:10 -08:00
refs.h lock_any_ref_for_update(): reject wildcard return from check_ref_format 2008-01-02 02:28:54 -08:00
remote.c remote: Fix bogus make_branch() call in configuration reader. 2007-12-14 20:34:56 -08:00
remote.h Add remote.<name>.proxy 2007-12-03 23:43:07 -08:00
revision.c Fix "git log --diff-filter" bug 2007-12-26 11:57:36 -08:00
revision.h shortlog: default to HEAD when the standard input is a tty 2007-12-11 17:01:31 -08:00
run-command.c run-command: Support sending stderr to /dev/null 2007-11-11 17:09:55 -08:00
run-command.h run-command: Support sending stderr to /dev/null 2007-11-11 17:09:55 -08:00
send-pack.h Teach send-pack a mirror mode 2007-11-09 21:14:10 -08:00
server-info.c Don't access line[-1] for a zero-length "line" from fgets. 2008-01-04 12:28:58 -08:00
setup.c Fix grammar nits in documentation and in code comments. 2008-01-03 09:15:17 -08:00
sha1_file.c Fix random fast-import errors when compiled with NO_MMAP 2008-01-17 22:39:20 -08:00
sha1_name.c Merge branch 'sp/refspec-match' 2007-12-04 17:07:10 -08:00
shallow.c
shell.c shell should call the new setup_path() to setup $PATH 2007-10-29 20:51:37 -07:00
show-index.c Use PRIuMAX instead of 'unsigned long long' in show-index 2007-10-21 02:16:57 -04:00
sideband.c recv_sideband: Do not use ANSI escape sequence on dumb terminals. 2008-01-09 12:23:59 -08:00
sideband.h
strbuf.c Uninline prefixcmp() 2008-01-03 01:23:12 -08:00
strbuf.h builtin-commit.c: export GIT_INDEX_FILE for launch_editor as well. 2007-11-26 09:13:17 -08:00
symlinks.c
tag.c parse_tag_buffer: don't parse invalid tags 2008-01-06 18:41:44 -08:00
tag.h
tar.h
test-absolute-path.c Add is_absolute_path() and make_absolute_path() 2007-08-01 00:38:30 -07:00
test-chmtime.c
test-date.c
test-delta.c
test-genrandom.c
test-match-trees.c
test-parse-options.c parse-options: abbreviation engine fix. 2007-11-05 22:46:45 -08:00
test-sha1.c
test-sha1.sh the use of 'tr' in the test suite isn't really portable 2007-12-17 20:49:18 -08:00
trace.c Trace and quote with argv: get rid of unneeded count argument. 2007-12-03 22:11:53 -08:00
transport.c Don't access line[-1] for a zero-length "line" from fgets. 2008-01-04 12:28:58 -08:00
transport.h Merge branch 'aw/mirror-push' into jk/send-pack 2007-11-14 03:13:30 -08:00
tree-diff.c Fix small memory leaks induced by diff_tree_setup_paths 2007-12-12 10:59:22 -08:00
tree-walk.c tree-walk: don't parse incorrect entries 2008-01-06 18:41:44 -08:00
tree-walk.h rename: Break filepairs with different types. 2007-12-02 02:24:46 -08:00
tree.c Optimize "diff --cached" performance. 2007-08-10 11:44:23 -07:00
tree.h
unpack-file.c Use xmkstemp() instead of mkstemp() 2007-08-14 22:20:26 -07:00
unpack-trees.c unpack-trees: FLEX_ARRAY fix 2007-12-18 01:10:24 -08:00
unpack-trees.h Move old index entry removal from "unpack_trees()" into the individual functions 2007-08-10 13:59:19 -07:00
update-server-info.c
upload-pack.c upload-pack: Use finish_{command,async}() instead of waitpid(). 2007-11-05 22:47:28 -08:00
usage.c print warning/error/fatal messages in one shot 2007-11-09 22:25:36 -08:00
utf8.c utf8_width(): allow non NUL-terminated input 2008-01-06 20:53:46 -08:00
utf8.h utf8_width(): allow non NUL-terminated input 2008-01-06 20:53:46 -08:00
var.c Re-fix "builtin-commit: fix --signoff" 2007-12-09 00:55:55 -08:00
walker.c Clarify error response from 'git fetch' for bad responses 2007-12-17 20:49:18 -08:00
walker.h Modularize commit-walker 2007-09-19 03:22:30 -07:00
write_or_die.c
ws.c whitespace: more accurate initial-indent highlighting 2007-12-16 13:07:58 -08:00
wt-status.c git-commit: squelch needless message during an empty merge 2007-12-12 20:50:33 -08:00
wt-status.h git-commit: squelch needless message during an empty merge 2007-12-12 20:50:33 -08:00
xdiff-interface.c Re(-re)*fix trim_common_tail() 2007-12-20 20:54:23 -08:00
xdiff-interface.h xdl_diff: identify call sites. 2007-12-13 23:04:26 -08:00

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.
It was originally written by Linus Torvalds with help of a group of
hackers around the net. It is currently maintained by Junio C Hamano.

Please read the file INSTALL for installation instructions.
See Documentation/tutorial.txt to get started, then see
Documentation/everyday.txt for a useful minimum set of commands,
and "man git-commandname" for documentation of each command.
CVS users may also want to read Documentation/cvs-migration.txt.

Many Git online resources are accessible from http://git.or.cz/
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. 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://marc.theaimsgroup.com/?l=git and other archival sites.

The messages titled "A note from the maintainer", "What's in
git.git (stable)" and "What's cooking in git.git (topics)" and
the discussion following them on the mailing list give a good
reference for project status, development direction and
remaining tasks.