我正在尝试使用Atlassian教程(https://www.atlassian.com/git/tutorials/migrating-overview)将我的svn存储库迁移到git存储库,而我无法正确检出我的svn存储库。克隆后,它具有使用git log
时的所有历史记录,但我没有看到任何文件。我试图用git checkout -b trunk remotes/trunk
检查其中一个远程分支,但在新创建的分支主干上仍然没有文件。
迁移脚本的开头如下所示:
#!/bin/sh
#$1 - remote svn repo
#$2 - local git repo name
java -jar svn-migration-scripts.jar authors $1 > authors.txt
git svn clone --stdlayout --authors-file=authors.txt $1 $2
我发现了什么
我可以使用git svn命令获取没有历史记录的文件:
git svn clone -rHEAD $1 $2
使用此命令检出的文件将具有类似svn的结构(trunk
,branches
),因此这不是我正在寻找的。
另一个尝试......
我尝试过使用GitHub中的svn2git
,但是它使用了相同的机制,所以它也失败了...命令:
svn2git https://svn/xxx --trunk trunk/src --branches branches --notags --authors ../authors.txt
输出:
Checked out HEAD:
https://svn/xxxx r149793
仍然没有文件,只有.git
文件夹。我试过取,拉等
另一个有趣的观察
我找到了一个奇怪的存储库。这样的文件夹结构:
* branches
* as usual...
* tags
* as usual...
* trunk
* src
* src
* pom.xml
输出如下:
svn2git https://svn/xxx --trunk trunk
svn2git https://svn/xxx --trunk trunk/
不起作用......
svn2git https://svn/xxx --trunk trunk/src
作品。这至少非常奇怪。
我不知道究竟是什么导致了这个问题,但它与我的git版本有关。我在Ubuntu上使用了git 1.9并且它失败了,但是对于OS X版本的git(1.8)上的相同命令它有效。如果您遇到此类问题,请尝试使用其他版本的git。
我用于迁移的脚本(svn-migration-scripts.jar
是从Atlassian教程下载的jar)
#!/bin/sh
# $1 - remote svn repo (https://svn/path/to/repository)
# $2 - local git repo name (MyProject)
# $3 - remote git repo address (user@gitserver:/path/to/repository)
java -jar svn-migration-scripts.jar authors $1 > authorsTmp.txt
sed "s/mycompany\.com/youractualcompany.com/g" authorsTmp.txt > authors.txt
git svn clone -s --authors-file authors.txt $1 $2
cd $2
java -Dfile.encoding=utf-8 -jar ../svn-migration-scripts.jar clean-git --force
git remote add origin $3
git push -u origin --all
我希望有人会觉得有帮助。