Go to file
Elijah Newren a6ee883b8e t6044: new merge testcases for when index doesn't match HEAD
With one exception, we require the index to exactly match the
current HEAD commit at the time git merge is invoked.  This
expectation was even documented in git-merge.txt until commit
ebef7e5 (Documentation: simplify How Merge Works, 2010-01-23).

Most merge strategies enforced this requirement, but it turns out
not all did.  The current exceptions were the following two:

  * ff updates
  * octopus merges

ff updates actually will error out if the staged change is to a path
modified between HEAD and the commit being merged.  If the path(s)
that are staged are files unrelated to the changes between these two
commits, though, then an ff update will just keep these staged
changes around after the merge.  This is the one exception we
expected to the abort-merge-if- index-doesn't-match-HEAD rule.

For octopus merges, the rule should be enforced.  Unfortunately, the
current behavior of the code is to ignore the difference and use the
staged changes in place of whatever is in HEAD as it proceeds to
perform the merge.  So if the staged changes can be cleanly merged
with all the other heads, then the staged changes will just be
incorported into the resulting commit.  If the staged changes cannot
be cleanly merged with all the other heads, the merge is not aborted
-- merge conflicts are simply reported as if HEAD had originally
contained whatever the index did.

Add testcases that check our expectations.  A subsequent commit will
correct the erroneous octopus merge behavior.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-04-12 18:39:43 -07:00
Documentation Third batch for post 2.8 cycle 2016-04-08 14:34:11 -07:00
block-sha1
builtin Merge branch 'nd/apply-report-skip' 2016-04-08 14:29:12 -07:00
compat MSVC: use shipped headers instead of fallback definitions 2016-03-30 11:16:20 -07:00
contrib Merge branch 'pw/completion-stash' into maint 2016-02-22 13:10:20 -08:00
ewah ewah: convert to REALLOC_ARRAY, etc 2016-02-22 14:51:09 -08:00
git-gui git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution 2015-12-27 15:33:13 -08:00
gitk-git Merge branch 'master' of git://ozlabs.org/~paulus/gitk 2016-03-20 18:05:10 -07:00
gitweb gitweb: squelch "uninitialized value" warning 2016-01-12 13:21:15 -08:00
mergetools mergetool: reorder vim/gvim buffers in three-way diffs 2016-02-12 10:14:09 -08:00
perl git-svn: shorten glob error message 2016-03-15 01:35:39 +00:00
po Merge branch 'master' of https://github.com/vnwildman/git 2016-03-23 23:01:51 +08:00
ppc
refs Merge branch 'jk/tighten-alloc' 2016-02-26 13:37:16 -08:00
t t6044: new merge testcases for when index doesn't match HEAD 2016-04-12 18:39:43 -07:00
templates Merge branch 'ma/update-hooks-sample-typofix' into maint 2016-03-10 11:13:50 -08:00
vcs-svn
xdiff Merge branch 'rj/xdiff-prepare-plug-leak-on-error-codepath' 2016-04-03 10:29:33 -07:00
.gitattributes
.gitignore gitignore: ignore generated test-fake-ssh executable 2016-02-08 12:18:51 -08:00
.mailmap
.travis.yml add DEVELOPER makefile knob to check for acknowledged warnings 2016-02-25 12:49:45 -08:00
COPYING
GIT-VERSION-GEN First batch for post 2.8 cycle 2016-04-03 10:55:36 -07:00
INSTALL
LGPL-2.1
Makefile Merge branch 'jc/sane-grep' 2016-03-16 13:16:54 -07:00
README.md README.md: don't take 'commandname' literally 2016-04-03 10:12:48 -07:00
RelNotes Second batch for post 2.8 cycle 2016-04-06 11:44:24 -07:00
abspath.c
aclocal.m4
advice.c
advice.h
alias.c convert trivial cases to ALLOC_ARRAY 2016-02-22 14:51:09 -08:00
alloc.c
archive-tar.c
archive-zip.c
archive.c use st_add and st_mult for allocation size computation 2016-02-22 14:51:09 -08:00
archive.h
argv-array.c argv-array: add detach function 2016-02-22 14:50:32 -08:00
argv-array.h argv-array: add detach function 2016-02-22 14:50:32 -08:00
attr.c Merge branch 'ss/exc-flag-is-a-collection-of-bits' 2016-04-06 11:38:59 -07:00
attr.h
base85.c
bisect.c Merge branch 'jk/tighten-alloc' 2016-02-26 13:37:16 -08:00
bisect.h
blob.c
blob.h
branch.c config: rename git_config_set to git_config_set_gently 2016-02-22 10:23:55 -08:00
branch.h branch: report errors in tracking branch setup 2016-02-22 10:23:30 -08:00
builtin.h
bulk-checkin.c
bulk-checkin.h
bundle.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
bundle.h
cache-tree.c Merge branch 'jk/tighten-alloc' into maint 2016-03-10 11:13:43 -08:00
cache-tree.h
cache.h Merge branch 'jk/pack-idx-corruption-safety' into maint 2016-03-10 11:13:46 -08:00
check-builtins.sh
check-racy.c
check_bindir
color.c
color.h
column.c use xmallocz to avoid size arithmetic 2016-02-22 14:51:09 -08:00
column.h
combine-diff.c use st_add and st_mult for allocation size computation 2016-02-22 14:51:09 -08:00
command-list.txt
commit-slab.h
commit.c use st_add and st_mult for allocation size computation 2016-02-22 14:51:09 -08:00
commit.h
config.c Merge branch 'jk/submodule-c-credential' 2016-04-06 11:39:12 -07:00
config.mak.in
config.mak.uname Merge branch 'tb/avoid-gcc-on-darwin-10-6' 2016-03-21 09:20:13 -07:00
configure.ac Merge branch 'jc/sane-grep' 2016-03-16 13:16:54 -07:00
connect.c Merge branch 'cn/deprecate-ssh-git-url' 2016-03-16 13:16:40 -07:00
connect.h connect & http: support -4 and -6 switches for remote operations 2016-02-12 11:34:14 -08:00
connected.c
connected.h
convert.c Merge branch 'tb/conversion' 2016-02-26 13:37:23 -08:00
convert.h ls-files: add eol diagnostics 2016-01-18 19:48:43 -08:00
copy.c
credential-cache--daemon.c Merge branch 'jk/credential-cache-comment-exit' 2016-04-06 11:39:06 -07:00
credential-cache.c
credential-store.c strbuf: introduce strbuf_getline_{lf,nul}() 2016-01-15 10:12:51 -08:00
credential.c credential: let empty credential specs reset helper list 2016-02-26 10:58:14 -08:00
credential.h
csum-file.c
csum-file.h
ctype.c
daemon.c Merge branch 'jk/tighten-alloc' 2016-02-26 13:37:16 -08:00
date.c
decorate.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
decorate.h
delta.h
diff-delta.c
diff-lib.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
diff-no-index.c Merge branch 'nd/diff-with-path-params' into maint 2016-02-05 14:54:15 -08:00
diff.c Merge branch 'mm/diff-renames-default' 2016-04-03 10:29:22 -07:00
diff.h Merge branch 'mm/diff-renames-default' 2016-04-03 10:29:22 -07:00
diffcore-break.c
diffcore-delta.c use st_add and st_mult for allocation size computation 2016-02-22 14:51:09 -08:00
diffcore-order.c convert trivial cases to ALLOC_ARRAY 2016-02-22 14:51:09 -08:00
diffcore-pickaxe.c
diffcore-rename.c use st_add and st_mult for allocation size computation 2016-02-22 14:51:09 -08:00
diffcore.h
dir.c Merge branch 'ss/exc-flag-is-a-collection-of-bits' 2016-04-06 11:38:59 -07:00
dir.h Merge branch 'ss/exc-flag-is-a-collection-of-bits' 2016-04-06 11:38:59 -07:00
editor.c
entry.c use xmallocz to avoid size arithmetic 2016-02-22 14:51:09 -08:00
environment.c setup: make startup_info available everywhere 2016-03-06 17:17:37 -08:00
exec_cmd.c Merge branch 'ak/extract-argv0-last-dir-sep' into maint 2016-03-10 11:13:47 -08:00
exec_cmd.h prepare_{git,shell}_cmd: use argv_array 2016-02-22 14:51:09 -08:00
fast-import.c Merge branch 'jk/tighten-alloc' 2016-02-26 13:37:16 -08:00
fetch-pack.c fetch-pack: ignore SIGPIPE in sideband demuxer 2016-02-25 13:51:47 -08:00
fetch-pack.h
fmt-merge-msg.h
fsck.c convert trivial cases to ALLOC_ARRAY 2016-02-22 14:51:09 -08:00
fsck.h
generate-cmdlist.sh
gettext.c
gettext.h
git-add--interactive.perl add--interactive: allow custom diff highlighting programs 2016-02-28 10:53:54 -08:00
git-archimport.perl
git-bisect.sh
git-compat-util.h Merge branch 'es/st-add4-gcc-4.2-workaround' into maint 2016-03-21 09:19:27 -07:00
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl git-cvsserver.perl: fix typo 2016-02-17 10:00:53 -08:00
git-difftool--helper.sh
git-difftool.perl
git-filter-branch.sh Merge branch 'jk/filter-branch-no-index' into maint 2016-02-05 14:54:13 -08:00
git-instaweb.sh
git-merge-octopus.sh
git-merge-one-file.sh Merge branch 'jk/no-diff-emit-common' into maint 2016-03-10 11:13:42 -08:00
git-merge-resolve.sh
git-mergetool--lib.sh
git-mergetool.sh mergetool: honor tempfile configuration when resolving delete conflicts 2016-03-10 14:07:57 -08:00
git-p4.py Merge branch 'ls/p4-map-user' 2016-04-06 11:39:05 -07:00
git-parse-remote.sh
git-quiltimport.sh
git-rebase--am.sh
git-rebase--interactive.sh Merge branch 'jc/sane-grep' 2016-03-16 13:16:54 -07:00
git-rebase--merge.sh
git-rebase.sh rebase: decouple --exec from --interactive 2016-03-18 14:35:31 -07:00
git-relink.perl
git-remote-testgit.sh
git-request-pull.sh
git-send-email.perl send-email: ignore trailing whitespace in mailrc alias file 2016-03-18 14:47:10 -07:00
git-sh-i18n.sh
git-sh-setup.sh sane_grep: pass "-a" if grep accepts it 2016-03-10 15:35:43 -08:00
git-stash.sh
git-submodule.sh Merge branch 'jk/submodule-c-credential' 2016-04-06 11:39:12 -07:00
git-svn.perl git-svn: fix URL canonicalization during init w/ SVN 1.7+ 2016-03-16 20:16:23 +00:00
git-web--browse.sh
git.c Merge branch 'ak/git-strip-extension-from-dashed-command' into maint 2016-03-10 11:13:48 -08:00
git.rc
git.spec.in git.spec.in: use README.md, not README 2016-04-03 10:12:48 -07:00
gpg-interface.c
gpg-interface.h
graph.c convert trivial cases to ALLOC_ARRAY 2016-02-22 14:51:09 -08:00
graph.h
grep.c use xmallocz to avoid size arithmetic 2016-02-22 14:51:09 -08:00
grep.h
hashmap.c convert trivial cases to FLEX_ARRAY macros 2016-02-22 14:51:09 -08:00
hashmap.h
help.c convert trivial cases to FLEX_ARRAY macros 2016-02-22 14:51:09 -08:00
help.h
hex.c
http-backend.c Convert struct object to object_id 2015-11-20 08:02:05 -05:00
http-fetch.c
http-push.c Merge branch 'jk/path-name-safety-2.6' into jk/path-name-safety-2.7 2016-03-16 10:42:32 -07:00
http-walker.c
http.c Merge branch 'jx/http-no-proxy' 2016-03-10 10:56:43 -08:00
http.h Merge branch 'ew/force-ipv4' 2016-02-24 13:25:54 -08:00
ident.c Merge branch 'da/user-useconfigonly' 2016-02-17 10:13:31 -08:00
imap-send.c use xmallocz to avoid size arithmetic 2016-02-22 14:51:09 -08:00
khash.h convert trivial cases to ALLOC_ARRAY 2016-02-22 14:51:09 -08:00
kwset.c
kwset.h
levenshtein.c convert trivial cases to ALLOC_ARRAY 2016-02-22 14:51:09 -08:00
levenshtein.h
line-log.c convert trivial cases to ALLOC_ARRAY 2016-02-22 14:51:09 -08:00
line-log.h
line-range.c
line-range.h
list-objects.c Merge branch 'jk/path-name-safety-2.6' into jk/path-name-safety-2.7 2016-03-16 10:42:32 -07:00
list-objects.h list-objects: pass full pathname to callbacks 2016-03-16 10:41:04 -07:00
ll-merge.c use xmallocz to avoid size arithmetic 2016-02-22 14:51:09 -08:00
ll-merge.h
lockfile.c lockfile: improve error message when lockfile exists 2016-03-01 10:16:46 -08:00
lockfile.h
log-tree.c convert trivial cases to FLEX_ARRAY macros 2016-02-22 14:51:09 -08:00
log-tree.h
mailinfo.c strbuf: introduce strbuf_getline_{lf,nul}() 2016-01-15 10:12:51 -08:00
mailinfo.h
mailmap.c mailmap: do not resolve blobs in a non-repository 2016-03-06 17:19:11 -08:00
mailmap.h
match-trees.c
merge-blobs.c Merge branch 'jk/no-diff-emit-common' into maint 2016-03-10 11:13:42 -08:00
merge-blobs.h
merge-recursive.c merge-recursive: find-renames resets threshold 2016-02-24 10:39:02 -08:00
merge-recursive.h merge-recursive: option to disable renames 2016-02-17 10:20:51 -08:00
merge.c Convert struct object to object_id 2015-11-20 08:02:05 -05:00
mergesort.c
mergesort.h
name-hash.c convert trivial cases to FLEX_ARRAY macros 2016-02-22 14:51:09 -08:00
notes-cache.c notes: allow treeish expressions as notes ref 2016-01-12 15:10:01 -08:00
notes-cache.h
notes-merge.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
notes-merge.h
notes-utils.c notes: allow treeish expressions as notes ref 2016-01-12 15:10:01 -08:00
notes-utils.h
notes.c Merge branch 'jk/tighten-alloc' 2016-02-26 13:37:16 -08:00
notes.h Merge branch 'jk/notes-merge-from-anywhere' 2016-02-03 14:15:59 -08:00
object.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
object.h Remove get_object_hash. 2015-11-20 08:02:05 -05:00
pack-bitmap-write.c Merge branch 'jk/path-name-safety-2.6' into jk/path-name-safety-2.7 2016-03-16 10:42:32 -07:00
pack-bitmap.c Merge branch 'jk/path-name-safety-2.6' into jk/path-name-safety-2.7 2016-03-16 10:42:32 -07:00
pack-bitmap.h
pack-check.c convert trivial cases to ALLOC_ARRAY 2016-02-22 14:51:09 -08:00
pack-objects.c
pack-objects.h
pack-revindex.c Merge branch 'jk/tighten-alloc' 2016-02-26 13:37:16 -08:00
pack-revindex.h pack-revindex: store entries directly in packed_git 2015-12-21 14:36:28 -08:00
pack-write.c
pack.h
pager.c Merge branch 'jc/am-i-v-fix' into maint 2016-03-10 11:13:41 -08:00
parse-options-cb.c
parse-options.c parse-options: allow -h as a short option 2015-11-20 08:02:07 -05:00
parse-options.h parse-options: allow -h as a short option 2015-11-20 08:02:07 -05:00
patch-delta.c
patch-ids.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
patch-ids.h
path.c config --show-origin: report paths with forward slashes 2016-03-23 09:58:48 -07:00
pathspec.c convert trivial cases to ALLOC_ARRAY 2016-02-22 14:51:09 -08:00
pathspec.h
pkt-line.c
pkt-line.h
preload-index.c
pretty.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
prio-queue.c
prio-queue.h
progress.c use xmallocz to avoid size arithmetic 2016-02-22 14:51:09 -08:00
progress.h
prompt.c
prompt.h
quote.c quote: implement sq_quotef() 2016-03-01 12:24:15 -08:00
quote.h quote: implement sq_quotef() 2016-03-01 12:24:15 -08:00
reachable.c Merge branch 'maint-2.5' into maint-2.6 2016-03-17 11:26:18 -07:00
reachable.h
read-cache.c Merge branch 'nd/ita-cleanup' into maint 2016-02-22 13:10:21 -08:00
ref-filter.c ref-filter.c: mark strings for translation 2016-02-29 14:27:58 -08:00
ref-filter.h
reflog-walk.c Merge branch 'dk/reflog-walk-with-non-commit' into maint 2016-02-05 14:54:10 -08:00
reflog-walk.h
refs.c use st_add and st_mult for allocation size computation 2016-02-22 14:51:09 -08:00
refs.h Merge branch 'dt/initial-ref-xn-commit-doc' 2016-02-26 13:37:27 -08:00
remote-curl.c Merge branch 'jk/tighten-alloc' into maint 2016-03-10 11:13:43 -08:00
remote-testsvn.c strbuf: introduce strbuf_getline_{lf,nul}() 2016-01-15 10:12:51 -08:00
remote.c Merge branch 'jk/tighten-alloc' into maint 2016-03-10 11:13:43 -08:00
remote.h remote: simplify remote_is_configured() 2016-02-16 13:33:12 -08:00
replace_object.c
rerere.c Merge branch 'jk/rerere-xsnprintf' 2016-02-17 10:13:33 -08:00
rerere.h
resolve-undo.c
resolve-undo.h
revision.c Merge branch 'maint-2.5' into maint-2.6 2016-03-17 11:26:18 -07:00
revision.h Merge branch 'maint-2.5' into maint-2.6 2016-03-17 11:26:18 -07:00
run-command.c Merge branch 'sb/submodule-parallel-update' 2016-04-06 11:39:01 -07:00
run-command.h Merge branch 'sb/submodule-parallel-update' 2016-04-06 11:39:01 -07:00
send-pack.c Convert struct ref to use object_id. 2015-11-20 08:02:05 -05:00
send-pack.h
sequencer.c Merge branch 'jk/tighten-alloc' 2016-02-26 13:37:16 -08:00
sequencer.h
server-info.c Convert struct object to object_id 2015-11-20 08:02:05 -05:00
setup.c Merge branch 'jk/tighten-alloc' into maint 2016-03-10 11:13:43 -08:00
sh-i18n--envsubst.c
sha1-array.c
sha1-array.h
sha1-lookup.c
sha1-lookup.h
sha1_file.c Merge branch 'jk/pack-idx-corruption-safety' into maint 2016-03-10 11:13:46 -08:00
sha1_name.c Merge branch 'jk/tighten-alloc' into maint 2016-03-10 11:13:43 -08:00
shallow.c use st_add and st_mult for allocation size computation 2016-02-22 14:51:09 -08:00
shell.c strbuf: introduce strbuf_getline_{lf,nul}() 2016-01-15 10:12:51 -08:00
shortlog.h
show-index.c convert trivial cases to ALLOC_ARRAY 2016-02-22 14:51:09 -08:00
sideband.c
sideband.h
sigchain.c sigchain: add command to pop all common signals 2015-12-16 12:06:08 -08:00
sigchain.h sigchain: add command to pop all common signals 2015-12-16 12:06:08 -08:00
split-index.c
split-index.h
strbuf.c Merge branch 'sb/submodule-parallel-update' 2016-04-06 11:39:01 -07:00
strbuf.h Merge branch 'sb/submodule-parallel-update' 2016-04-06 11:39:01 -07:00
streaming.c
streaming.h
string-list.c
string-list.h
submodule-config.c Merge branch 'sb/submodule-parallel-update' 2016-04-06 11:39:01 -07:00
submodule-config.h Merge branch 'sb/submodule-parallel-update' 2016-04-06 11:39:01 -07:00
submodule.c Merge branch 'sb/submodule-parallel-update' 2016-04-06 11:39:01 -07:00
submodule.h Merge branch 'sb/submodule-parallel-update' 2016-04-06 11:39:01 -07:00
symlinks.c
tag.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
tag.h
tar.h
tempfile.c
tempfile.h
test-chmtime.c
test-config.c
test-ctype.c
test-date.c
test-delta.c
test-dump-cache-tree.c
test-dump-split-index.c
test-dump-untracked-cache.c test-dump-untracked-cache: don't modify the untracked cache 2016-01-27 12:30:07 -08:00
test-fake-ssh.c mingw: fix t5601-clone.sh 2016-01-27 14:27:19 -08:00
test-genrandom.c
test-hashmap.c
test-index-version.c
test-line-buffer.c
test-match-trees.c use setup_git_directory() in test-* programs 2016-03-07 12:27:35 -08:00
test-mergesort.c
test-mktemp.c
test-parse-options.c
test-path-utils.c Merge branch 'jk/tighten-alloc' 2016-02-26 13:37:16 -08:00
test-prio-queue.c
test-read-cache.c
test-regex.c
test-revision-walking.c use setup_git_directory() in test-* programs 2016-03-07 12:27:35 -08:00
test-run-command.c run-command: do not pass child process data into callbacks 2016-03-01 09:42:01 -08:00
test-scrap-cache-tree.c
test-sha1-array.c test-sha1-array: read command stream with strbuf_getline() 2016-01-15 10:35:08 -08:00
test-sha1.c
test-sha1.sh test-sha1.sh: use the $( ... ) construct for command substitution 2015-12-27 15:33:13 -08:00
test-sigchain.c
test-string-list.c
test-submodule-config.c
test-subprocess.c
test-svn-fe.c
test-urlmatch-normalization.c
test-wildmatch.c
thread-utils.c
thread-utils.h
trace.c
trace.h
trailer.c trailer.c: mark strings for translation 2016-02-29 14:27:58 -08:00
trailer.h interpret-trailers: add option for in-place editing 2016-01-14 12:22:17 -08:00
transport-helper.c Merge branch 'ew/force-ipv4' 2016-02-24 13:25:54 -08:00
transport.c Merge branch 'cn/deprecate-ssh-git-url' 2016-03-16 13:16:40 -07:00
transport.h connect & http: support -4 and -6 switches for remote operations 2016-02-12 11:34:14 -08:00
tree-diff.c Merge branch 'maint-2.4' into maint-2.5 2016-03-17 11:24:14 -07:00
tree-walk.c do_compare_entry: use already-computed path 2016-01-05 13:39:46 -08:00
tree-walk.h do_compare_entry: use already-computed path 2016-01-05 13:39:46 -08:00
tree.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
tree.h
unicode_width.h
unimplemented.sh unimplemented.sh: use the $( ... ) construct for command substitution 2015-12-27 15:33:13 -08:00
unix-socket.c
unix-socket.h
unpack-trees.c unpack-trees: fix accidentally quadratic behavior 2016-01-22 13:03:10 -08:00
unpack-trees.h
update_unicode.sh
upload-pack.c upload-pack: use argv_array for pack_objects 2016-02-25 14:20:25 -08:00
url.c
url.h
urlmatch.c
urlmatch.h
usage.c
userdiff.c
userdiff.h diff: clarify textconv interface 2016-02-22 10:40:35 -08:00
utf8.c
utf8.h
varint.c
varint.h
version.c
version.h
versioncmp.c
walker.c strbuf: introduce strbuf_getline_{lf,nul}() 2016-01-15 10:12:51 -08:00
walker.h
wildmatch.c
wildmatch.h
worktree.c worktree.c: fix indentation 2016-01-19 11:22:29 -08:00
worktree.h
wrap-for-bin.sh
wrapper.c Merge branch 'jk/tighten-alloc' 2016-02-26 13:37:16 -08:00
write_or_die.c write_or_die: handle EPIPE in async threads 2016-02-25 13:51:45 -08:00
ws.c
wt-status.c Merge branch 'mg/wt-status-mismarked-i18n' 2016-03-14 10:46:17 -07:00
wt-status.h
xdiff-interface.c convert trivial cases to ALLOC_ARRAY 2016-02-22 14:51:09 -08:00
xdiff-interface.h
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-commandname.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 http://news.gmane.org/gmane.comp.version-control.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