From: Martin von Gagern <Martin.vGagern@gmx.net>
To: git@vger.kernel.org
Subject: Merging after directory got turned into submodule
Date: Tue, 11 Aug 2015 15:02:41 +0200 [thread overview]
Message-ID: <55C9F271.30008@gmx.net> (raw)
Hi!
I've noticed that if I turn a subdirectory into a submodule, I'm having
severe trouble merging branches from before that change, even if they
don't modify that subdirectory at all.
I've posted this problem on Stack Overflow and started a bounty for it.
See http://stackoverflow.com/q/31821219/1468366. So far I haven't
received an answer, so I decided to ask here as well.
Here is an example.
# Create one project, to be used as a subproject later on
git init a
cd a
echo aaa > aa
git add -A
git commit -m a1
cd ..
# Create a second project, containing a as a normal directory initially
git init b
cd b
mkdir a b
echo aaa > a/aa
echo bbb > b/bb
git add -A
git commit -m b1
# Replace directory with submodule
git rm -r a
git submodule add ../a a
git commit -m b2
# Create feature brach starting at version without submodule
git submodule deinit . # will error if I don't do this
git checkout -b branch HEAD^
echo abc > b/bb
git commit -a -m b3
# Try to merge the feature branch
git checkout master
git merge branch
This prints an error message:
> CONFLICT (file/directory): There is a directory with name a in branch.
> Adding a as a~HEAD
> Automatic merge failed; fix conflicts and then commit the result.
I get the same error if I do a git submodule update --init before the
git merge branch. I don't see any a~HEAD anywhere, neither in my
directory tree nor in the output from git status, which reads like this:
> On branch master
> You have unmerged paths.
> (fix conflicts and run "git commit")
>
> Changes to be committed:
>
> modified: b/bb
>
> Unmerged paths:
> (use "git add <file>..." to mark resolution)
>
> added by us: a
If I do git add a as suggested, I get another error:
> error: unable to index file a
> fatal: updating files failed
If I do git submodules update --init just before the merge, then I can
do git add a successfully. But if I forget to do so, and then try doing
that after the merge, I receive this error message:
> Submodule 'a' (…/a) registered for path 'a'
> Skipping unmerged submodule a
How do I recover from this situation? Something other than git merge
--abort, since I'd like to use it for things like git rebase as well,
and since in some scenarios (don't know how to reproduce) I couldn't
even abort the merge cleanly, and had to do a hard reset instead.
How can I avoid it in the first place? Is there some magic setting which
makes git do the right thing with submodules vs. directories during
merges, so that I don't have to manually post-process a merge which only
modifies files unrelated to the submodules?
If there is no easy way to avoid this, do you think I should file a bug
report for this? After all, replacing a subdirectory by a submodule
shouldn't be that rare, and neither should be merges across such a
change. So in my opinion, git should be able to cope with this.
Greetings,
Martin von Gagern
next reply other threads:[~2015-08-11 13:02 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-11 13:02 Martin von Gagern [this message]
2015-08-11 13:25 ` Merging after directory got turned into submodule John Keeping
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55C9F271.30008@gmx.net \
--to=martin.vgagern@gmx.net \
--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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.