From: Per Cederqvist <cederp@opera.com>
To: git@vger.kernel.org
Cc: Per Cederqvist <cederp@opera.com>
Subject: cherry-picking fails after making a directory a submodule
Date: Mon, 8 Jan 2018 22:08:46 +0100 [thread overview]
Message-ID: <CAP=KgsSQOG=mmUDfSFDw0HJYvJWVPFU7M5T+k4VhfuRC_v9dww@mail.gmail.com> (raw)
I have a situation where I have switched a directory from being a
subdirectory to being a submodule. I then try to cherry-pick a commit
from a taskbranch that was made before the switch to the master
branch. The commit touches a file outside the subdirectory/submodule.
Yet "git cherry-pick" fails with this error message:
> error: could not apply 78c403e... Add a project feature
> hint: after resolving the conflicts, mark the corrected paths
> hint: with 'git add <paths>' or 'git rm <paths>'
> hint: and commit the result with 'git commit'
I can resolve the situation by running "git add libfoo && git
cherry-pick --continue". The generated commit contains no changes to
"libfoo".
I don't understand why I need to manually add libfoo, as the commit
I'm cherry-picking doesn't touch anything in libfoo.
The script below can reproduce the issue. Tested with git 2.15.1,
2.14.0 and 2.8.0, all with the same result.
Is this a bug in "git cherry-pick"?
-- cut here for cherry-across-submodule --
#!/bin/sh
#
# This script creates a simple repo, where the "libfoo" directory
# initially is a normal directory, but later becomes a git submodule.
# It then tries to cherry-pick a commit (that doesn't touch libfoo)
# that was created before the conversion to master (after the
# conversion). This fails for unclear reasons.
# I've tested this with the following git versions:
# - 2.8.0
# - 2.14.0
# - 2.15.1
#
# They all behave the same
# export PATH=/usr/local/git-2.15.1/bin:$PATH
set -e -x
git --version
# Refuse to run if this directory already exists, to prevent data loss.
mkdir cherry-across-submodule-root
cd cherry-across-submodule-root
mkdir root
(cd root && git init --bare libfoo.git)
(cd root && git init --bare project.git)
mkdir workspace
(cd workspace && git clone ../root/libfoo)
(cd workspace && git clone ../root/project)
proj_commit ()
{
(cd workspace/project &&
printf "$1\n" >> $2 &&
git add $2 &&
git commit -m"$3")
}
foo_commit ()
{
(cd workspace/libfoo &&
printf "$1\n" >> $2 &&
git add $2 &&
git commit -m"$3")
}
both_commit ()
{
foo_commit "$1" $2 "$3"
proj_commit "$1" libfoo/$2 "Imported libfoo: $3"
}
proj_commit "This is a project" README "Started the project"
mkdir workspace/project/libfoo
both_commit "This is a library" README "Started the library"
both_commit "all:\n\ttouch libfoo.a" Makefile "Build something"
proj_commit "all:\n\tmake -C libfoo" Makefile "Build libfoo"
proj_commit "ceder" AUTHORS "I made this"
both_commit "GPL" "COPYING" "Add license info"
(cd workspace/libfoo && git push)
(cd workspace/project && git push)
(cd workspace/project && git checkout -b task-1)
proj_commit "int feature() { return 17; }" feature.c "Add a project feature"
(cd workspace/project && git push -u origin task-1)
assert_clean()
{
(cd workspace/project &&
[ -z "`git status --porcelain`" ] )
}
# Cherrypicking task-1 to task-2 works fine.
(cd workspace/project && git checkout -b task-2 master && git
cherry-pick task-1)
assert_clean
(cd workspace/project &&
git checkout master &&
git rm -r libfoo &&
git submodule add -b master ../libfoo.git libfoo &&
git commit -m"Made libfoo a submodule")
assert_clean
# Now suddenly cherrypicking fails? I get this message from the
# cherry-pick command:
# error: could not apply 78c403e... Add a project feature
# hint: after resolving the conflicts, mark the corrected paths
# hint: with 'git add <paths>' or 'git rm <paths>'
# hint: and commit the result with 'git commit'
(cd workspace/project && git checkout -b task-3 master && git
cherry-pick task-1)
# At this point, "git status --porcelain" prints two lines:
# A feature.c
# AU libfoo
assert_clean
-- cut here for cherry-across-submodule --
/ceder
next reply other threads:[~2018-01-08 21:08 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-08 21:08 Per Cederqvist [this message]
2018-01-08 21:46 ` cherry-picking fails after making a directory a submodule Stefan Beller
2018-01-08 22:15 ` Per Cederqvist
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAP=KgsSQOG=mmUDfSFDw0HJYvJWVPFU7M5T+k4VhfuRC_v9dww@mail.gmail.com' \
--to=cederp@opera.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).