Go to file
Linus Torvalds 750f7b668f Finally implement "git log --follow"
Ok, I've really held off doing this too damn long, because I'm lazy, and I
was always hoping that somebody else would do it.

But no, people keep asking for it, but nobody actually did anything, so I
decided I might as well bite the bullet, and instead of telling people
they could add a "--follow" flag to "git log" to do what they want to do,
I decided that it looks like I just have to do it for them..

The code wasn't actually that complicated, in that the diffstat for this
patch literally says "70 insertions(+), 1 deletions(-)", but I will have
to admit that in order to get to this fairly simple patch, you did have to
know and understand the internal git diff generation machinery pretty
well, and had to really be able to follow how commit generation interacts
with generating patches and generating the log.

So I suspect that while I was right that it wasn't that hard, I might have
been expecting too much of random people - this patch does seem to be
firmly in the core "Linus or Junio" territory.

To make a long story short: I'm sorry for it taking so long until I just
did it.

I'm not going to guarantee that this works for everybody, but you really
can just look at the patch, and after the appropriate appreciative noises
("Ooh, aah") over how clever I am, you can then just notice that the code
itself isn't really that complicated.

All the real new code is in the new "try_to_follow_renames()" function. It
really isn't rocket science: we notice that the pathname we were looking
at went away, so we start a full tree diff and try to see if we can
instead make that pathname be a rename or a copy from some other previous
pathname. And if we can, we just continue, except we show *that*
particular diff, and ever after we use the _previous_ pathname.

One thing to look out for: the "rename detection" is considered to be a
singular event in the _linear_ "git log" output! That's what people want
to do, but I just wanted to point out that this patch is *not* carrying
around a "commit,pathname" kind of pair and it's *not* going to be able to
notice the file coming from multiple *different* files in earlier history.

IOW, if you use "git log --follow", then you get the stupid CVS/SVN kind
of "files have single identities" kind of semantics, and git log will just
pick the identity based on the normal move/copy heuristics _as_if_ the
history could be linearized.

Put another way: I think the model is broken, but given the broken model,
I think this patch does just about as well as you can do. If you have
merges with the same "file" having different filenames over the two
branches, git will just end up picking _one_ of the pathnames at the point
where the newer one goes away. It never looks at multiple pathnames in
parallel.

And if you understood all that, you probably didn't need it explained, and
if you didn't understand the above blathering, it doesn't really mtter to
you. What matters to you is that you can now do

	git log -p --follow builtin-rev-list.c

and it will find the point where the old "rev-list.c" got renamed to
"builtin-rev-list.c" and show it as such.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2007-06-22 23:37:11 -07:00
Documentation Document git-gui, git-citool as mainporcelain manual pages 2007-06-22 22:32:32 -07:00
arm War on whitespace 2007-06-07 00:04:01 -07:00
compat Merge branch 'maint' to sync with GIT 1.5.2.2 2007-06-16 01:22:10 -07:00
contrib gitview: run blame with -C -C 2007-06-13 02:14:26 -07:00
git-gui Merge branch 'master' of git://repo.or.cz/git-gui 2007-06-12 00:14:47 -07:00
gitweb gitweb: change filename/directory name of snapshots 2007-06-12 22:22:06 -07:00
mozilla-sha1 War on whitespace 2007-06-07 00:04:01 -07:00
perl War on whitespace 2007-06-07 00:04:01 -07:00
ppc War on whitespace 2007-06-07 00:04:01 -07:00
t filter-branch: add example to move everything into a subdirectory 2007-06-22 23:20:44 -07:00
templates Remove trailing slash from $(template_dir). 2007-06-12 00:23:31 -07:00
xdiff Missing statics. 2007-06-08 02:37:19 -07:00
.gitignore Merge branch 'maint' to sync with GIT 1.5.2.2 2007-06-16 01:22:10 -07:00
.mailmap Add DLH to .mailmap 2007-05-30 10:45:55 -07:00
COPYING
GIT-VERSION-GEN GIT 1.5.2.2 2007-06-16 01:13:35 -07:00
INSTALL INSTALL: explain how to build documentation 2007-06-20 16:22:09 -07:00
Makefile Merge branch 'js/filter' 2007-06-22 23:20:40 -07:00
README Update README to point at a few key periodical messages to the list 2007-03-25 17:42:32 -07:00
RelNotes GIT 1.5.2.2 2007-06-16 01:13:35 -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 Fix crash in t0020 (crlf conversion) 2007-04-22 10:44:56 -07: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 builtin-add: simplify (and increase accuracy of) exclude handling 2007-06-13 00:41:52 -07:00
builtin-annotate.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-apply.c git-apply: what is detected and fixed is not just trailing spaces. 2007-06-02 20:02:19 -07:00
builtin-archive.c connect: display connection progress 2007-05-16 12:48:18 -07:00
builtin-blame.c git-blame -w: ignore whitespace 2007-06-09 18:34:58 -07:00
builtin-branch.c Merge branch 'ei/oneline+add-empty' 2007-06-22 23:32:19 -07:00
builtin-bundle.c Ensure return value from xread() is always stored into an ssize_t 2007-05-15 21:16:03 -07:00
builtin-cat-file.c Cleanup variables in cat-file 2007-04-22 00:43:24 -07:00
builtin-check-attr.c Fix funny types used in attribute value representation 2007-04-18 16:17:13 -07:00
builtin-check-ref-format.c
builtin-checkout-index.c _GIT_INDEX_OUTPUT: allow plumbing to output to an alternative index file. 2007-04-03 23:44:32 -07:00
builtin-commit-tree.c init_buffer(): Kill buf pointer 2007-04-25 13:45:12 -07:00
builtin-config.c Update git-config documentation 2007-04-18 22:08:16 -07: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 Diff between two blobs should take mode changes into account now. 2007-04-24 00:08:49 -07:00
builtin-fetch--tool.c Merge branch 'sv/checkout' 2007-05-20 02:18:47 -07:00
builtin-fmt-merge-msg.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-for-each-ref.c General const correctness fixes 2007-03-07 10:47:10 -08:00
builtin-fsck.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-gc.c Make "git gc" pack all refs by default 2007-05-24 19:05:39 -07:00
builtin-grep.c sscanf/strtoul: parse integers robustly 2007-04-14 19:47:20 -07:00
builtin-init-db.c Remove trailing slash from $(template_dir). 2007-06-12 00:23:31 -07:00
builtin-log.c Finally implement "git log --follow" 2007-06-22 23:37:11 -07:00
builtin-ls-files.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-ls-tree.c Merge branch 'jn/lstree' 2007-05-23 00:17:47 -07:00
builtin-mailinfo.c More missing static 2007-06-08 02:37:19 -07:00
builtin-mailsplit.c More missing static 2007-06-08 02:37:19 -07:00
builtin-merge-base.c
builtin-merge-file.c git-merge-file: refuse to merge binary files 2007-06-04 23:10:29 -07:00
builtin-mv.c Merge branch 'jc/index-output' 2007-04-07 02:26:24 -07:00
builtin-name-rev.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-pack-objects.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-pack-refs.c Make the pack-refs interfaces usable from outside 2007-05-26 20:00:55 -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 Move refspec pattern matching to match_refs(). 2007-05-26 01:20:10 -07:00
builtin-read-tree.c Document git read-tree --trivial 2007-06-16 13:08:09 -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 War on whitespace 2007-06-07 00:04:01 -07:00
builtin-rev-list.c Lift 16kB limit of log message output 2007-06-13 00:41:21 -07:00
builtin-rev-parse.c prefixcmp(): fix-up leftover strncmp(). 2007-02-20 22:03:15 -08:00
builtin-revert.c More static 2007-06-13 02:02:10 -07:00
builtin-rm.c Add --ignore-unmatch option to exit with zero status when no files are removed. 2007-04-17 00:19:11 -07:00
builtin-runstatus.c
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 Merge branch 'maint' 2007-02-24 01:42:06 -08:00
builtin-stripspace.c Even more missing static 2007-06-08 02:54:57 -07:00
builtin-symbolic-ref.c add logref support to git-symbolic-ref 2007-01-28 02:16:46 -08: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 rename dirlink to gitlink. 2007-05-21 23:34:54 -07:00
builtin-update-ref.c git-update-ref: add --no-deref option for overwriting/detaching ref 2007-05-10 15:24:44 -07:00
builtin-upload-archive.c
builtin-verify-pack.c
builtin-write-tree.c Merge branch 'maint' 2007-04-25 23:31:45 -07:00
builtin.h Even more missing static 2007-06-08 02:54:57 -07:00
cache-tree.c Two trivial -Wcast-qual fixes 2007-06-22 23:19:43 -07:00
cache-tree.h
cache.h Merge branch 'ei/oneline+add-empty' 2007-06-22 23:32:19 -07:00
check-builtins.sh
check-racy.c
color.c
color.h
combine-diff.c Ensure return value from xread() is always stored into an ssize_t 2007-05-15 21:16:03 -07:00
commit.c Merge branch 'jc/oneline' 2007-06-22 23:33:08 -07:00
commit.h Lift 16kB limit of log message output 2007-06-13 00:41:21 -07:00
config.c -Wold-style-definition fix 2007-06-13 02:02:10 -07:00
config.mak.in War on whitespace 2007-06-07 00:04:01 -07:00
configure.ac Eliminate checks of user-specified Tcl/Tk interpreter. 2007-03-31 23:59:47 -07:00
connect.c Do not use h_errno after connect(2): the function does not set it 2007-06-16 09:11:58 -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
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 Missing statics. 2007-06-08 02:37:19 -07:00
date.c War on whitespace 2007-06-07 00:04:01 -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
diff-delta.c diff-delta: use realloc instead of xrealloc 2007-05-31 00:15:18 -07:00
diff-lib.c War on whitespace 2007-06-07 00:04:01 -07:00
diff.c Finally implement "git log --follow" 2007-06-22 23:37:11 -07:00
diff.h Finally implement "git log --follow" 2007-06-22 23:37:11 -07:00
diffcore-break.c Cast 64 bit off_t to 32 bit size_t 2007-03-07 11:15:26 -08:00
diffcore-delta.c
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 diffcore-rename: favour identical basenames 2007-06-22 22:43:51 -07:00
diffcore.h Make macros to prevent double-inclusion in headers consistent. 2007-04-29 02:05:11 -07:00
dir.c Fix ALLOC_GROW calls with obsolete semantics 2007-06-16 18:00:07 -07:00
dir.h builtin-add: simplify (and increase accuracy of) exclude handling 2007-06-13 00:41:52 -07:00
dump-cache-tree.c
entry.c War on whitespace 2007-06-07 00:04:01 -07:00
environment.c War on whitespace 2007-06-07 00:04:01 -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 Merge branch 'maint' 2007-05-23 22:37:23 -07:00
fetch-pack.c War on whitespace 2007-06-07 00:04:01 -07:00
fetch.c War on whitespace 2007-06-07 00:04:01 -07:00
fetch.h
generate-cmdlist.sh More static 2007-06-13 02:02:10 -07:00
git-add--interactive.perl git-add -i: update removed path correctly. 2007-02-07 10:56:38 -08:00
git-am.sh More echo "$user_message" fixes. 2007-05-26 00:33:03 -07:00
git-archimport.perl War on whitespace 2007-06-07 00:04:01 -07:00
git-bisect.sh Bisect: simplify "bisect start" logging. 2007-04-16 21:44:40 -07:00
git-checkout.sh Merge branch 'maint' 2007-06-08 02:55:19 -07:00
git-clean.sh Add clean.requireForce option, and add -f option to git-clean to override it 2007-04-23 22:13:50 -07:00
git-clone.sh Cloning from a repo without "current branch" 2007-06-20 16:33:24 -07:00
git-commit.sh War on whitespace 2007-06-07 00:04:01 -07:00
git-compat-util.h Add a local implementation of hstrerror for the system which do not have it 2007-06-15 22:48:34 -07:00
git-cvsexportcommit.perl War on whitespace 2007-06-07 00:04:01 -07:00
git-cvsimport.perl Generate tags with correct timestamp (git-svnimport) 2007-06-22 22:13:49 -07:00
git-cvsserver.perl cvsserver: Actually implement --export-all 2007-06-15 22:38:48 -07:00
git-fetch.sh Add another verbosity level to git-fetch 2007-05-24 21:37:03 -07:00
git-filter-branch.sh filter-branch: add example to move everything into a subdirectory 2007-06-22 23:20:44 -07:00
git-instaweb.sh [PATCH] Rename git-repo-config to git-config. 2007-01-28 16:16:53 -08:00
git-lost-found.sh Fix lost-found to show commits only referenced by reflogs 2007-04-05 15:00:03 -07:00
git-ls-remote.sh Add git-bundle: move objects and references by archive 2007-02-22 22:30:33 -08:00
git-merge-octopus.sh
git-merge-one-file.sh War on whitespace 2007-06-07 00:04:01 -07:00
git-merge-ours.sh Use diff* with --exit-code in git-am, git-rebase and git-merge-ours 2007-03-24 23:01:36 -07:00
git-merge-resolve.sh Assorted typo fixes 2007-02-03 21:49:54 -08:00
git-merge-stupid.sh
git-merge.sh Merge branch 'ar/mergestat' 2007-05-29 00:38:52 -07:00
git-mergetool.sh git-mergetool: Make default selection of merge-tool more intelligent 2007-06-10 11:17:30 -04:00
git-p4import.py War on whitespace 2007-06-07 00:04:01 -07:00
git-parse-remote.sh Allow fetching references from any namespace 2007-05-12 09:36:06 -07:00
git-pull.sh Add a configuration option to control diffstat after merge 2007-05-24 21:37:08 -07:00
git-quiltimport.sh applymbox & quiltimport: typofix. 2007-04-24 14:27:41 -07:00
git-rebase.sh git-rebase: suggest to use git-add instead of git-update-index 2007-06-02 12:07:44 -07:00
git-relink.perl
git-remote.perl git-remote show: Also shorten non-fast-forward refs in the 'push' listing 2007-06-12 22:26:07 -07:00
git-repack.sh Ensure git-repack -a -d --max-pack-size=N deletes correct packs 2007-05-24 19:45:14 -07:00
git-request-pull.sh Improve request-pull to handle non-rebased branches 2007-05-03 23:27:03 -07:00
git-reset.sh add file checkout progress 2007-04-23 21:39:28 -07:00
git-send-email.perl Unquote From line from patch before comparing with given from address. 2007-06-12 00:13:49 -07:00
git-sh-setup.sh Commands requiring a work tree must not run in GIT_DIR 2007-02-05 14:02:16 -08:00
git-submodule.sh git-submodule: give submodules proper names 2007-06-12 01:06:21 -07:00
git-svn.perl git-svn: avoid string eval for defining functions 2007-06-16 01:20:26 -07:00
git-svnimport.perl Generate tags with correct timestamp (git-svnimport) 2007-06-22 22:13:49 -07:00
git-tag.sh War on whitespace 2007-06-07 00:04:01 -07:00
git-verify-tag.sh War on whitespace 2007-06-07 00:04:01 -07:00
git.c Merge branch 'maint-1.5.1' into maint 2007-05-20 19:57:00 -07:00
git.spec.in Document git-gui, git-citool as mainporcelain manual pages 2007-06-22 22:32:32 -07:00
gitk War on whitespace 2007-06-07 00:04:01 -07: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 $EMAIL is a last resort fallback, as it's system-wide. 2007-06-15 23:33:06 -07:00
imap-send.c War on whitespace 2007-06-07 00:04:01 -07:00
index-pack.c Unify write_index_file functions 2007-06-02 13:14:18 -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 War on whitespace 2007-06-07 00:04:01 -07:00
log-tree.c Lift 16kB limit of log message output 2007-06-13 00:41:21 -07: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
match-trees.c War on whitespace 2007-06-07 00:04:01 -07:00
merge-file.c convert object type handling from a string to a number 2007-02-27 01:34:21 -08:00
merge-index.c War on whitespace 2007-06-07 00:04:01 -07:00
merge-recursive.c merge-recursive: refuse to merge binary files 2007-06-15 23:28:10 -07:00
merge-tree.c Remove "pathlen" from "struct name_entry" 2007-03-21 10:21:56 -07:00
mktag.c Remove unnecessary code and comments on non-existing 8kB tag object restriction 2007-06-09 10:51:46 -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 Unify write_index_file functions 2007-06-02 13:14:18 -07:00
pack.h Unify write_index_file functions 2007-06-02 13:14:18 -07:00
pager.c pager: Work around window resizing bug in 'less' 2007-02-05 15:42:36 -08:00
patch-delta.c
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 War on whitespace 2007-06-07 00:04:01 -07:00
path-list.h Make macros to prevent double-inclusion in headers consistent. 2007-04-29 02:05:11 -07:00
path.c General const correctness fixes 2007-03-07 10:47:10 -08: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 Even more missing static 2007-06-08 02:54:57 -07:00
quote.h Even more missing static 2007-06-08 02:54:57 -07:00
reachable.c Initialize tree descriptors with a helper function rather than by hand. 2007-03-21 10:21:57 -07:00
reachable.h
read-cache.c War on whitespace 2007-06-07 00:04:01 -07:00
receive-pack.c git-update-ref: add --no-deref option for overwriting/detaching ref 2007-05-10 15:24:44 -07:00
reflog-walk.c log --reflog: use dwim_log 2007-02-08 17:48:22 -08:00
reflog-walk.h log --reflog: honour --relative-date 2007-02-08 16:20:52 -08:00
refs.c More static 2007-06-13 02:02:10 -07:00
refs.h git-update-ref: add --no-deref option for overwriting/detaching ref 2007-05-10 15:24:44 -07:00
remote.c Merge branch 'jc/remote' 2007-06-16 01:22:45 -07:00
remote.h Add handlers for fetch-side configuration of remotes. 2007-05-20 21:32:56 -07:00
revision.c Finally implement "git log --follow" 2007-06-22 23:37:11 -07:00
revision.h More missing static 2007-06-08 02:37:19 -07:00
rsh.c
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 Move refspec pattern matching to match_refs(). 2007-05-26 01:20:10 -07:00
server-info.c Don't coredump on bad refs in update-server-info. 2007-01-31 13:09:58 -08:00
setup.c War on whitespace 2007-06-07 00:04:01 -07:00
sha1_file.c More static 2007-06-13 02:02:10 -07:00
sha1_name.c Active_nr is unsigned, hence can't be < 0 2007-06-08 02:37:18 -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-chmtime.c Add test-chmtime: a utility to change mtime on files 2007-02-25 11:09:56 -08:00
test-date.c
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 Finally implement "git log --follow" 2007-06-22 23:37:11 -07: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 Merge branch 'sv/objfixes' 2007-06-06 15:43:24 -07:00
tree.h
unpack-file.c convert object type handling from a string to a number 2007-02-27 01:34:21 -08:00
unpack-trees.c Merge branch 'maint-1.5.1' into maint 2007-05-20 19:57:00 -07:00
unpack-trees.h unpack-trees: get rid of *indpos parameter. 2007-04-04 00:19:28 -07:00
update-server-info.c
upload-pack.c Even more missing static 2007-06-08 02:54:57 -07:00
usage.c Rename warn() to warning() to fix symbol conflicts on BSD and Mac OS 2007-03-31 01:11:11 -07: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 write_in_full: size_t is unsigned. 2007-01-26 17:39:03 -08:00
wt-status.c Missing statics. 2007-06-08 02:37:19 -07:00
wt-status.h
xdiff-interface.c Move buffer_is_binary() to xdiff-interface.h 2007-06-15 23:27:23 -07:00
xdiff-interface.h Move buffer_is_binary() to xdiff-interface.h 2007-06-15 23:27:23 -07: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.