Go to file
René Scharfe cde75e59e1 --pretty=format: on-demand format expansion
Some of the --pretty=format placeholders expansions are expensive to
calculate.  This is made worse by the current code's use of
interpolate(), which requires _all_ placeholders are to be prepared
up front.

One way to speed this up is to check which placeholders are present
in the format string and to prepare only the expansions that are
needed.  That still leaves the allocation overhead of interpolate().

Another way is to use a callback based approach together with the
strbuf library to keep allocations to a minimum and avoid string
copies.  That's what this patch does.  It introduces a new strbuf
function, strbuf_expand().

The function takes a format string, list of placeholder strings,
a user supplied function 'fn', and an opaque pointer 'context'
to tell 'fn' what thingy to operate on.

The function 'fn' is expected to accept a strbuf, a parsed
placeholder string and the 'context' pointer, and append the
interpolated value for the 'context' thingy, according to the
format specified by the placeholder.

Thanks to Pierre Habouzit for his suggestion to use strchrnul() and
the code surrounding its callsite.  And thanks to Junio for most of
this commit message. :)

Here my measurements of most of Paul Mackerras' test cases that
highlighted the performance problem (best of three runs):

(master)
$ time git log --pretty=oneline >/dev/null

real    0m0.390s
user    0m0.340s
sys     0m0.040s

(master)
$ time git log --pretty=raw >/dev/null

real    0m0.434s
user    0m0.408s
sys     0m0.016s

(master)
$ time git log --pretty="format:%H {%P} %ct" >/dev/null

real    0m1.347s
user    0m0.080s
sys     0m1.256s

(interp_find_active -- Dscho)
$ time ./git log --pretty="format:%H {%P} %ct" >/dev/null

real    0m0.694s
user    0m0.020s
sys     0m0.672s

(strbuf_expand -- this patch)
$ time ./git log --pretty="format:%H {%P} %ct" >/dev/null

real    0m0.395s
user    0m0.352s
sys     0m0.028s

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2007-11-09 01:30:07 -08:00
Documentation Update draft release notes for 1.5.4 2007-11-09 00:32:38 -08:00
arm
compat Add strchrnul() 2007-11-09 01:30:07 -08:00
contrib contrib/hooks/post-receive-email: remove cruft, $committer is not used 2007-11-08 14:18:13 -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: Use config file for repository description and URLs 2007-11-02 18:27:36 -07:00
mozilla-sha1
perl When exec() fails include the failing command in the error message 2007-11-07 11:39:37 -08:00
ppc
t Merge branch 'maint' 2007-11-09 00:21:44 -08:00
templates hooks--update: decline deleting tags or branches by default, add config options 2007-11-08 14:17:32 -08:00
xdiff
.gitignore Merge branch 'ph/parseopt' 2007-11-02 16:42:23 -07:00
.mailmap RelNotes-1.5.4: describe recent updates 2007-10-29 13:33:38 -07:00
COPYING
GIT-VERSION-GEN GIT 1.5.3.5 2007-10-31 12:20:05 -07:00
INSTALL Mention 'cpio' dependency in INSTALL 2007-10-02 17:35:29 -07:00
Makefile Add strchrnul() 2007-11-09 01:30:07 -08:00
README
RelNotes Start preparing for 1.5.3.6 2007-11-09 00:17:52 -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 Merge branch 'ph/parseopt' 2007-11-02 16:42:23 -07:00
builtin-annotate.c
builtin-apply.c Correct some sizeof(size_t) != sizeof(unsigned long) typing errors 2007-10-22 00:00:40 -04:00
builtin-archive.c Merge branch 'js/forkexec' 2007-11-01 13:47:47 -07:00
builtin-blame.c Make git-blame fail when working tree is needed and we're not in one 2007-11-05 22:47:57 -08:00
builtin-branch.c Merge branch 'jc/format-patch-encoding' 2007-11-04 01:28:46 -07:00
builtin-bundle.c Move bundle specific stuff into bundle.[ch] 2007-09-19 03:22:30 -07: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 Full rework of quote_c_style and write_name_quoted. 2007-09-20 23:45:49 -07:00
builtin-commit-tree.c Now that cache.h needs strbuf.h, remove useless includes. 2007-09-16 17:30:03 -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 Make builtin-count-objects.c use parse_options. 2007-10-29 21:03:31 -07:00
builtin-describe.c Make builtin-describe.c use parse_options 2007-10-29 21:03:31 -07:00
builtin-diff-files.c
builtin-diff-index.c
builtin-diff-tree.c
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 Add strchrnul() 2007-11-09 01:30:07 -08:00
builtin-fetch-pack.c restore fetching with thin-pack capability 2007-11-07 16:19:07 -08:00
builtin-fetch.c Merge branch 'np/fetch' 2007-11-04 01:06:48 -07:00
builtin-fmt-merge-msg.c Use xmemdupz() in many places. 2007-09-18 17:42:17 -07:00
builtin-for-each-ref.c Make builtin-for-each-ref.c use parse-opts. 2007-10-29 21:03:31 -07:00
builtin-fsck.c Fixed a command line option type for builtin-fsck.c 2007-10-30 16:12:18 -07:00
builtin-gc.c gc: --prune prunes unreferenced objects. 2007-11-05 16:39:00 -08:00
builtin-grep.c grep with unmerged index 2007-11-05 18:57:58 -08:00
builtin-http-fetch.c Modularize commit-walker 2007-09-19 03:22:30 -07:00
builtin-init-db.c git-init: autodetect core.symlinks 2007-08-31 00:25:04 -07:00
builtin-log.c format-patch -s: add MIME encoding header if signer's name requires so 2007-11-01 17:18:39 -07:00
builtin-ls-files.c Use setup_work_tree() in builtin-ls-files.c 2007-11-05 22:47:57 -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-mv.c Make builtin-mv.c use parse-options 2007-10-29 21:03:31 -07: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 Merge branch 'np/pack' 2007-11-04 01:11:17 -07:00
builtin-pack-refs.c Make builtin-pack-refs.c use parse_options. 2007-10-29 21:03:31 -07: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
builtin-push.c Use parseopts in builtin-push 2007-11-05 13:27:35 -08:00
builtin-read-tree.c
builtin-reflog.c
builtin-rerere.c Export rerere() and launch_editor(). 2007-09-27 01:29:56 -07:00
builtin-reset.c git-reset: add -q option to operate quietly 2007-11-06 00:18:39 -08:00
builtin-rev-list.c format-patch -s: add MIME encoding header if signer's name requires so 2007-11-01 17:18:39 -07:00
builtin-rev-parse.c
builtin-revert.c Merge branch 'jc/revert-merge' 2007-11-04 01:26:02 -07:00
builtin-rm.c Don't always require working tree for git-rm 2007-11-05 22:47:57 -08:00
builtin-runstatus.c
builtin-shortlog.c Use xmemdupz() in many places. 2007-09-18 17:42:17 -07:00
builtin-show-branch.c format-patch -s: add MIME encoding header if signer's name requires so 2007-11-01 17:18:39 -07: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 Small code readability improvement in show_reference() in builtin-tag.c 2007-11-07 17:25:47 -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 double free in builtin-update-index.c 2007-09-29 01:40:19 -07: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 Fix racy-git handling in git-write-tree. 2007-08-24 18:53:02 -07:00
builtin.h "git" returns 1; "git help" and "git help -a" return 0 2007-10-29 20:51:36 -07:00
bundle.c Style: place opening brace of a function definition at column 1 2007-11-08 15:35:32 -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 Merge branch 'ds/maint-deflatebound' 2007-11-07 18:17:20 -08:00
check-builtins.sh
check-racy.c
color.c Enable wt-status output to a given FILE pointer. 2007-09-19 12:52:19 -07:00
color.h Enable wt-status output to a given FILE pointer. 2007-09-19 12:52:19 -07:00
combine-diff.c Full rework of quote_c_style and write_name_quoted. 2007-09-20 23:45:49 -07:00
commit.c Split off the pretty print stuff into its own file 2007-11-05 11:52:14 -08:00
commit.h format-patch -s: add MIME encoding header if signer's name requires so 2007-11-01 17:18:39 -07:00
config.c
config.mak.in Improve accuracy of check for presence of deflateBound. 2007-11-07 17:06:14 -08:00
configure.ac Merge branch 'ds/maint-deflatebound' 2007-11-07 18:17:20 -08:00
connect.c Use start_command() in git_connect() instead of explicit fork/exec. 2007-10-21 01:30:39 -04:00
convert.c Use the asyncronous function infrastructure to run the content filter. 2007-10-21 01:30:42 -04:00
copy.c
csum-file.c add throughput display to git-push 2007-10-30 16:08:40 -07:00
csum-file.h add throughput display to git-push 2007-10-30 16:08:40 -07: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 diff-delta.c: Rationalize culling of hash buckets 2007-09-09 17:16:49 -07:00
diff-lib.c diff --no-index: do not forget to run diff_setup_done() 2007-09-14 12:12:32 -07:00
diff.c Merge branch 'js/forkexec' 2007-11-01 13:47:47 -07:00
diff.h
diffcore-break.c Fix diffcore-break total breakage 2007-10-21 01:59:42 -04: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 Do the fuzzy rename detection limits with the exact renames removed 2007-10-26 23:18:06 -07:00
diffcore.h copy vs rename detection: avoid unnecessary O(n*m) loops 2007-10-26 23:18:06 -07:00
dir.c Style: place opening brace of a function definition at column 1 2007-11-08 15:35:32 -08:00
dir.h Speedup scanning for excluded files. 2007-10-29 17:03:11 -07:00
dump-cache-tree.c
entry.c Correct some sizeof(size_t) != sizeof(unsigned long) typing errors 2007-10-22 00:00:40 -04:00
environment.c
exec_cmd.c use only the $PATH for exec'ing git commands 2007-10-29 20:51:37 -07:00
exec_cmd.h use only the $PATH for exec'ing git commands 2007-10-29 20:51:37 -07:00
fast-import.c fast-import.c: fix regression due to strbuf conversion 2007-10-26 15:28:09 -07: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
git-add--interactive.perl git add -i: Remove unused variables 2007-10-15 21:00:40 -04:00
git-am.sh Merge branch 'jc/am-quiet' 2007-10-18 03:45:05 -04:00
git-archimport.perl Make git-archimport log entries more consistent 2007-08-30 19:22:02 -07:00
git-bisect.sh git-bisect.sh: Fix sed script to work with AIX and BSD sed. 2007-11-09 00:19:24 -08:00
git-checkout.sh post-checkout hook, tests, and docs 2007-09-29 21:11:21 -07:00
git-clean.sh clean: require -f to do damage by default 2007-11-04 01:54:41 -08:00
git-clone.sh git-clone: honor "--" to end argument parsing 2007-11-03 21:44:13 -07:00
git-commit.sh Merge branch 'jc/autogc' 2007-10-03 03:05:32 -07:00
git-compat-util.h Add strchrnul() 2007-11-09 01:30:07 -08:00
git-cvsexportcommit.perl Merge branch 'bk/maint-cvsexportcommit' 2007-11-01 15:39:59 -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-filter-branch.sh filter-branch: update current branch when rewritten 2007-10-16 22:47:51 -04:00
git-instaweb.sh Merge branch 'maint' 2007-11-09 00:21:44 -08:00
git-lost-found.sh Deprecate git-lost-found 2007-11-07 17:12:53 -08: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
git-merge-one-file.sh
git-merge-ours.sh
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 'lh/merge' 2007-10-03 03:05:58 -07:00
git-mergetool.sh mergetool: avoid misleading message "Resetting to default..." 2007-10-18 19:59:58 -04:00
git-parse-remote.sh
git-pull.sh Teach git-pull about --[no-]ff, --no-squash and --commit 2007-10-29 13:32:52 -07:00
git-quiltimport.sh quiltimport: Skip non-existent patches 2007-09-27 16:19:19 -07:00
git-rebase--interactive.sh Merge branch 'maint' 2007-11-09 00:21:44 -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 Merge branch 'maint' 2007-10-26 23:17:23 -07:00
git-repack.sh Stop displaying "Pack pack-$ID created." during git-gc 2007-10-19 01:01:40 -04:00
git-request-pull.sh Avoid a few unportable, needlessly nested "...`...". 2007-11-08 15:54:58 -08:00
git-send-email.perl Merge branch 'maint' 2007-11-09 00:21:44 -08:00
git-sh-setup.sh git-sh-setup.sh: use "git rev-parse --show-cdup" to check for SUBDIRECTORY_OK 2007-10-29 21:14:11 -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 Merge branch 'maint' 2007-11-09 00:21:44 -08:00
git-svn.perl Merge branch 'maint' 2007-11-05 22:03:47 -08:00
git.c Don't always require working tree for git-rm 2007-11-05 22:47:57 -08: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: Use the UI font for the diff/old version/new version radio buttons 2007-10-27 21:31:07 +10:00
grep.c
grep.h
hash-object.c
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 Style: place opening brace of a function definition at column 1 2007-11-08 15:35:32 -08:00
http-push.c errors: "strict subset" -> "ancestor" 2007-11-03 21:29:18 -07:00
http-walker.c Modularize commit-walker 2007-09-19 03:22:30 -07:00
http.c Properly cleanup in http_cleanup so builtin-fetch does not segfault 2007-09-19 03:22:31 -07:00
http.h Make function to refill http queue a callback 2007-09-19 03:22:30 -07:00
ident.c
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/pack' 2007-11-04 01:11:17 -07:00
interpolate.c Merge branch 'mv/unknown' 2007-10-03 04:28:24 -07:00
interpolate.h
list-objects.c
list-objects.h
lockfile.c
log-tree.c format-patch -s: add MIME encoding header if signer's name requires so 2007-11-01 17:18:39 -07:00
log-tree.h rev-list: implement --bisect-all 2007-10-26 23:27:23 -07:00
mailmap.c
mailmap.h
match-trees.c Improved const correctness for strings 2007-10-21 01:43:27 -04:00
merge-file.c
merge-index.c
merge-recursive.c Make merge-recursive honor diff.renamelimit 2007-10-30 17:27:40 -07:00
merge-tree.c
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
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
parse-options.c parse-options: allow callbacks to take no arguments at all. 2007-10-29 21:03:31 -07:00
parse-options.h Some better parse-options documentation. 2007-11-05 18:47:01 -08:00
patch-delta.c
patch-id.c
patch-ids.c
patch-ids.h
path-list.c
path-list.h
path.c
peek-remote.c Change git_connect() to return a struct child_process instead of a pid_t. 2007-10-21 01:30:39 -04:00
pkt-line.c
pkt-line.h
pretty.c --pretty=format: on-demand format expansion 2007-11-09 01:30:07 -08:00
progress.c Show total transferred as part of throughput progress 2007-11-01 15:22:32 -07:00
progress.h add throughput to progress display 2007-10-30 16:08:40 -07:00
quote.c Style: place opening brace of a function definition at column 1 2007-11-08 15:35:32 -08:00
quote.h sq_quote_argv and add_to_string rework with strbuf's. 2007-09-21 03:31:18 -07:00
reachable.c
reachable.h
read-cache.c Merge branch 'maint' 2007-10-18 03:11:17 -04:00
receive-pack.c Merge branch 'db/fetch-pack' 2007-10-24 21:59:50 -07:00
reflog-walk.c
reflog-walk.h
refs.c Merge branch 'master' into db/fetch-pack 2007-10-16 00:15:25 -04:00
refs.h Function for updating refs. 2007-09-05 11:29:33 -07:00
remote.c Prevent send-pack from segfaulting (backport from 'master') 2007-10-30 16:21:56 -07:00
remote.h git-fetch: do not fail when remote branch disappears 2007-10-28 14:06:39 -07:00
revision.c Merge branch 'maint' 2007-10-15 22:31:47 -04:00
revision.h
run-command.c Add infrastructure to run a function asynchronously. 2007-10-21 01:30:41 -04:00
run-command.h Add infrastructure to run a function asynchronously. 2007-10-21 01:30:41 -04:00
send-pack.c errors: "strict subset" -> "ancestor" 2007-11-03 21:29:18 -07:00
server-info.c
setup.c Style: place opening brace of a function definition at column 1 2007-11-08 15:35:32 -08:00
sha1_file.c Merge branch 'maint' 2007-10-29 12:53:54 -07:00
sha1_name.c
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 cope with multiple line breaks within sideband progress messages 2007-10-17 02:54:56 -04:00
sideband.h
strbuf.c --pretty=format: on-demand format expansion 2007-11-09 01:30:07 -08:00
strbuf.h --pretty=format: on-demand format expansion 2007-11-09 01:30:07 -08:00
symlinks.c
tag.c Use xmemdupz() in many places. 2007-09-18 17:42:17 -07:00
tag.h
tar.h
test-absolute-path.c
test-chmtime.c
test-date.c
test-delta.c
test-genrandom.c
test-match-trees.c
test-parse-options.c Add tests for parse-options.c 2007-10-29 21:03:30 -07:00
test-sha1.c
test-sha1.sh
trace.c sq_quote_argv and add_to_string rework with strbuf's. 2007-09-21 03:31:18 -07:00
transport.c Style: place opening brace of a function definition at column 1 2007-11-08 15:35:32 -08:00
transport.h Merge branch 'master' into db/fetch-pack 2007-10-16 00:15:25 -04:00
tree-diff.c Fix diffcore-break total breakage 2007-10-21 01:59:42 -04:00
tree-walk.c
tree-walk.h
tree.c
tree.h
unpack-file.c
unpack-trees.c relax usage of the progress API 2007-10-30 16:08:40 -07:00
unpack-trees.h
update-server-info.c
upload-pack.c upload-pack: Run rev-list in an asynchronous function. 2007-10-21 01:30:42 -04:00
usage.c
utf8.c Style: place opening brace of a function definition at column 1 2007-11-08 15:35:32 -08:00
utf8.h
var.c
walker.c Merge branch 'master' into db/fetch-pack 2007-10-16 00:15:25 -04:00
walker.h Modularize commit-walker 2007-09-19 03:22:30 -07:00
write_or_die.c
wt-status.c Enable wt-status to run against non-standard index file. 2007-09-19 12:52:19 -07:00
wt-status.h Enable wt-status to run against non-standard index file. 2007-09-19 12:52:19 -07:00
xdiff-interface.c
xdiff-interface.h

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.