[BUG] Symbolic links break "git fast-export"?
- From
Lars Schneider <larsxschneider@gmail.com>
- Date
- Jun 24, 2019, 11:03 UTC
- Message-ID
- <95EF0665-9882-4707-BB6A-94182C01BE91@gmail.com>
Hi folks,
Is my understanding correct, that `git fast-export | git fast-import` should not modify the repository? If yes, then we might have a bug in `git fast-export` if symbolic directory links are removed and converted to a real directory.
Consider this test case:
# Create test repo
git init .
mkdir foo
echo "foo" >foo/baz
git add .
git commit -m "add foo dir"
ln -s foo bar
git add .
git commit -m "add bar dir as link"
rm bar
mkdir bar
echo "bar" >bar/baz
git add .
git commit -m "remove link and make bar dir real" printf "BEFORE: "
git rev-parse HEAD # Fast export, import ... that should not change anything!
git fast-export --no-data --all --signed-tags=warn-strip \
--tag-of-filtered-object=rewrite | git fast-import --force --quietprintf "AFTER: "
I would assume that the BEFORE/AFTER hashes match. Unfortunately, with Git 2.22.0 they do no. The problem is this export output I think:
remove link and make bar dir real
from :2
M 100644 5716ca5987cbf97d6bb54920bea6adde242d87e6 bar/baz
D barThe new file in the `bar` directory is added to the repo first and afterwards the path `bar` is deleted. I think that deletes the entire directory `bar`?
If you confirm that this is a bug, then I will try to provide a fix.
Thanks, Lars