Go to file
Elijah Newren 434b8525e7 merge-recursive: Consider modifications in rename/rename(2to1) conflicts
Our previous conflict resolution for renaming two different files to the
same name ignored the fact that each of those files may have modifications
from both sides of history to consider.  We need to do a three-way merge
for each of those files, and then handle the conflict of both sets of
merged contents trying to be recorded with the same name.

It is important to note that this changes our strategy in the recursive
case.  After doing a three-way content merge of each of the files
involved, we still are faced with the fact that we are trying to put both
of the results (including conflict markers) into the same path.  We could
do another two-way merge, but I think that becomes confusing.  Also,
taking a hint from the modify/delete and rename/delete cases we handled
earlier, a more useful "common ground" would be to keep the three-way
content merge but record it with the original filename.  The renames can
still be detected, we just allow it to be done in the o->call_depth=0
case.  This seems to result in simpler & easier to understand merge
conflicts as well, as evidenced by some of the changes needed in our
testsuite in t6036.  (However, it should be noted that this change will
cause problems those renames also occur along with a file being added
whose name matches the source of the rename.  Since git currently cannot
detect rename/add-source situations, though, this codepath is not
currently used for those cases anyway.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2011-08-14 14:19:39 -07:00
Documentation string-list: Add API to remove an item from an unsorted list 2011-08-14 14:19:35 -07:00
block-sha1
builtin fetch: do not leak a refspec 2011-06-08 17:21:08 -07:00
compat remove doubled words, e.g., s/to to/to/, and fix related typos 2011-04-13 11:59:11 -07:00
contrib git-completion: fix regression in zsh support 2011-05-10 13:08:51 -07:00
git-gui Merge git-gui 0.14.0 2011-03-26 10:42:35 -07:00
git_remote_helpers
gitk-git Merge git://git.kernel.org/pub/scm/gitk/gitk 2011-04-11 09:33:06 -07:00
gitweb gitweb: supply '-n' to gzip for identical output 2011-04-26 13:14:02 -07:00
perl
po
ppc
t merge-recursive: Consider modifications in rename/rename(2to1) conflicts 2011-08-14 14:19:39 -07:00
templates
vcs-svn remove doubled words, e.g., s/to to/to/, and fix related typos 2011-04-13 11:59:11 -07:00
xdiff
.gitattributes
.gitignore Remove old binaries from .gitignore 2011-04-03 10:32:13 -07:00
.mailmap
COPYING
GIT-VERSION-GEN Git 1.7.5.4 2011-06-01 14:08:26 -07:00
INSTALL
LGPL-2.1 provide a copy of the LGPLv2.1 2011-05-19 18:23:17 -07:00
Makefile Merge branch 'kk/maint-prefix-in-config-mak' into maint 2011-05-26 09:42:12 -07:00
README
RelNotes Start 1.7.5.4 draft release notes 2011-05-31 12:06:40 -07:00
abspath.c
aclocal.m4
advice.c
advice.h
alias.c
alloc.c
archive-tar.c
archive-zip.c
archive.c
archive.h
attr.c
attr.h
base85.c
bisect.c
bisect.h
blob.c
blob.h
branch.c
branch.h
builtin.h
bundle.c
bundle.h
cache-tree.c
cache-tree.h
cache.h Merge branch 'jk/maint-config-alias-fix' into maint 2011-06-01 14:05:22 -07:00
check-builtins.sh
check-racy.c
check_bindir
color.c
color.h
combine-diff.c
command-list.txt
commit.c
commit.h
config.c Merge branch 'jk/maint-config-alias-fix' into maint 2011-06-01 14:05:22 -07:00
config.mak.in Merge branch 'kk/maint-prefix-in-config-mak' into maint 2011-06-01 14:02:39 -07:00
configure.ac Improve test for pthreads flag 2011-03-28 10:54:54 -07:00
connect.c Merge branch 'jk/git-connection-deadlock-fix' into maint-1.7.4 2011-05-26 10:28:10 -07:00
convert.c
copy.c
csum-file.c sparse: Fix errors and silence warnings 2011-04-03 10:14:53 -07:00
csum-file.h
ctype.c
daemon.c Fix sparse warnings 2011-03-22 10:16:54 -07:00
date.c date: avoid "X years, 12 months" in relative dates 2011-04-20 19:23:16 -07:00
decorate.c
decorate.h
delta.h
diff-delta.c
diff-lib.c Merge branch 'jc/fix-diff-files-unmerged' into maint 2011-05-13 10:41:54 -07:00
diff-no-index.c
diff.c Merge branch 'jc/rename-degrade-cc-to-c' into maint 2011-05-31 12:00:02 -07:00
diff.h Merge branch 'jc/rename-degrade-cc-to-c' into maint 2011-05-31 12:00:02 -07:00
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c diffcore-rename.c: avoid set-but-not-used warning 2011-06-01 13:54:17 -07:00
diffcore.h
dir.c Merge branch 'ar/clean-rmdir-empty' into maint 2011-05-04 14:57:06 -07:00
dir.h
editor.c
entry.c
environment.c Merge branch 'jc/pack-objects-bigfile' into maint 2011-05-04 14:57:38 -07:00
exec_cmd.c
exec_cmd.h
fast-import.c fast-import: fix option parser for no-arg options 2011-05-05 21:21:24 -07:00
fetch-pack.h
fixup-builtins
fsck.c Merge branch 'jm/maint-misc-fix' into maint 2011-05-30 00:09:41 -07:00
fsck.h
generate-cmdlist.sh
gettext.c
gettext.h i18n: avoid parenthesized string as array initializer 2011-04-11 10:33:51 -07:00
git-add--interactive.perl add -i: ignore terminal escape sequences 2011-05-17 20:44:17 -07:00
git-am.sh
git-archimport.perl
git-bisect.sh bisect: visualize with git-log if gitk is unavailable 2011-03-21 10:23:45 -07:00
git-compat-util.h Merge branch 'maint' 2011-04-03 13:53:11 -07:00
git-cvsexportcommit.perl
git-cvsimport.perl Merge branch 'gr/cvsimport-alternative-cvspass-location' into maint 2011-05-13 10:44:54 -07:00
git-cvsserver.perl
git-difftool--helper.sh
git-difftool.perl
git-filter-branch.sh
git-instaweb.sh
git-lost-found.sh
git-merge-octopus.sh
git-merge-one-file.sh Merge branch 'jk/merge-one-file-working-tree' into maint 2011-05-13 10:44:19 -07:00
git-merge-resolve.sh
git-mergetool--lib.sh Pass empty file to p4merge where no base is suitable. 2011-05-01 15:56:05 -07:00
git-mergetool.sh mergetool: Teach about submodules 2011-04-13 12:21:45 -07:00
git-parse-remote.sh Merge branch 'maint' 2011-03-30 19:33:53 -07:00
git-pull.sh Merge branch 'jl/submodule-fetch-on-demand' 2011-04-04 15:02:01 -07:00
git-quiltimport.sh
git-rebase--interactive.sh git-rebase--interactive.sh: preserve-merges fails on merges created with no-ff 2011-04-28 09:56:55 -07:00
git-rebase.sh
git-relink.perl
git-remote-testgit.py
git-repack.sh
git-request-pull.sh
git-send-email.perl git-send-email: fix missing space in error message 2011-04-29 11:34:32 -07:00
git-sh-setup.sh
git-stash.sh Merge branch 'jk/maint-stash-oob' into maint 2011-05-04 14:58:42 -07:00
git-submodule.sh git-submodule.sh: separate parens by a space to avoid confusing some shells 2011-05-26 15:04:05 -07:00
git-svn.perl git-svn: Fix git svn log --show-commit 2011-05-20 09:30:09 -07:00
git-web--browse.sh
git.c Merge branch 'jk/maint-config-alias-fix' into maint 2011-06-01 14:05:22 -07:00
git.spec.in
graph.c
graph.h
grep.c
grep.h
hash.c
hash.h
help.c
help.h
hex.c
http-backend.c
http-fetch.c Fix two unused variable warnings in gcc 4.6 2011-04-03 10:59:40 -07:00
http-push.c
http-walker.c
http.c Merge branch 'sp/maint-clear-postfields' into maint 2011-05-04 14:58:56 -07:00
http.h
ident.c Merge branch 'rg/copy-gecos-username' into maint 2011-05-26 09:37:04 -07:00
imap-send.c Fix sparse warnings 2011-03-22 10:16:54 -07:00
levenshtein.c
levenshtein.h
list-objects.c Merge branch 'jc/maint-rev-list-culled-boundary' into maint 2011-04-03 12:32:35 -07:00
list-objects.h
ll-merge.c
ll-merge.h
lockfile.c
log-tree.c
log-tree.h
mailmap.c
mailmap.h
match-trees.c
merge-file.c
merge-recursive.c merge-recursive: Consider modifications in rename/rename(2to1) conflicts 2011-08-14 14:19:39 -07:00
merge-recursive.h merge-recursive: Save D/F conflict filenames instead of unlinking them 2011-08-14 14:19:35 -07:00
name-hash.c
notes-cache.c
notes-cache.h
notes-merge.c Fix sparse warnings 2011-03-22 10:16:54 -07:00
notes-merge.h
notes.c
notes.h
object.c
object.h
pack-check.c sparse: Fix errors and silence warnings 2011-04-03 10:14:53 -07:00
pack-refs.c
pack-refs.h
pack-revindex.c
pack-revindex.h
pack-write.c
pack.h
pager.c
parse-options.c Fix sparse warnings 2011-03-22 10:16:54 -07:00
parse-options.h
patch-delta.c
patch-ids.c
patch-ids.h
path.c
pkt-line.c sparse: Fix errors and silence warnings 2011-04-03 10:14:53 -07:00
pkt-line.h
preload-index.c
pretty.c userformat_find_requirements(): find requirement for the correct format 2011-05-25 13:08:10 -07:00
progress.c
progress.h
quote.c
quote.h
reachable.c Remove unused variables 2011-03-22 11:43:27 -07:00
reachable.h
read-cache.c Merge branch 'jc/index-update-if-able' into maint 2011-04-03 12:33:05 -07:00
reflog-walk.c
reflog-walk.h
refs.c
refs.h
remote-curl.c
remote.c
remote.h
replace_object.c Fix sparse warnings 2011-03-22 10:16:54 -07:00
rerere.c Merge branch 'jm/maint-misc-fix' into maint 2011-05-30 00:09:41 -07:00
rerere.h
resolve-undo.c
resolve-undo.h
revision.c Merge branch 'jc/maint-1.7.4-pathspec-stdin-and-cmdline' 2011-05-11 16:09:25 -07:00
revision.h Merge branch 'mg/rev-list-n-parents' 2011-03-26 20:13:17 -07:00
run-command.c run-command: handle short writes and EINTR in die_child 2011-04-20 10:09:26 -07:00
run-command.h
send-pack.h
server-info.c
setup.c Merge branch 'jm/maint-misc-fix' into maint 2011-05-30 00:09:41 -07:00
sha1-lookup.c
sha1-lookup.h
sha1_file.c git_open_noatime(): drop unused parameter 2011-05-15 15:24:52 -07:00
sha1_name.c sha1_name: Suggest commit:./file for path in subdir 2011-04-03 12:24:27 -07:00
shallow.c
shell.c shell: add missing initialization of argv0_path 2011-05-05 09:32:28 -07:00
shortlog.h
show-index.c
sideband.c
sideband.h
sigchain.c
sigchain.h
strbuf.c
strbuf.h Merge branch 'maint' 2011-03-30 14:10:41 -07:00
string-list.c string-list: Add API to remove an item from an unsorted list 2011-08-14 14:19:35 -07:00
string-list.h string-list: Add API to remove an item from an unsorted list 2011-08-14 14:19:35 -07:00
submodule.c Merge branch 'jl/submodule-fetch-on-demand' 2011-04-04 15:02:01 -07:00
submodule.h
symlinks.c
tag.c
tag.h
tar.h
test-chmtime.c
test-ctype.c
test-date.c
test-delta.c
test-dump-cache-tree.c
test-genrandom.c
test-index-version.c
test-line-buffer.c vcs-svn: remove buffer_read_string 2011-03-26 00:17:35 -05:00
test-match-trees.c
test-mktemp.c
test-obj-pool.c
test-parse-options.c
test-path-utils.c
test-run-command.c tests: check error message from run_command 2011-04-20 10:08:54 -07:00
test-sha1.c
test-sha1.sh
test-sigchain.c
test-string-pool.c
test-subprocess.c Remove unused variables 2011-03-22 11:43:27 -07:00
test-svn-fe.c
test-treap.c
thread-utils.c Fix sparse warnings 2011-03-22 10:16:54 -07:00
thread-utils.h
trace.c Fix sparse warnings 2011-03-22 10:16:54 -07:00
transport-helper.c Remove unused variables 2011-03-22 11:43:27 -07:00
transport.c Merge branch 'jm/maint-misc-fix' into maint 2011-05-30 00:09:41 -07:00
transport.h
tree-diff.c Remove unused variables 2011-03-22 11:43:27 -07:00
tree-walk.c
tree-walk.h
tree.c
tree.h
unimplemented.sh
unpack-trees.c Fix sparse warnings 2011-03-22 10:16:54 -07:00
unpack-trees.h
upload-pack.c Merge branch 'jk/maint-upload-pack-shallow' into maint 2011-05-04 14:58:13 -07:00
url.c Fix sparse warnings 2011-03-22 10:16:54 -07:00
url.h
usage.c Fix sparse warnings 2011-03-22 10:16:54 -07:00
userdiff.c
userdiff.h
utf8.c
utf8.h
walker.c
walker.h
wrap-for-bin.sh
wrapper.c Merge branch 'ae/better-template-failure-report' into maint 2011-03-20 22:09:39 -07:00
write_or_die.c
ws.c
wt-status.c Merge branch 'ab/i18n-st' 2011-04-01 17:55:55 -07:00
wt-status.h Merge branch 'jn/status-translatable' 2011-03-19 23:24:19 -07:00
xdiff-interface.c add, merge, diff: do not use strcasecmp to compare config variable names 2011-05-14 18:53:39 -07:00
xdiff-interface.h
zlib.c

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/gittutorial.txt to get started, then see
Documentation/everyday.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).

Many Git online resources are accessible from http://git-scm.com/
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.