1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-11-05 08:47:56 +01:00
Find a file
Junio C Hamano fb63d7f889 git-add: make the entry stat-clean after re-adding the same contents
Earlier in commit 0781b8a9b2
(add_file_to_index: skip rehashing if the cached stat already
matches), add_file_to_index() were taught not to re-add the path
if it already matches the index.

The change meant well, but was not executed quite right.  It
used ie_modified() to see if the file on the work tree is really
different from the index, and skipped adding the contents if the
function says "not modified".

This was wrong.  There are three possible comparison results
between the index and the file in the work tree:

 - with lstat(2) we _know_ they are different.  E.g. if the
   length or the owner in the cached stat information is
   different from the length we just obtained from lstat(2), we
   can tell the file is modified without looking at the actual
   contents.

 - with lstat(2) we _know_ they are the same.  The same length,
   the same owner, the same everything (but this has a twist, as
   described below).

 - we cannot tell from lstat(2) information alone and need to go
   to the filesystem to actually compare.

The last case arises from what we call 'racy git' situation,
that can be caused with this sequence:

    $ echo hello >file
    $ git add file
    $ echo aeiou >file ;# the same length

If the second "echo" is done within the same filesystem
timestamp granularity as the first "echo", then the timestamp
recorded by "git add" and the timestamp we get from lstat(2)
will be the same, and we can mistakenly say the file is not
modified.  The path is called 'racily clean'.  We need to
reliably detect racily clean paths are in fact modified.

To solve this problem, when we write out the index, we mark the
index entry that has the same timestamp as the index file itself
(that is the time from the point of view of the filesystem) to
tell any later code that does the lstat(2) comparison not to
trust the cached stat info, and ie_modified() then actually goes
to the filesystem to compare the contents for such a path.

That's all good, but it should not be used for this "git add"
optimization, as the goal of "git add" is to actually update the
path in the index and make it stat-clean.  With the false
optimization, we did _not_ cause any data loss (after all, what
we failed to do was only to update the cached stat information),
but it made the following sequence leave the file stat dirty:

    $ echo hello >file
    $ git add file
    $ echo hello >file ;# the same contents
    $ git add file

The solution is not to use ie_modified() which goes to the
filesystem to see if it is really clean, but instead use
ie_match_stat() with "assume racily clean paths are dirty"
option, to force re-adding of such a path.

There was another problem with "git add -u".  The codepath
shares the same issue when adding the paths that are found to be
modified, but in addition, it asked "git diff-files" machinery
run_diff_files() function (which is "git diff-files") to list
the paths that are modified.  But "git diff-files" machinery
uses the same ie_modified() call so that it does not report
racily clean _and_ actually clean paths as modified, which is
not what we want.

The patch allows the callers of run_diff_files() to pass the
same "assume racily clean paths are dirty" option, and makes
"git-add -u" codepath to use that option, to discover and re-add
racily clean _and_ actually clean paths.

We could further optimize on top of this patch to differentiate
the case where the path really needs re-adding (i.e. the content
of the racily clean entry was indeed different) and the case
where only the cached stat information needs to be refreshed
(i.e. the racily clean entry was actually clean), but I do not
think it is worth it.

This patch applies to maint and all the way up.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2007-11-10 00:37:39 -08:00
arm War on whitespace 2007-06-07 00:04:01 -07:00
compat Remove a couple of duplicated include 2007-11-05 20:50:38 -08:00
contrib fixing output of non-fast-forward output of post-receive-email 2007-10-18 00:59:25 -04:00
Documentation Start preparing for 1.5.3.6 2007-11-09 00:17:52 -08:00
git-gui Merge branch 'maint' of git://repo.or.cz/git-gui into maint 2007-10-20 23:19:22 -04:00
gitweb gitweb: Update config file example for snapshot feature in gitweb/INSTALL 2007-11-01 15:14:16 -07:00
mozilla-sha1 War on whitespace 2007-06-07 00:04:01 -07:00
perl When exec() fails include the failing command in the error message 2007-11-07 11:39:37 -08:00
ppc War on whitespace 2007-06-07 00:04:01 -07:00
t stop t1400 hiding errors in tests 2007-11-08 23:55:55 -08:00
templates hooks--update: Explicitly check for all zeros for a deleted ref. 2007-09-13 22:33:11 -07:00
xdiff Per-path attribute based hunk header selection. 2007-07-06 01:20:47 -07:00
.gitignore add "test-absolute-path" to .gitignore 2007-08-04 01:57:29 -07:00
.mailmap Update .mailmap 2007-07-14 13:44:58 -07:00
alloc.c Clean up object creation to use more common code 2007-04-16 23:36:16 -07:00
archive-tar.c rename dirlink to gitlink. 2007-05-21 23:34:54 -07:00
archive-zip.c rename dirlink to gitlink. 2007-05-21 23:34:54 -07:00
archive.h
attr.c attr: fix segfault in gitattributes parsing code 2007-10-18 21:11:27 -04:00
attr.h Fix funny types used in attribute value representation 2007-04-18 16:17:13 -07:00
base85.c decode_85(): fix missing return. 2007-05-30 15:03:50 -07:00
blob.c Clean up object creation to use more common code 2007-04-16 23:36:16 -07:00
blob.h
builtin-add.c git-add: make the entry stat-clean after re-adding the same contents 2007-11-10 00:37:39 -08:00
builtin-annotate.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-apply.c ce_match_stat, run_diff_files: use symbolic constants for readability 2007-11-10 00:24:51 -08:00
builtin-archive.c connect: display connection progress 2007-05-16 12:48:18 -07:00
builtin-blame.c Delay pager setup in git blame 2007-11-03 21:31:37 -07:00
builtin-branch.c Re-code builtin-branch.c in UTF-8 2007-07-11 22:52:45 -07:00
builtin-bundle.c builtin-bundle create - use lock_file 2007-08-13 13:04:18 -07:00
builtin-cat-file.c Cleanup variables in cat-file 2007-04-22 00:43:24 -07:00
builtin-check-attr.c Add read_cache to builtin-check-attr 2007-08-14 22:46:01 -07:00
builtin-check-ref-format.c
builtin-checkout-index.c Make every builtin-*.c file #include "builtin.h" 2007-07-14 22:44:09 -07:00
builtin-commit-tree.c init_buffer(): Kill buf pointer 2007-04-25 13:45:12 -07:00
builtin-config.c git-config: print error message if the config file cannot be read 2007-10-18 01:35:33 -04:00
builtin-count-objects.c Simplify index access condition in count-objects, pack-redundant 2007-05-29 23:30:11 -07:00
builtin-describe.c Teach git-describe how to run name-rev 2007-05-21 23:56:28 -07:00
builtin-diff-files.c Removing -n option from git-diff-files documentation 2007-04-26 22:43:10 -07:00
builtin-diff-index.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-diff-tree.c Allow git-diff exit with codes similar to diff(1) 2007-03-14 16:21:19 -07:00
builtin-diff.c refresh_index_quietly(): express "optional" nature of index writing better 2007-11-08 16:26:23 -08:00
builtin-fetch--tool.c Avoid scary errors about tagged trees/blobs during git-fetch 2007-10-18 20:37:52 -04:00
builtin-fmt-merge-msg.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-for-each-ref.c for-each-ref: fix %(numparent) and %(parent) 2007-10-02 15:12:05 -07:00
builtin-fsck.c fsck --lost-found: write blob's contents, not their SHA-1 2007-07-22 15:59:27 -07:00
builtin-gc.c Make every builtin-*.c file #include "builtin.h" 2007-07-14 22:44:09 -07:00
builtin-grep.c grep with unmerged index 2007-11-05 18:57:58 -08:00
builtin-init-db.c git-init: autodetect core.symlinks 2007-08-31 00:25:04 -07:00
builtin-log.c git-format-patch --in-reply-to: accept <message@id> with angle brackets 2007-09-14 00:49:12 -07:00
builtin-ls-files.c Must not modify the_index.cache as it may be passed to realloc at some point. 2007-10-02 23:18:58 -07:00
builtin-ls-tree.c Merge branch 'jn/lstree' 2007-05-23 00:17:47 -07:00
builtin-mailinfo.c Temporary fix for stack smashing in mailinfo 2007-08-30 18:46:37 -07:00
builtin-mailsplit.c git-mailsplit: with maildirs not only process cur/, but also new/ 2007-11-08 01:08:14 -08:00
builtin-merge-base.c Make every builtin-*.c file #include "builtin.h" 2007-07-14 22:44:09 -07:00
builtin-merge-file.c Make every builtin-*.c file #include "builtin.h" 2007-07-14 22:44:09 -07:00
builtin-mv.c Merge branch 'jc/index-output' 2007-04-07 02:26:24 -07:00
builtin-name-rev.c name-rev: Fix non-shortest description 2007-08-27 22:36:43 -07:00
builtin-pack-objects.c fix same sized delta logic 2007-08-30 19:18:31 -07:00
builtin-pack-refs.c Make every builtin-*.c file #include "builtin.h" 2007-07-14 22:44:09 -07:00
builtin-prune-packed.c prune-packed: add -q to usage 2007-01-18 14:30:05 -08:00
builtin-prune.c minor git-prune optimization 2007-03-20 22:17:47 -07:00
builtin-push.c Make --no-thin the default in git-push to save server resources 2007-09-10 00:00:26 -07:00
builtin-read-tree.c Clean-up read-tree error condition. 2007-08-16 21:19:06 -07:00
builtin-reflog.c git-update-ref: add --no-deref option for overwriting/detaching ref 2007-05-10 15:24:44 -07:00
builtin-rerere.c Make every builtin-*.c file #include "builtin.h" 2007-07-14 22:44:09 -07:00
builtin-rev-list.c Merge branch 'maint' 2007-07-31 21:12:32 -07:00
builtin-rev-parse.c Clean up work-tree handling 2007-08-01 00:38:31 -07:00
builtin-revert.c cherry-pick/revert: more compact user direction message 2007-10-30 16:49:27 -07:00
builtin-rm.c More permissive "git-rm --cached" behavior without -f. 2007-07-13 23:52:46 -07:00
builtin-runstatus.c Make every builtin-*.c file #include "builtin.h" 2007-07-14 22:44:09 -07:00
builtin-shortlog.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-show-branch.c Lift 16kB limit of log message output 2007-06-13 00:41:21 -07:00
builtin-show-ref.c Make every builtin-*.c file #include "builtin.h" 2007-07-14 22:44:09 -07:00
builtin-stripspace.c Teach "git stripspace" the --strip-comments option 2007-07-26 22:51:44 -07:00
builtin-symbolic-ref.c symbolic-ref, update-ref: do not refuse reflog message with LF 2007-07-29 23:28:55 -07:00
builtin-tag.c git-tag -s must fail if gpg cannot sign the tag. 2007-09-09 21:30:54 -07:00
builtin-tar-tree.c prefixcmp(): fix-up mechanical conversion. 2007-02-20 22:03:15 -08:00
builtin-unpack-objects.c Ensure return value from xread() is always stored into an ssize_t 2007-05-15 21:16:03 -07:00
builtin-update-index.c Fix "git commit directory/" performance anomaly 2007-08-10 13:57:43 -07:00
builtin-update-ref.c symbolic-ref, update-ref: do not refuse reflog message with LF 2007-07-29 23:28:55 -07:00
builtin-upload-archive.c short i/o: fix calls to read to use xread or read_in_full 2007-01-08 15:44:47 -08:00
builtin-verify-pack.c Load core configuration in git-verify-pack. 2006-12-29 11:36:45 -08:00
builtin-verify-tag.c Make verify-tag a builtin. 2007-07-26 22:51:27 -07:00
builtin-write-tree.c Fix racy-git handling in git-write-tree. 2007-08-24 18:53:02 -07:00
builtin.h Make verify-tag a builtin. 2007-07-26 22:51:27 -07:00
cache-tree.c Two trivial -Wcast-qual fixes 2007-06-22 23:19:43 -07:00
cache-tree.h
cache.h ce_match_stat, run_diff_files: use symbolic constants for readability 2007-11-10 00:24:51 -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 simplify inclusion of system header files. 2006-12-20 09:51:35 -08:00
color.h
combine-diff.c Future-proof source for changes in xdemitconf_t 2007-07-06 00:22:12 -07:00
commit.c clear_commit_marks(): avoid deep recursion 2007-10-15 21:05:22 -04:00
commit.h Lift 16kB limit of log message output 2007-06-13 00:41:21 -07:00
config.c Merge branch 'cr/tag' 2007-08-10 23:17:46 -07:00
config.mak.in War on whitespace 2007-06-07 00:04:01 -07:00
configure.ac the ar tool is called gar on some systems 2007-10-02 21:10:25 -07:00
connect.c URL: allow port specification in ssh:// URLs 2007-09-01 03:35:29 -07:00
convert-objects.c War on whitespace 2007-06-07 00:04:01 -07:00
convert.c Fix mishandling of $Id$ expanded in the repository copy in convert.c 2007-05-26 01:12:43 -07:00
copy.c War on whitespace 2007-06-07 00:04:01 -07:00
COPYING
csum-file.c More static 2007-06-13 02:02:10 -07:00
csum-file.h More static 2007-06-13 02:02:10 -07:00
ctype.c War on whitespace 2007-06-07 00:04:01 -07:00
daemon.c git-daemon: fix remote port number in log entry 2007-11-05 18:39:18 -08:00
date.c Teach approxidate() to understand "never" 2007-07-24 17:28:10 -07:00
decorate.c Fix a copy-n-paste bug in the object decorator code. 2007-04-20 19:16:12 -07:00
decorate.h Add a generic "object decorator" interface, and make object refs use it 2007-04-16 16:51:09 -07:00
delta.h Support fetching the memory usage of a delta index 2007-07-12 14:32:35 -07:00
diff-delta.c diff-delta.c: Fix broken skip calculation. 2007-08-23 00:04:10 -07:00
diff-lib.c git-add: make the entry stat-clean after re-adding the same contents 2007-11-10 00:37:39 -08:00
diff.c rename diff_free_filespec_data_large() to diff_free_filespec_blob() 2007-10-02 21:02:09 -07:00
diff.h git-add: make the entry stat-clean after re-adding the same contents 2007-11-10 00:37:39 -08:00
diffcore-break.c Fix diffcore-break total breakage 2007-10-21 01:59:42 -04:00
diffcore-delta.c Introduce diff_filespec_is_binary() 2007-07-06 00:21:41 -07:00
diffcore-order.c Cast 64 bit off_t to 32 bit size_t 2007-03-07 11:15:26 -08:00
diffcore-pickaxe.c War on whitespace 2007-06-07 00:04:01 -07:00
diffcore-rename.c rename diff_free_filespec_data_large() to diff_free_filespec_blob() 2007-10-02 21:02:09 -07:00
diffcore.h rename diff_free_filespec_data_large() to diff_free_filespec_blob() 2007-10-02 21:02:09 -07:00
dir.c Fix directory scanner to correctly ignore files without d_type 2007-10-21 01:44:40 -04:00
dir.h Add functions get_relative_cwd() and is_inside_dir() 2007-08-01 00:38:30 -07:00
dump-cache-tree.c
entry.c ce_match_stat, run_diff_files: use symbolic constants for readability 2007-11-10 00:24:51 -08:00
environment.c Merge branch 'cr/tag' 2007-08-10 23:17:46 -07:00
exec_cmd.c Mechanical conversion to use prefixcmp() 2007-02-20 22:03:15 -08:00
exec_cmd.h Make macros to prevent double-inclusion in headers consistent. 2007-04-29 02:05:11 -07:00
fast-import.c fast-import: Fix argument order to die in file_change_m 2007-10-20 21:43:35 -04:00
fetch-pack.c War on whitespace 2007-06-07 00:04:01 -07:00
fetch.c Merge branch 'maint' 2007-06-26 18:45:29 -07:00
fetch.h
fixup-builtins Start deprecating "git-command" in favor of "git command" 2007-07-02 22:39:10 -07:00
generate-cmdlist.sh More static 2007-06-13 02:02:10 -07:00
git-add--interactive.perl git add -i: Remove unused variables 2007-10-15 21:00:40 -04:00
git-am.sh apply: get rid of --index-info in favor of --build-fake-ancestor 2007-09-26 13:42:10 -07:00
git-archimport.perl Make git-archimport log entries more consistent 2007-08-30 19:22:02 -07:00
git-bisect.sh Rewrite "git-frotz" to "git frotz" 2007-07-02 22:52:14 -07:00
git-checkout.sh Alter git-checkout reflog message to include "from" branch 2007-07-04 12:56:02 -07:00
git-clean.sh Supplant the "while case ... break ;; esac" idiom 2007-09-23 16:12:00 -07:00
git-clone.sh honor the http.sslVerify option in shell scripts 2007-10-28 14:16:59 -07:00
git-commit.sh git-commit: initialize TMP_INDEX just to be sure. 2007-10-02 11:48:06 -07:00
git-compat-util.h Introduces xmkstemp() 2007-08-14 22:20:23 -07:00
git-cvsexportcommit.perl cvsexportcommit: fix for commits that do not have parents 2007-10-31 23:51:13 -07:00
git-cvsimport.perl git-cvsimport: really convert underscores in branch names to dots with -u 2007-11-03 21:31:22 -07:00
git-cvsserver.perl cvsserver: Use exit 1 instead of die when req_Root fails. 2007-10-18 03:02:15 -04:00
git-fetch.sh Supplant the "while case ... break ;; esac" idiom 2007-09-23 16:12:00 -07:00
git-filter-branch.sh filter-branch: update current branch when rewritten 2007-10-16 22:47:51 -04:00
git-instaweb.sh instaweb: Minor cleanups and fixes for potential problems 2007-11-08 23:59:27 -08:00
git-lost-found.sh Rewrite "git-frotz" to "git frotz" 2007-07-02 22:52:14 -07:00
git-ls-remote.sh honor the http.sslVerify option in shell scripts 2007-10-28 14:16:59 -07:00
git-merge-octopus.sh Rewrite "git-frotz" to "git frotz" 2007-07-02 22:52:14 -07:00
git-merge-one-file.sh Fix merge-one-file for our-side-added/our-side-removed cases 2007-07-08 18:24:19 -07:00
git-merge-ours.sh Rewrite "git-frotz" to "git frotz" 2007-07-02 22:52:14 -07: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 Supplant the "while case ... break ;; esac" idiom 2007-09-23 16:12:00 -07:00
git-mergetool.sh mergetool: Fix typo in options passed to kdiff3 2007-09-28 22:26:05 -04:00
git-parse-remote.sh Rewrite "git-frotz" to "git frotz" 2007-07-02 22:52:14 -07:00
git-pull.sh Make git-pull complain and give advice when there is nothing to merge with 2007-10-02 17:27:48 -07:00
git-quiltimport.sh quiltimport: Skip non-existent patches 2007-09-27 16:19:19 -07:00
git-rebase--interactive.sh Avoid a few unportable, needlessly nested "...`...". 2007-11-08 15:54:58 -08:00
git-rebase.sh Fixing path quoting in git-rebase 2007-11-02 16:15:08 -07:00
git-relink.perl
git-remote.perl git-remote: fix "Use of uninitialized value in string ne" 2007-10-24 18:47:50 -07:00
git-repack.sh Supplant the "while case ... break ;; esac" idiom 2007-09-23 16:12:00 -07:00
git-request-pull.sh Avoid a few unportable, needlessly nested "...`...". 2007-11-08 15:54:58 -08:00
git-reset.sh Supplant the "while case ... break ;; esac" idiom 2007-09-23 16:12:00 -07:00
git-send-email.perl git-send-email: Change the prompt for the subject of the initial message. 2007-11-09 00:00:09 -08:00
git-sh-setup.sh git-sh-setup: typofix in comments 2007-09-15 16:33:22 -07:00
git-stash.sh Paper bag fix diff invocation in 'git stash show' 2007-10-19 02:18:14 -04:00
git-submodule.sh Fix sed string regex escaping in module_name. 2007-11-08 15:56:22 -08:00
git-svn.perl git-svn: fix dcommit clobbering when committing a series of diffs 2007-11-05 12:57:34 -08:00
git-svnimport.perl git-svnimport: Use separate arguments in the pipe for git-rev-parse 2007-09-18 14:00:20 -07:00
GIT-VERSION-GEN GIT 1.5.3.5 2007-10-31 12:20:05 -07:00
git.c git --bare cmd: do not unconditionally nuke GIT_DIR 2007-08-27 22:44:41 -07:00
git.spec.in GIT 1.5.3.1: obsolete git-p4 in RPM spec file. 2007-09-03 01:28:37 -07:00
gitk gitk: Fix bug causing undefined variable error when cherry-picking 2007-08-29 22:41:34 +10:00
grep.c Move buffer_is_binary() to xdiff-interface.h 2007-06-15 23:27:23 -07:00
grep.h
hash-object.c index_fd(): pass optional path parameter as hint for blob conversion 2007-02-28 12:00:00 -08:00
help.c War on whitespace 2007-06-07 00:04:01 -07:00
http-fetch.c War on whitespace 2007-06-07 00:04:01 -07:00
http-push.c War on whitespace 2007-06-07 00:04:01 -07:00
http.c War on whitespace 2007-06-07 00:04:01 -07:00
http.h http-fetch: Disable use of curl multi support for libcurl < 7.16. 2007-05-03 22:12:40 -07:00
ident.c Improved hint on how to set identity 2007-08-13 23:34:38 -07:00
imap-send.c War on whitespace 2007-06-07 00:04:01 -07:00
index-pack.c Use xmkstemp() instead of mkstemp() 2007-08-14 22:20:26 -07:00
INSTALL Mention 'cpio' dependency in INSTALL 2007-10-02 17:35:29 -07:00
interpolate.c Lift 16kB limit of log message output 2007-06-13 00:41:21 -07:00
interpolate.h Lift 16kB limit of log message output 2007-06-13 00:41:21 -07:00
list-objects.c rename dirlink to gitlink. 2007-05-21 23:34:54 -07:00
list-objects.h
local-fetch.c War on whitespace 2007-06-07 00:04:01 -07:00
lockfile.c fully resolve symlinks when creating lockfiles 2007-07-27 00:02:05 -07:00
log-tree.c Clean up "git log" format with DIFF_FORMAT_NO_OUTPUT 2007-10-15 20:24:27 -04:00
log-tree.h
mailmap.c War on whitespace 2007-06-07 00:04:01 -07:00
mailmap.h Split out mailmap handling out of shortlog 2007-04-29 02:05:06 -07:00
Makefile Makefile: add missing dependency on wt-status.h 2007-11-08 16:41:56 -08:00
match-trees.c War on whitespace 2007-06-07 00:04:01 -07:00
merge-file.c Future-proof source for changes in xdemitconf_t 2007-07-06 00:22:12 -07:00
merge-index.c War on whitespace 2007-06-07 00:04:01 -07:00
merge-recursive.c Make merge-recursive honor diff.renamelimit 2007-10-30 17:27:40 -07:00
merge-tree.c Future-proof source for changes in xdemitconf_t 2007-07-06 00:22:12 -07:00
mktag.c Rename read_pipe() with read_fd() and make its buffer nul-terminated. 2007-07-18 17:30:03 -07:00
mktree.c convert object type handling from a string to a number 2007-02-27 01:34:21 -08:00
object-refs.c War on whitespace 2007-06-07 00:04:01 -07:00
object.c Don't assume tree entries that are not dirs are blobs 2007-06-06 15:43:18 -07:00
object.h War on whitespace 2007-06-07 00:04:01 -07:00
pack-check.c pack-check: Sort entries by pack offset before unpacking them. 2007-06-06 16:04:02 -07:00
pack-redundant.c War on whitespace 2007-06-07 00:04:01 -07:00
pack-write.c Use xmkstemp() instead of mkstemp() 2007-08-14 22:20:26 -07:00
pack.h Unify write_index_file functions 2007-06-02 13:14:18 -07:00
pager.c pager: find out pager setting from configuration 2007-08-06 21:10:59 -07:00
patch-delta.c make patch_delta() error cases a bit more verbose 2006-12-18 15:30:17 -08:00
patch-id.c War on whitespace 2007-06-07 00:04:01 -07:00
patch-ids.c Refactor patch-id filtering out of git-cherry and git-format-patch. 2007-04-11 20:02:03 -07:00
patch-ids.h Refactor patch-id filtering out of git-cherry and git-format-patch. 2007-04-11 20:02:03 -07:00
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
peek-remote.c connect: display connection progress 2007-05-16 12:48:18 -07:00
pkt-line.c War on whitespace 2007-06-07 00:04:01 -07:00
pkt-line.h
progress.c Fix the progress code to output LF only when it is really needed 2007-05-23 11:30:49 -07:00
progress.h Fix the progress code to output LF only when it is really needed 2007-05-23 11:30:49 -07:00
quote.c Add core.quotepath configuration variable. 2007-06-24 15:11:42 -07:00
quote.h Even more missing static 2007-06-08 02:54:57 -07:00
reachable.c Merge branch 'maint' 2007-07-02 17:12:48 -07:00
reachable.h Move traversal of reachable objects into a separate library. 2007-01-06 22:57:34 -08:00
read-cache.c git-add: make the entry stat-clean after re-adding the same contents 2007-11-10 00:37:39 -08:00
README Update README to point at a few key periodical messages to the list 2007-03-25 17:42:32 -07:00
receive-pack.c Improve receive-pack error message about funny ref creation 2007-10-20 21:49:24 -04:00
reflog-walk.c git log -g: Complain, but do not fail, when no reflogs are there 2007-07-24 17:28:10 -07:00
reflog-walk.h git log -g: Complain, but do not fail, when no reflogs are there 2007-07-24 17:28:10 -07:00
refs.c Fix filehandle leak in "git branch -D" 2007-08-10 22:50:06 -07:00
refs.h git-update-ref: add --no-deref option for overwriting/detaching ref 2007-05-10 15:24:44 -07:00
RelNotes Start preparing for 1.5.3.6 2007-11-09 00:17:52 -08:00
remote.c Prevent send-pack from segfaulting (backport from 'master') 2007-10-30 16:21:56 -07:00
remote.h Add for_each_remote() function, and extend remote_find_tracking() 2007-07-11 15:28:15 -07:00
revision.c Fix embarrassing "git log --follow" bug 2007-10-15 20:15:58 -04:00
revision.h Add --log-size to git log to print message size 2007-08-14 01:59:33 -07:00
rsh.c simplify inclusion of system header files. 2006-12-20 09:51:35 -08:00
rsh.h War on whitespace 2007-06-07 00:04:01 -07:00
run-command.c Allow environment variables to be unset in the processes started by run_command 2007-05-23 22:38:44 -07:00
run-command.h Allow environment variables to be unset in the processes started by run_command 2007-05-23 22:38:44 -07:00
send-pack.c helpful error message when send-pack finds no refs in common. 2007-10-16 22:01:15 -04:00
server-info.c Fix core.sharedRepository = 2 2007-07-11 13:52:16 -07:00
setup.c Fix setup_git_directory_gently() with relative GIT_DIR & GIT_WORK_TREE 2007-10-16 20:18:04 -04:00
sha1_file.c sha1_file.c: avoid gcc signed overflow warnings 2007-10-29 11:56:57 -07:00
sha1_name.c Make show_rfc2822_date() just another date output format. 2007-07-13 23:14:52 -07:00
shallow.c War on whitespace 2007-06-07 00:04:01 -07:00
shell.c Mechanical conversion to use prefixcmp() 2007-02-20 22:03:15 -08:00
show-index.c show-index.c: learn about index v2 2007-04-10 12:48:14 -07:00
sideband.c
sideband.h
ssh-fetch.c Don't force everybody to call setup_ident(). 2007-01-28 01:58:50 -08:00
ssh-pull.c
ssh-push.c
ssh-upload.c War on whitespace 2007-06-07 00:04:01 -07:00
strbuf.c War on whitespace 2007-06-07 00:04:01 -07:00
strbuf.h
symlinks.c Add has_symlink_leading_path() function. 2007-05-11 22:11:07 -07:00
tag.c Merge branch 'maint-1.5.1' into maint 2007-05-28 23:54:26 -07: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 Add test-chmtime: a utility to change mtime on files 2007-02-25 11:09:56 -08:00
test-date.c simplify inclusion of system header files. 2006-12-20 09:51:35 -08:00
test-delta.c Fix compilation of test-delta 2007-05-01 02:59:08 -07:00
test-genrandom.c simple random data generator for tests 2007-04-11 19:23:32 -07:00
test-match-trees.c A new merge stragety 'subtree'. 2007-04-07 02:29:40 -07:00
test-sha1.c
test-sha1.sh
trace.c git-branch, git-checkout: autosetup for remote branch tracking 2007-03-10 23:41:58 -08:00
tree-diff.c Fix diffcore-break total breakage 2007-10-21 01:59:42 -04:00
tree-walk.c War on whitespace 2007-06-07 00:04:01 -07:00
tree-walk.h Two trivial -Wcast-qual fixes 2007-06-22 23:19:43 -07: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 ce_match_stat, run_diff_files: use symbolic constants for readability 2007-11-10 00:24:51 -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 Even more missing static 2007-06-08 02:54:57 -07:00
usage.c print warning/error/fatal messages in one shot 2007-11-09 22:25:36 -08:00
utf8.c wcwidth redeclaration 2007-05-07 22:02:40 -07:00
utf8.h Actually make print_wrapped_text() useful 2007-02-27 17:29:02 -08:00
var.c War on whitespace 2007-06-07 00:04:01 -07:00
write_or_die.c Don't fflush(stdout) when it's not helpful 2007-06-30 20:16:12 -07:00
wt-status.c Fix the rename detection limit checking 2007-09-14 12:12:57 -07:00
wt-status.h Provide better feedback for the untracked only case in status output 2007-01-10 14:29:21 -08:00
xdiff-interface.c Per-path attribute based hunk header selection. 2007-07-06 01:20:47 -07:00
xdiff-interface.h Per-path attribute based hunk header selection. 2007-07-06 01:20:47 -07:00

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

	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.