Go to file
SZEDER Gábor fad9484f0a completion: cache the path to the repository
After the previous changes in this series there are only a handful of
$(__gitdir) command substitutions left in the completion script, but
there is still a bit of room for improvements:

  1. The command substitution involves the forking of a subshell,
     which has considerable overhead on some platforms.

  2. There are a few cases, where this command substitution is
     executed more than once during a single completion, which means
     multiple subshells and possibly multiple 'git rev-parse'
     executions.  __gitdir() is invoked twice while completing refs
     for e.g. 'git log', 'git rebase', 'gitk', or while completing
     remote refs for 'git fetch' or 'git push'.

Both of these points can be addressed by using the
__git_find_repo_path() helper function introduced in the previous
commit:

  1. __git_find_repo_path() stores the path to the repository in a
     variable instead of printing it, so the command substitution
     around the function can be avoided.  Or rather: the command
     substitution should be avoided to make the new value of the
     variable set inside the function visible to the callers.
     (Yes, there is now a command substitution inside
     __git_find_repo_path() around each 'git rev-parse', but that's
     executed only if necessary, and only once per completion, see
     point 2. below.)

  2. $__git_repo_path, the variable holding the path to the
     repository, is declared local in the toplevel completion
     functions __git_main() and __gitk_main().  Thus, once set, the
     path is visible in all completion functions, including all
     subsequent calls to __git_find_repo_path(), meaning that they
     wouldn't have to re-discover the path to the repository.

So call __git_find_repo_path() and use $__git_repo_path instead of the
$(__gitdir) command substitution to access paths in the .git
directory.  Turn tests checking __gitdir()'s repository discovery into
tests of __git_find_repo_path() such that only the tested function
changes but the expected results don't, ensuring that repo discovery
keeps working as it did before.

As __gitdir() is not used anymore in the completion script, mark it as
deprecated and direct users' attention to __git_find_repo_path() and
$__git_repo_path.  Yet keep four __gitdir() tests to ensure that it
handles success and failure of __git_find_repo_path() and that it
still handles its optional remote argument, because users' custom
completion scriptlets might depend on it.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-02-03 22:18:41 -08:00
Documentation rev-parse: add '--absolute-git-dir' option 2017-02-03 22:18:41 -08:00
block-sha1
builtin rev-parse: add '--absolute-git-dir' option 2017-02-03 22:18:41 -08:00
ci
compat Merge branch 'js/mingw-isatty' into maint 2017-01-31 13:32:11 -08:00
contrib completion: cache the path to the repository 2017-02-03 22:18:41 -08:00
ewah
git-gui git-gui 0.21.0 2016-10-20 09:33:17 -07:00
gitk-git Merge git://ozlabs.org/~paulus/gitk 2017-01-18 10:27:59 -08:00
gitweb Merge branch 'ab/gitweb-abbrev-links' 2016-10-26 13:14:46 -07:00
mergetools Merge branch 'da/mergetool-xxdiff-hotkey' into maint 2017-01-17 15:11:05 -08:00
perl Merge branch 'va/i18n-perl-scripts' 2016-12-27 00:11:40 -08:00
po gitk: Remove translated message from comments 2017-01-18 21:12:45 +11:00
ppc
refs Merge branch 'cw/log-updates-for-all-refs-really' 2017-02-03 11:25:19 -08:00
t completion: cache the path to the repository 2017-02-03 22:18:41 -08:00
templates pre-receive.sample: mark it executable 2016-10-28 14:21:11 -07:00
vcs-svn Merge branch 'mr/vcs-svn-printf-ulong' into maint 2016-09-29 16:49:37 -07:00
xdiff Merge branch 'jc/retire-compaction-heuristics' 2017-01-10 15:24:27 -08:00
.gitattributes
.gitignore relink: retire the command 2017-01-25 14:42:37 -08:00
.mailmap Merge branch 'sg/mailmap-self' 2017-02-02 13:36:57 -08:00
.travis.yml travis-ci: fix Perforce install on macOS 2017-01-23 10:55:00 -08:00
COPYING
GIT-VERSION-GEN Git 2.12-rc0 2017-02-03 11:29:52 -08:00
INSTALL
LGPL-2.1
Makefile Merge branch 'bc/use-asciidoctor-opt' 2017-02-02 13:36:57 -08:00
README.md README: replace gmane link with public-inbox 2016-12-15 09:30:09 -08:00
RelNotes Almost ready for 2.11.1 2017-01-17 15:19:11 -08:00
abspath.c Merge branch 'rs/absolute-pathdup' 2017-02-02 13:36:55 -08:00
aclocal.m4
advice.c
advice.h
alias.c
alloc.c
apply.c hold_locked_index(): align error handling with hold_lockfile_for_update() 2016-12-07 11:31:59 -08:00
apply.h apply: learn to use a different index file 2016-09-07 12:29:54 -07:00
archive-tar.c
archive-zip.c archive-zip: load userdiff config 2017-01-07 18:49:30 -08:00
archive.c archive: read local configuration 2016-11-22 13:55:20 -08:00
archive.h archive: read local configuration 2016-11-22 13:55:20 -08:00
argv-array.c
argv-array.h
attr.c read info/{attributes,exclude} only when in repository 2016-10-26 13:30:51 -07:00
attr.h
base85.c
bisect.c bisect: improve English grammar of not-ancestors message 2016-12-05 14:50:38 -08:00
bisect.h
blob.c
blob.h
branch.c refs: add option core.logAllRefUpdates = always 2017-01-31 10:01:24 -08:00
branch.h create_branch: drop unused "head" parameter 2016-11-09 14:56:21 -08:00
builtin.h difftool: add a skeleton for the upcoming builtin 2017-01-17 13:32:47 -08:00
bulk-checkin.c compression: unify pack.compression configuration parsing 2016-11-15 21:16:22 -08:00
bulk-checkin.h
bundle.c
bundle.h
cache-tree.c cache: convert struct cache_entry to use struct object_id 2016-09-07 12:59:42 -07:00
cache-tree.h
cache.h Merge branch 'cw/log-updates-for-all-refs-really' 2017-02-03 11:25:19 -08:00
check-builtins.sh
check-racy.c
check_bindir
color.c Merge branch 'nd/log-graph-configurable-colors' 2017-02-02 13:36:58 -08:00
color.h
column.c
column.h
combine-diff.c diff_aligned_abbrev: use "struct oid" 2016-10-26 13:30:51 -07:00
command-list.txt relink: retire the command 2017-01-25 14:42:37 -08:00
commit-slab.h
commit.c commit: make ignore_non_trailer take buf/len 2016-11-29 14:22:18 -08:00
commit.h commit: make ignore_non_trailer take buf/len 2016-11-29 14:22:18 -08:00
common-main.c common-main: stop munging argv[0] path 2016-11-29 11:01:48 -08:00
config.c Merge branch 'nd/config-misc-fixes' into maint 2017-01-31 13:32:06 -08:00
config.mak.in
config.mak.uname xdiff: drop XDL_FAST_HASH 2016-12-06 13:27:11 -08:00
configure.ac Merge branch 'dp/autoconf-curl-ssl' into maint 2016-10-28 09:01:13 -07:00
connect.c Merge branch 'ls/filter-process' 2016-10-31 13:15:21 -07:00
connect.h
connected.c check_connected: accept an env argument 2016-10-10 13:54:02 -07:00
connected.h check_connected: accept an env argument 2016-10-10 13:54:02 -07:00
convert.c Merge branch 'jc/renormalize-merge-kill-safer-crlf' into maint 2017-01-17 14:49:28 -08:00
convert.h
copy.c
credential-cache--daemon.c i18n: credential-cache--daemon: mark advice for translation 2016-10-17 14:51:47 -07:00
credential-cache.c
credential-store.c
credential.c
credential.h
csum-file.c
csum-file.h
ctype.c
daemon.c Merge branch 'jk/daemon-path-ok-check-truncation' into maint 2016-11-29 13:27:56 -08:00
date.c
decorate.c
decorate.h
delta.h
diff-delta.c
diff-lib.c commit: fix empty commit creation when there's no changes but ita entries 2016-10-24 10:48:23 -07:00
diff-no-index.c Merge branch 'jk/setup-sequence-update' 2016-09-21 15:15:24 -07:00
diff.c use oid_to_hex_r() for converting struct object_id hashes to hex strings 2017-01-30 14:23:40 -08:00
diff.h Merge branch 'nd/ita-empty-commit' 2016-10-27 14:58:50 -07:00
diffcore-break.c Merge branch 'tk/diffcore-delta-remove-unused' into maint 2016-11-29 13:28:03 -08:00
diffcore-delta.c Merge branch 'tk/diffcore-delta-remove-unused' 2016-11-17 13:45:22 -08:00
diffcore-order.c use QSORT 2016-09-29 15:42:18 -07:00
diffcore-pickaxe.c Merge branch 'js/regexec-buf' into maint 2016-09-29 16:49:45 -07:00
diffcore-rename.c Merge branch 'tk/diffcore-delta-remove-unused' into maint 2016-11-29 13:28:03 -08:00
diffcore.h Merge branch 'tk/diffcore-delta-remove-unused' into maint 2016-11-29 13:28:03 -08:00
dir-iterator.c
dir-iterator.h
dir.c Merge branch 'bw/realpath-wo-chdir' 2017-01-18 15:12:16 -08:00
dir.h submodule: add absorb-git-dir function 2016-12-12 15:15:07 -08:00
editor.c
entry.c streaming: make stream_blob_to_fd take struct object_id 2016-09-07 12:59:42 -07:00
environment.c refs: add option core.logAllRefUpdates = always 2017-01-31 10:01:24 -08:00
exec_cmd.c Merge branch 'js/exec-path-coverity-workaround' into maint 2017-01-31 13:32:10 -08:00
exec_cmd.h common-main: stop munging argv[0] path 2016-11-29 11:01:48 -08:00
fast-import.c Merge branch 'mh/fast-import-notes-fix-new' into maint 2017-01-31 13:32:05 -08:00
fetch-pack.c fetch-pack.c: correct command at the beginning of an error message 2016-11-11 13:28:39 -08:00
fetch-pack.h
fmt-merge-msg.h
fsck.c fsck: lazily load types under --connectivity-only 2017-01-26 10:51:09 -08:00
fsck.h
generate-cmdlist.sh
gettext.c
gettext.h
git-add--interactive.perl Merge branch 'jc/retire-compaction-heuristics' 2017-01-10 15:24:27 -08:00
git-archimport.perl
git-bisect.sh
git-compat-util.h add QSORT_S 2017-01-23 11:02:36 -08:00
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl
git-difftool--helper.sh
git-filter-branch.sh
git-instaweb.sh
git-merge-octopus.sh git-merge-octopus: do not capitalize "octopus" 2016-09-08 12:17:10 -07:00
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh mergetool: honor mergetool.$tool.trustExitCode for built-in tools 2016-11-29 10:54:03 -08:00
git-mergetool.sh mergetool: fix running in subdir when rerere enabled 2017-01-10 13:22:51 -08:00
git-p4.py Merge branch 'gv/mingw-p4-mapuser' 2017-02-02 13:36:55 -08:00
git-parse-remote.sh
git-quiltimport.sh
git-rebase--am.sh
git-rebase--interactive.sh Merge branch 'jk/rebase-i-squash-count-fix' into maint 2017-01-31 13:32:07 -08:00
git-rebase--merge.sh
git-rebase.sh Merge branch 'nd/rebase-forget' 2016-12-19 14:45:35 -08:00
git-remote-testgit.sh
git-request-pull.sh request-pull: drop old USAGE stuff 2017-01-15 16:23:23 -08:00
git-send-email.perl i18n: send-email: mark composing message for translation 2016-12-14 11:00:06 -08:00
git-sh-i18n.sh
git-sh-setup.sh Merge branch 'va/i18n-even-more' 2016-12-27 00:11:45 -08:00
git-stash.sh Merge branch 'jk/stash-disable-renames-internally' into maint 2017-01-17 14:49:30 -08:00
git-submodule.sh Merge branch 'sb/submodule-update-initial-runs-custom-script' 2017-02-03 11:25:19 -08:00
git-svn.perl git-svn: "git worktree" awareness 2016-10-14 01:36:12 +00:00
git-web--browse.sh
git.c Merge branch 'sb/unpack-trees-super-prefix' 2017-02-03 11:25:18 -08:00
git.rc
gpg-interface.c gpg-interface: use more status letters 2016-10-12 10:41:59 -07:00
gpg-interface.h gpg-interface, tag: add GPG_VERIFY_OMIT_STATUS flag 2017-01-17 16:10:22 -08:00
graph.c Merge branch 'nd/log-graph-configurable-colors' 2017-02-02 13:36:58 -08:00
graph.h graph: add support for --line-prefix on all graph-aware output 2016-08-31 18:07:09 -07:00
grep.c grep: add submodules as a grep source type 2016-12-22 11:47:33 -08:00
grep.h grep: add submodules as a grep source type 2016-12-22 11:47:33 -08:00
hashmap.c
hashmap.h
help.c help: improve is_executable() on Windows 2017-01-30 09:04:17 -08:00
help.h
hex.c hex: make wraparound of the index into ring-buffer explicit 2016-10-26 10:54:11 -07:00
http-backend.c pkt-line: rename packet_write() to packet_write_fmt() 2016-10-17 11:36:50 -07:00
http-fetch.c
http-push.c Merge branch 'jk/common-main' into maint 2016-09-08 21:35:51 -07:00
http-walker.c Merge branch 'jk/http-walker-limit-redirect-2.9' 2016-12-19 14:45:32 -08:00
http.c Merge branch 'jk/http-walker-limit-redirect' into maint 2017-01-17 14:49:29 -08:00
http.h Merge branch 'jk/http-walker-limit-redirect' into maint 2017-01-17 14:49:29 -08:00
ident.c Merge branch 'jk/ident-ai-canonname-could-be-null' into maint 2016-10-03 13:22:32 -07:00
imap-send.c Merge branch 'jc/cocci-xstrdup-or-null' into maint 2016-10-28 09:01:23 -07:00
iterator.h
khash.h
kwset.c
kwset.h
levenshtein.c
levenshtein.h
line-log.c use QSORT 2016-09-29 15:42:18 -07:00
line-log.h
line-range.c
line-range.h
list-objects.c
list-objects.h
list.h
ll-merge.c
ll-merge.h
lockfile.c lockfile: LOCK_REPORT_ON_ERROR 2016-12-07 11:31:59 -08:00
lockfile.h lockfile: move REPORT_ON_ERROR bit elsewhere 2016-12-27 09:12:09 -08:00
log-tree.c graph: add support for --line-prefix on all graph-aware output 2016-08-31 18:07:09 -07:00
log-tree.h
mailinfo.c Merge branch 'jt/mailinfo-fold-in-body-headers' into maint 2017-01-17 15:11:06 -08:00
mailinfo.h mailinfo: handle in-body header continuations 2016-09-21 10:23:11 -07:00
mailmap.c cocci: refactor common patterns to use xstrdup_or_null() 2016-10-12 11:22:10 -07:00
mailmap.h
match-trees.c
merge-blobs.c
merge-blobs.h
merge-recursive.c Merge branch 'nd/qsort-in-merge-recursive' into maint 2017-01-17 15:19:03 -08:00
merge-recursive.h
merge.c lockfile: LOCK_REPORT_ON_ERROR 2016-12-07 11:31:59 -08:00
mergesort.c
mergesort.h
mru.c
mru.h
name-hash.c
notes-cache.c
notes-cache.h
notes-merge.c Merge branch 'va/i18n-more' 2016-09-26 16:09:18 -07:00
notes-merge.h
notes-utils.c
notes-utils.h
notes.c notes: convert init_notes to use struct object_id 2016-09-07 12:59:42 -07:00
notes.h
object.c
object.h
pack-bitmap-write.c use QSORT 2016-09-29 15:42:18 -07:00
pack-bitmap.c sha1_file: rename git_open_noatime() to git_open() 2016-10-25 10:59:13 -07:00
pack-bitmap.h
pack-check.c Merge branch 'jk/verify-packfile-gently' into maint 2016-10-11 14:21:36 -07:00
pack-objects.c
pack-objects.h
pack-revindex.c use COPY_ARRAY 2016-09-25 16:44:13 -07:00
pack-revindex.h
pack-write.c use QSORT 2016-09-29 15:42:18 -07:00
pack.h
pager.c Merge branch 'jk/setup-sequence-update' 2016-09-21 15:15:24 -07:00
parse-options-cb.c Merge branch 'rs/cocci' 2016-10-17 13:25:21 -07:00
parse-options.c parse-options: print "fatal:" before usage_msg_opt() 2016-12-14 09:58:09 -08:00
parse-options.h Merge branch 'mh/diff-indent-heuristic' 2016-09-26 16:09:16 -07:00
patch-delta.c
patch-ids.c patch-ids: refuse to compute patch-id for merge commit 2016-09-12 13:45:01 -07:00
patch-ids.h
path.c Merge branch 'js/normalize-path-copy-ceil' into maint 2017-01-17 15:11:03 -08:00
pathspec.c pathspec: give better message for submodule related pathspec error 2017-01-09 15:19:22 -08:00
pathspec.h pathspec: copy and free owned memory 2017-01-08 18:04:17 -08:00
pkt-line.c pkt-line: add functions to read/write flush terminated packet streams 2016-10-17 11:36:50 -07:00
pkt-line.h pkt-line: add functions to read/write flush terminated packet streams 2016-10-17 11:36:50 -07:00
preload-index.c
pretty.c pretty: add %(trailers) format for displaying trailers of a commit message 2016-12-11 13:58:41 -08:00
prio-queue.c
prio-queue.h
progress.c
progress.h
prompt.c
prompt.h
quote.c
quote.h
reachable.c
reachable.h
read-cache.c Merge branch 'sb/in-core-index-doc' 2017-01-31 13:14:59 -08:00
ref-filter.c Merge branch 'rs/qsort-s' 2017-01-31 13:15:00 -08:00
ref-filter.h Merge branch 'st/verify-tag' 2017-01-31 13:14:58 -08:00
reflog-walk.c
reflog-walk.h
refs.c refs: add option core.logAllRefUpdates = always 2017-01-31 10:01:24 -08:00
refs.h refs: add option core.logAllRefUpdates = always 2017-01-31 10:01:24 -08:00
remote-curl.c Merge branch 'dt/smart-http-detect-server-going-away' into maint 2017-01-17 15:19:03 -08:00
remote-testsvn.c
remote.c Merge branch 'km/branch-get-push-while-detached' into maint 2017-01-31 13:32:08 -08:00
remote.h remote rename: more carefully determine whether a remote is configured 2017-01-19 14:04:23 -08:00
replace_object.c
rerere.c hold_locked_index(): align error handling with hold_lockfile_for_update() 2016-12-07 11:31:59 -08:00
rerere.h
resolve-undo.c cache: convert struct cache_entry to use struct object_id 2016-09-07 12:59:42 -07:00
resolve-undo.h
revision.c Merge branch 'vn/revision-shorthand-for-side-branch-log' 2016-10-06 14:53:10 -07:00
revision.h
run-command.c Merge branch 'js/mingw-hooks-with-exe-suffix' 2017-02-02 13:36:57 -08:00
run-command.h execv_dashed_external: wait for child on signal death 2017-01-09 13:41:40 -08:00
send-pack.c cocci: refactor common patterns to use xstrdup_or_null() 2016-10-12 11:22:10 -07:00
send-pack.h
sequencer.c sequencer (rebase -i): write out the final message 2017-01-17 14:06:01 -08:00
sequencer.h sequencer (rebase -i): learn about the 'verbose' mode 2017-01-09 14:57:29 -08:00
server-info.c use QSORT 2016-09-29 15:42:18 -07:00
setup.c cache.h: expose the dying procedure for reading gitlinks 2017-01-26 11:00:58 -08:00
sh-i18n--envsubst.c remove unnecessary check before QSORT 2016-09-29 15:42:18 -07:00
sha1-array.c Merge branch 'rs/qsort' 2016-10-10 14:03:46 -07:00
sha1-array.h sha1_array: let callbacks interrupt iteration 2016-09-26 11:46:41 -07:00
sha1-lookup.c
sha1-lookup.h
sha1_file.c Merge branch 'jk/clear-delta-base-cache-fix' 2017-01-31 13:14:59 -08:00
sha1_name.c Merge branch 'jk/no-looking-at-dotgit-outside-repo' 2016-11-01 12:58:49 -07:00
shallow.c Merge branch 'nd/shallow-fixup' into maint 2017-01-17 15:11:05 -08:00
shell.c
shortlog.h shortlog: group by committer information 2016-12-15 16:19:13 -08:00
show-index.c
sideband.c
sideband.h
sigchain.c
sigchain.h
split-index.c split-index: s/eith/with/ typo fix 2016-11-01 11:48:02 -07:00
split-index.h
strbuf.c link_alt_odb_entry: handle normalize_path errors 2016-10-10 13:52:36 -07:00
strbuf.h link_alt_odb_entry: handle normalize_path errors 2016-10-10 13:52:36 -07:00
streaming.c Merge branch 'jk/pack-objects-optim-mru' 2016-10-10 14:03:47 -07:00
streaming.h streaming: make stream_blob_to_fd take struct object_id 2016-09-07 12:59:42 -07:00
string-list.c string-list: use QSORT_S in string_list_sort() 2017-01-23 11:02:38 -08:00
string-list.h
submodule-config.c Merge branch 'bw/push-submodule-only' 2017-01-31 13:14:56 -08:00
submodule-config.h Merge branch 'bw/grep-recurse-submodules' 2017-01-18 15:12:11 -08:00
submodule.c submodule absorbing: fix worktree/gitdir pointers recursively for non-moves 2017-01-26 11:01:04 -08:00
submodule.h Merge branch 'bw/push-submodule-only' 2017-01-31 13:14:56 -08:00
symlinks.c
tag.c gpg-interface, tag: add GPG_VERIFY_OMIT_STATUS flag 2017-01-17 16:10:22 -08:00
tag.h
tar.h
tempfile.c
tempfile.h
thread-utils.c
thread-utils.h
tmp-objdir.c tmp-objdir: quote paths we add to alternates 2016-12-12 15:10:46 -08:00
tmp-objdir.h tmp-objdir: introduce API for temporary object directories 2016-10-10 13:54:02 -07:00
trace.c
trace.h
trailer.c trailer: have function to describe trailer layout 2016-11-29 14:22:18 -08:00
trailer.h trailer: have function to describe trailer layout 2016-11-29 14:22:18 -08:00
transport-helper.c Merge branch 'nd/shallow-deepen' 2016-10-10 14:03:50 -07:00
transport.c Merge branch 'bw/push-submodule-only' 2017-01-31 13:14:56 -08:00
transport.h Merge branch 'bw/push-submodule-only' 2017-01-31 13:14:56 -08:00
tree-diff.c
tree-walk.c grep: enable recurse-submodules to work on <tree> objects 2016-12-22 11:47:33 -08:00
tree-walk.h fsck: handle bad trees like other errors 2016-09-27 14:09:10 -07:00
tree.c use QSORT 2016-09-29 15:42:18 -07:00
tree.h
unicode_width.h unicode_width.h: update the width tables to Unicode 9.0 2016-12-14 09:48:07 -08:00
unimplemented.sh
unix-socket.c
unix-socket.h
unpack-trees.c Merge branch 'sb/unpack-trees-super-prefix' 2017-02-03 11:25:18 -08:00
unpack-trees.h
upload-pack.c upload-pack: optionally allow fetching any sha1 2016-11-18 13:06:14 -08:00
url.c introduce hex2chr() for converting two hexadecimal digits to a character 2016-09-07 10:42:46 -07:00
url.h
urlmatch.c
urlmatch.h
usage.c Merge branch 'jk/vreport-sanitize' 2017-01-31 13:14:56 -08:00
userdiff.c
userdiff.h
utf8.c utf8: accept "latin-1" as ISO-8859-1 2016-09-26 18:16:23 -07:00
utf8.h
varint.c
varint.h
version.c
version.h
versioncmp.c versioncmp: generalize version sort suffix reordering 2017-01-12 12:25:24 -08:00
walker.c
walker.h
wildmatch.c
wildmatch.h
worktree.c Merge branch 'rs/absolute-pathdup' 2017-02-02 13:36:55 -08:00
worktree.h worktree: check if a submodule uses worktrees 2016-12-12 15:15:07 -08:00
wrap-for-bin.sh
wrapper.c
write_or_die.c run-command: move check_pipe() from write_or_die to run_command 2016-10-17 11:36:49 -07:00
ws.c
wt-status.c Merge branch 'rs/object-id' 2017-02-03 11:25:19 -08:00
wt-status.h wt-status: teach has_{unstaged,uncommitted}_changes() about submodules 2016-10-07 09:29:31 -07:00
xdiff-interface.c Merge branch 'js/regexec-buf' into maint 2016-09-29 16:49:45 -07:00
xdiff-interface.h Convert read_mmblob to take struct object_id. 2016-09-07 12:59:42 -07:00
zlib.c

README.md

Git - fast, scalable, distributed revision control system

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

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

Please read the file INSTALL for installation instructions.

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

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

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

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

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

The name "git" was given by Linus Torvalds when he wrote the very first version. He described the tool as "the stupid content tracker" and the name as (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