From: Joshua Jensen <jjensen@workspacewhiz.com>
To: "git@vger.kernel.org" <git@vger.kernel.org>
Subject: Repository data loss in fast-export with a merge of a deleted submodule
Date: Thu, 27 Oct 2011 13:27:49 -0600 [thread overview]
Message-ID: <4EA9B0B5.6060005@workspacewhiz.com> (raw)
Hello.
We had a submodule that we deleted and then added back into the
repository at the same location as the former submodule. When running
fast-export, the newly 'added' files for the merge commit are listed and
then are followed with a:
M ... path/to/submodule/file
D path/to/submodule
On fast-import, the resultant repository becomes corrupt due to the
Delete instruction above occurring AFTER the file adds/modifications.
The new repository does not match the old repository where the
fast-export was performed.
I have included a repro script below. I have not been able to test this
on Git 1.7.7.1, but I have tested on Git 1.7.7 (msysGit version).
Please compare the differences between the generated main.fe and
newmain.fe files. newmain.fe has data loss.
I am not familiar with the fast-export code. Can anyone help out?
Thanks.
Josh
---------
rm -rf main brokenmain sub main.fenewmain.fe
# Create the submodule.
mkdir sub
cd sub
git init
echo file > file
git add file
git commit -m file
cd ..
# Create the main repository.
mkdir main
cd main
git init
# Add the submodule.
git submodule add ../sub sub
git commit -m "Add submodule"
# Remove the submodule.
rm -rf sub
git rm sub .gitmodules
git commit -m "Remove submodule"
# Add sub/file to the master branch.
mkdir sub
echo file > sub/file
git add sub/file
git commit -m "Add sub/file"
if [ -f sub/file ]; then
echo "main: master branch: sub/file exists."
fi
# Delete the submodule directory manually, because we know that the
incoming merge will need it gone.
git checkout -B will-be-broken HEAD^^
rm -rf sub
git merge --no-ff master
# sub/file exists within the 'will-be-broken' branch.
if [ -f sub/file ]; then
echo "main: will-be-broken branch: sub/file exists."
fi
# Export out the main repository.
git fast-export --all > ../main.fe
# Create the brokenmain repository.
cd ..
mkdir brokenmain
cd brokenmain
git init
# Import in everything from the main repository.
git fast-import < ../main.fe
# sub/file exists within the master branch.
git checkout master
if [ -f sub/file ]; then
echo "brokenmain: master branch: sub/file exists."
fi
# sub/file SHOULD exist within the 'will-be-broken' branch but doesn't.
git checkout will-be-broken
if [ ! -f sub/file ]; then
echo "brokenmain: will-be-broken branch: sub/file SHOULD exist but
doesn't."
fi
# Export out the brokenmain repository.
git fast-export --all > ../brokenmain.fe
next reply other threads:[~2011-10-27 19:27 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-27 19:27 Joshua Jensen [this message]
2011-11-03 16:05 ` Repository data loss in fast-export with a merge of a deleted submodule Joshua Jensen
2011-11-14 15:06 ` Joshua Jensen
2011-11-14 19:51 ` Jens Lehmann
2011-11-30 7:15 ` Jeff King
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=4EA9B0B5.6060005@workspacewhiz.com \
--to=jjensen@workspacewhiz.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.
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.