From: Junio C Hamano Date: Tue, 9 Apr 2019 17:14:21 +0000 (+0900) Subject: Merge branch 'ja/dir-rename-doc-markup-fix' X-Git-Tag: v2.22.0-rc0~132 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/081b08c45c88d21d869adea50cff9d83544418cf?ds=inline;hp=-c Merge branch 'ja/dir-rename-doc-markup-fix' Doc update. * ja/dir-rename-doc-markup-fix: Doc: fix misleading asciidoc formating --- 081b08c45c88d21d869adea50cff9d83544418cf diff --combined Documentation/technical/directory-rename-detection.txt index 1c0086e287,5ef051c030..844629c8c4 --- a/Documentation/technical/directory-rename-detection.txt +++ b/Documentation/technical/directory-rename-detection.txt @@@ -20,8 -20,8 +20,8 @@@ More interesting possibilities exist, t * one side of history renames x -> z, and the other renames some file to x/e, causing the need for the merge to do a transitive rename. - * one side of history renames x -> z, but also renames all files within - x. For example, x/a -> z/alpha, x/b -> z/bravo, etc. + * one side of history renames x -> z, but also renames all files within x. + For example, x/a -> z/alpha, x/b -> z/bravo, etc. * both 'x' and 'y' being merged into a single directory 'z', with a directory rename being detected for both x->z and y->z. @@@ -90,26 -90,3 +90,26 @@@ directory rename detection support in simply not implemented. Further, to implement this, directory rename detection logic would need to move from merge-recursive to diffcore-rename. + + * am + + git-am tries to avoid a full three way merge, instead calling + git-apply. That prevents us from detecting renames at all, which may + defeat the directory rename detection. There is a fallback, though; if + the initial git-apply fails and the user has specified the -3 option, + git-am will fall back to a three way merge. However, git-am lacks the + necessary information to do a "real" three way merge. Instead, it has + to use build_fake_ancestor() to get a merge base that is missing files + whose rename may have been important to detect for directory rename + detection to function. + + * rebase + + Since am-based rebases work by first generating a bunch of patches + (which no longer record what the original commits were and thus don't + have the necessary info from which we can find a real merge-base), and + then calling git-am, this implies that am-based rebases will not always + successfully detect directory renames either (see the 'am' section + above). merged-based rebases (rebase -m) and cherry-pick-based rebases + (rebase -i) are not affected by this shortcoming, and fully support + directory rename detection.