GIT-SVN: Corrupted commits when using --preserve-empty-dirs

2 messages, 1 author, 2016-06-15 · open the first message on its own page

GIT-SVN: Corrupted commits when using --preserve-empty-dirs

From: Mark Plomer <hidden>
Date: 2016-06-15 22:54:37

Hi,
if I clone a SVN repository with --preserve-empty-dirs it terminates at some point with i.e. following error:
folder/subfolder was not found in commit 2dcb008c220f5f6fe33700c9e7deb0c8fa2b8607 (r4)

I tracked things down to the following problem:
- r1: Create a directory with subdirectory with a file
- r2: Remove the file (so it generates a virtual .gitignore)
- r3: Rename subdirectory
- r4: Add a symlink named like the old subdirectory

-> In GIT the symlink is actually not a symlink but a folder with the ".gitignore" file ... which break things later when changing symlink


# Simple reproduce script:
svnadmin create test-svn-repo
svn co file://`pwd`/test-svn-repo test-svn-wc

mkdir -p test-svn-wc/folder/subfolder
touch test-svn-wc/folder/subfolder/file.txt
svn add test-svn-wc/*
svn ci -m 'Initial commit' test-svn-wc

svn rm test-svn-wc/folder/subfolder/file.txt
svn ci -m 'Removed file.txt' test-svn-wc

svn up test-svn-wc
svn mv test-svn-wc/folder/subfolder test-svn-wc/folder/subfolder2
svn ci -m 'Renamed subfolder' test-svn-wc

svn up test-svn-wc
ln -s subfolder2 test-svn-wc/folder/subfolder
svn add test-svn-wc/folder/subfolder
svn ci -m 'Added subfolder symlink' test-svn-wc

rm -f test-svn-wc/folder/subfolder
ln -s changedlink test-svn-wc/folder/subfolder
svn ci -m 'Changed symlink' test-svn-wc


git svn clone --preserve-empty-dirs file://`pwd`/test-svn-repo test-git
# this throws error: folder/subfolder was not found in commit 2dcb008c220f5f6fe33700c9e7deb0c8fa2b8607 (r4)


Tested with git 1.7.12, svn 1.6.12 (debian)

Greets Mark

Re: GIT-SVN: Corrupted commits when using --preserve-empty-dirs

From: Mark Plomer <hidden>
Date: 2016-06-15 22:54:39

There is a strange workaround for SVN-repos, containing directories that 
were replaced by symlinks in the past, properly cloned into GIT (with 
empty dirs):

You have to import it part-by-part ... i.e. fetch revision 1-3 and then 
fetch 4-5:

git svn clone -r 1:3 --preserve-empty-dirs file://`pwd`/test-svn-repo 
test-git
cd test-git
git svn fetch
# This works fine for the example below

The disadvantage is, that you have to figure out those critical 
revisions manually. Otherwise you may have an inconsistent clone.

Am 04.09.2012 15:11, schrieb Mark Plomer:
Hi,
if I clone a SVN repository with --preserve-empty-dirs it terminates at some point with i.e. following error:
folder/subfolder was not found in commit 2dcb008c220f5f6fe33700c9e7deb0c8fa2b8607 (r4)

I tracked things down to the following problem:
- r1: Create a directory with subdirectory with a file
- r2: Remove the file (so it generates a virtual .gitignore)
- r3: Rename subdirectory
- r4: Add a symlink named like the old subdirectory

-> In GIT the symlink is actually not a symlink but a folder with the ".gitignore" file ... which break things later when changing symlink


# Simple reproduce script:
svnadmin create test-svn-repo
svn co file://`pwd`/test-svn-repo test-svn-wc

mkdir -p test-svn-wc/folder/subfolder
touch test-svn-wc/folder/subfolder/file.txt
svn add test-svn-wc/*
svn ci -m 'Initial commit' test-svn-wc

svn rm test-svn-wc/folder/subfolder/file.txt
svn ci -m 'Removed file.txt' test-svn-wc

svn up test-svn-wc
svn mv test-svn-wc/folder/subfolder test-svn-wc/folder/subfolder2
svn ci -m 'Renamed subfolder' test-svn-wc

svn up test-svn-wc
ln -s subfolder2 test-svn-wc/folder/subfolder
svn add test-svn-wc/folder/subfolder
svn ci -m 'Added subfolder symlink' test-svn-wc

rm -f test-svn-wc/folder/subfolder
ln -s changedlink test-svn-wc/folder/subfolder
svn ci -m 'Changed symlink' test-svn-wc


git svn clone --preserve-empty-dirs file://`pwd`/test-svn-repo test-git
# this throws error: folder/subfolder was not found in commit 2dcb008c220f5f6fe33700c9e7deb0c8fa2b8607 (r4)


Tested with git 1.7.12, svn 1.6.12 (debian)

Greets Mark
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help