Bug: cherry-pick & submodule
I faced an unexpected behaviour during cherry-picking a commit to a branch with a submodule.
Git graph:
A -- B [master]
\
`- C -- D [test]
Both branches have a file with name a_file.
It has been added by commit A.
Commits B and C add a folder with name a_submodule to the respective branches. Commit C does it regularly by adding a file with name a_submodule/content. Commit B adds a submodule with name a_submodule.
Commit D only modifies a_file.
Note that a_file and a_submodule are not related.
[repo]
|- a_file
`- a_submodule
When I trying to cherry pick commit D on commit B, I got a conflict with a_submodule. Changes of a_file are successfully cherry-picked.
I expected, that there would be no conflicts.
A bash script reproducing the bug is listed below.
Vasily.
====
rm -rf a_submodule a_repo
mkdir a_submodule
cd a_submodule
git init
touch a_file_in_a_submodule
git add a_file_in_a_submodule
git commit -m "add a file in a submodule"
cd ..
mkdir a_repo
cd a_repo
git init
touch a_file
git add a_file
git commit -m "add a file"
git branch test
git checkout test
mkdir a_submodule
touch a_submodule/content
git add a_submodule/content
git commit -m "add a regular folder with name a_submodule"
echo "123" > a_file
git add a_file
git commit -m "modify a file"
git checkout master
git submodule add ../a_submodule a_submodule
git submodule update a_submodule
git commit -m "add a submodule info folder with name a_submodule"
# Trying to cherry-pick modification of a file from test branch. git cherry-pick test
# some debug git status ====
PATCH 1/1 t/3512: demonstrate unrelated submodule/file conflict as cherry-pick failure
---
I rewrote your script to integrate with our test suite, potentially acting as a regression test once we solve the Directory/File conflict issue.
Thanks,
Stefan
t/t3512-cherry-pick-submodule.sh | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+)
t/t3512-cherry-pick-submodule.sh +36 -0
@@ -10,4 +10,40 @@ KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1 KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1 test_submodule_switch "git cherry-pick" +test_expect_failure 'unrelated submodule/file conflict is ignored' ' + test_create_repo sub && + + touch sub/file && + git -C sub add file && + git -C sub commit -m "add a file in a submodule" && + + test_create_repo a_repo && + ( + cd a_repo && + touch a_file && + git add a_file && + git commit -m "add a file" && + + git branch test && + git checkout test && + + mkdir sub && + touch sub/content && + git add sub/content && + git commit -m "add a regular folder with name sub" && + + echo "123" >a_file && + git add a_file && + git commit -m "modify a file" && + + git checkout master && + + git submodule add ../sub sub && + git submodule update sub && + git commit -m "add a submodule info folder with name sub" && + + git cherry-pick test + ) +' + test_done
Signature · 1 line
2.15.0.128.gcadd42da22