git/Documentation/config
Elijah Newren 8c8e5bd6eb merge-recursive: switch directory rename detection default
When all of x/a, x/b, and x/c have moved to z/a, z/b, and z/c on one
branch, there is a question about whether x/d added on a different
branch should remain at x/d or appear at z/d when the two branches are
merged.  There are different possible viewpoints here:

  A) The file was placed at x/d; it's unrelated to the other files in
     x/ so it doesn't matter that all the files from x/ moved to z/ on
     one branch; x/d should still remain at x/d.

  B) x/d is related to the other files in x/, and x/ was renamed to z/;
     therefore x/d should be moved to z/d.

Since there was no ability to detect directory renames prior to
git-2.18, users experienced (A) regardless of context.  Choice (B) was
implemented in git-2.18, with no option to go back to (A), and has been
in use since.  However, one user reported that the merge results did not
match their expectations, making the change of default problematic,
especially since there was no notice printed when directory rename
detection moved files.

Note that there is also a third possibility here:

  C) There are different answers depending on the context and content
     that cannot be determined by git, so this is a conflict.  Use a
     higher stage in the index to record the conflict and notify the
     user of the potential issue instead of silently selecting a
     resolution for them.

Add an option for users to specify their preference for whether to use
directory rename detection, and default to (C).  Even when directory
rename detection is on, add notice messages about files moved into new
directories.

As a sidenote, x/d did not have to be a new file here; it could have
already existed at some other path and been renamed to x/d, with
directory rename detection just renaming it again to z/d.  Thus, it's
not just new files, but also a modification to all rename types (normal
renames, rename/add, rename/delete, rename/rename(1to1),
rename/rename(1to2), and rename/rename(2to1)).

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-04-08 16:02:08 +09:00
..
add.txt config.txt: move add.* to a separate file 2018-10-29 10:17:00 +09:00
advice.txt push: add an advice on unqualified <dst> push 2018-11-14 15:27:55 +09:00
alias.txt config.txt: move alias.* to a separate file 2018-10-29 10:17:00 +09:00
am.txt config.txt: move am.* to a separate file 2018-10-29 10:17:00 +09:00
apply.txt config.txt: move apply.* to a separate file 2018-10-29 10:17:00 +09:00
blame.txt config.txt: move blame.* to a separate file 2018-10-29 10:17:00 +09:00
branch.txt config.txt: move branch.* to a separate file 2018-10-29 10:17:00 +09:00
browser.txt config.txt: move browser.* to a separate file 2018-10-29 10:17:00 +09:00
checkout.txt config.txt: move checkout.* to a separate file 2018-10-29 10:17:00 +09:00
clean.txt config.txt: move clean.* to a separate file 2018-10-29 10:17:00 +09:00
color.txt config.txt: move color.* to a separate file 2018-10-29 10:17:00 +09:00
column.txt config.txt: move column.* to a separate file 2018-10-29 10:17:00 +09:00
commit.txt config.txt: move commit.* to a separate file 2018-10-29 10:17:00 +09:00
completion.txt config.txt: move completion.* to a separate file 2018-10-29 10:17:01 +09:00
core.txt docs/config: clarify "text property" in core.eol 2019-01-29 09:21:33 -08:00
credential.txt config.txt: move credential.* to a separate file 2018-10-29 10:17:01 +09:00
diff.txt Merge branch 'nd/config-split' 2018-11-13 22:37:16 +09:00
difftool.txt config.txt: move difftool.* to a separate file 2018-10-29 10:17:01 +09:00
fastimport.txt config.txt: move fastimport.* to a separate file 2018-10-29 10:17:01 +09:00
fetch.txt config.txt: move fetch-config.txt to config/ 2018-10-29 10:17:01 +09:00
filter.txt config.txt: move filter.* to a separate file 2018-10-29 10:17:01 +09:00
fmt-merge-msg.txt config.txt: move fmt-merge-msg-config.txt to config/ 2018-10-29 10:17:01 +09:00
format.txt config.txt: move format-config.txt to config/ 2018-10-29 10:17:01 +09:00
fsck.txt config.txt: move fsck.* to a separate file 2018-10-29 10:17:01 +09:00
gc.txt config.txt: move gc.* to a separate file 2018-10-29 10:17:01 +09:00
gitcvs.txt config.txt: move gitcvs-config.txt to config/ 2018-10-29 10:17:01 +09:00
gitweb.txt config.txt: move gitweb.* to a separate file 2018-10-29 10:17:01 +09:00
gpg.txt config.txt: move gpg.* to a separate file 2018-10-29 10:17:02 +09:00
grep.txt config.txt: move grep.* to a separate file 2018-10-29 10:17:01 +09:00
gui.txt config.txt: move gui-config.txt to config/ 2018-10-29 10:17:02 +09:00
guitool.txt config.txt: move guitool.* to a separate file 2018-10-29 10:17:02 +09:00
help.txt config.txt: move help.* to a separate file 2018-10-29 10:17:02 +09:00
http.txt Merge branch 'fc/http-version' 2019-01-04 13:33:32 -08:00
i18n.txt config.txt: move i18n.* to a separate file 2018-10-29 10:17:02 +09:00
imap.txt git-imap-send.txt: move imap.* to a separate file 2018-10-29 10:17:02 +09:00
index.txt index: make index.threads=true enable ieot and eoie 2018-11-21 16:46:54 +09:00
init.txt config.txt: move init.* to a separate file 2018-10-29 10:17:02 +09:00
instaweb.txt config.txt: move instaweb.* to a separate file 2018-10-29 10:17:02 +09:00
interactive.txt config.txt: move interactive.* to a separate file 2018-10-29 10:17:02 +09:00
log.txt config.txt: move log.* to a separate file 2018-10-29 10:17:02 +09:00
mailinfo.txt config.txt: move mailinfo.* to a separate file 2018-10-29 10:17:02 +09:00
mailmap.txt config.txt: move mailmap.* to a separate file 2018-10-29 10:17:03 +09:00
man.txt config.txt: move man.* to a separate file 2018-10-29 10:17:03 +09:00
merge.txt merge-recursive: switch directory rename detection default 2019-04-08 16:02:08 +09:00
mergetool.txt config.txt: move mergetool.* to a separate file 2018-10-29 10:17:03 +09:00
notes.txt config.txt: move notes.* to a separate file 2018-10-29 10:17:03 +09:00
pack.txt pack-objects: create pack.useSparse setting 2019-01-17 13:44:43 -08:00
pager.txt config.txt: move pager.* to a separate file 2018-10-29 10:17:03 +09:00
pretty.txt config.txt: move pretty.* to a separate file 2018-10-29 10:17:03 +09:00
protocol.txt config.txt: move protocol.* to a separate file 2018-10-29 10:17:03 +09:00
pull.txt config.txt: move pull-config.txt to config/ 2018-10-29 10:17:03 +09:00
push.txt config.txt: move push-config.txt to config/ 2018-10-29 10:17:03 +09:00
rebase.txt rebase: add a config option to default to --reschedule-failed-exec 2018-12-11 17:19:01 +09:00
receive.txt config.txt: move receive-config.txt to config/ 2018-10-29 10:17:03 +09:00
remote.txt config.txt: move remote.* to a separate file 2018-10-29 10:17:03 +09:00
remotes.txt config.txt: move remotes.* to a separate file 2018-10-29 10:17:03 +09:00
repack.txt config.txt: move repack.* to a separate file 2018-10-29 10:17:04 +09:00
rerere.txt config.txt: move rerere.* to a separate file 2018-10-29 10:17:04 +09:00
reset.txt config.txt: move reset.* to a separate file 2018-10-29 10:17:04 +09:00
sendemail.txt config.txt: move sendemail-config.txt to config/ 2018-10-29 10:17:04 +09:00
sequencer.txt config.txt: move sequencer.* to a separate file 2018-10-29 10:17:04 +09:00
showbranch.txt config.txt: move showBranch.* to a separate file 2018-10-29 10:17:04 +09:00
splitindex.txt config.txt: move splitIndex.* to a separate file 2018-10-29 10:17:04 +09:00
ssh.txt config.txt: move ssh.* to a separate file 2018-10-29 10:17:02 +09:00
stash.txt config.txt: move stash.* to a separate file 2018-10-29 10:17:04 +09:00
status.txt config.txt: move status.* to a separate file 2018-10-29 10:17:04 +09:00
submodule.txt config.txt: move submodule.* to a separate file 2018-10-29 10:17:04 +09:00
tag.txt config.txt: move tag.* to a separate file 2018-10-29 10:17:04 +09:00
transfer.txt config.txt: move transfer.* to a separate file 2018-10-29 10:17:04 +09:00
uploadarchive.txt config.txt: move uploadarchive.* to a separate file 2018-10-29 10:17:04 +09:00
uploadpack.txt config.txt: move uploadpack.* to a separate file 2018-10-29 10:17:04 +09:00
url.txt config.txt: move url.* to a separate file 2018-10-29 10:17:04 +09:00
user.txt config: allow giving separate author and committer idents 2019-02-04 12:18:13 -08:00
versionsort.txt config.txt: move versionsort.* to a separate file 2018-10-29 10:17:05 +09:00
web.txt config.txt: move web.* to a separate file 2018-10-29 10:17:05 +09:00
worktree.txt doc/config: do a better job of introducing 'worktree.guessRemote' 2018-12-28 13:27:11 -08:00