好像网站有点过时了。
svnpull 现在被 repopuller 取代了。如果您在同一台服务器上,您也不需要它。
我改编了脚本:
nano /usr/local/sbin/reposurgeon-convert-svn2git
并输入:
#!/bin/bash
PROJECT=myproject
svnrepo=svn+ssh://rubo77@myserver.de/var/svn-repos/$PROJECT
# or something like svnrepo=https://svn.origo.ethz.ch/$PROJECT
gitrepo=/tmp/$PROJECT-git
cd /tmp
# start over with:
#rm $PROJECT-mirror/ $PROJECT-git/ -Rf
echo
echo pull/copy the repository...
#repopuller $svnrepo
# or copy it if it is on the same server:
cp -av /var/svn-repos/$PROJECT /tmp/$PROJECT-mirror
echo
echo start conversion...
reposurgeon <<EOF
read /tmp/$PROJECT-mirror
prefer git
edit
references lift
rebuild $gitrepo
EOF
echo ...finished
# now filter out all falsly generated .gitignore files:
cd $gitrepo/
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch $(find . -name .gitignore|xargs )" \
--prune-empty --tag-name-filter cat -- --all
我过滤掉 .gitignore 文件,比如github用filter-branch记录的文件,否则它们会在所有标签中创建提交(见下面的注释)。完成后,您必须创建一个新的 .gitignore 文件。
这可能需要一段时间,因此您应该在内部tmux
或screen
使用
tmux
bash /usr/local/sbin/reposurgeon-convert-svn2git
请注意,您的所有标签都符合 git。
我得到了错误
reposurgeon% reposurgeon: exporting...fatal: Branch name doesn't conform to GIT standards: refs/tags/version 3.6.2
所以我清理了svn存储库并删除了这个分支,所以所有标签和分支都符合:
svn rm "$svnrepo/tags/version 3.6.2"
并使用此脚本将其从所有历史记录中删除:
如何完全删除包含空格的 SVN 标记?
然后我从脚本重新开始:
rm $PROJECT-mirror/ $PROJECT-git/ -Rf
bash /usr/local/sbin/reposurgeon-convert-svn2git
注意:
在不删除.gitignore
文件的情况下,它在 git 中与之前在 SVN 中的外观完全相同,除了一件事:所有标签在它们被标记的确切日期在日志中排序,而不是它们开始广告的提交。似乎.gitignore
在每个分支和标签的转换过程中添加了一个文件,但是 .gitignore-file 会导致这些标签内的提交带有标签创建的时间戳。
新标签没问题,它们出现在它们所属的修订版上。(请参阅使用 reposurgeon 将 SVN 存储库转换为 git 而无需创建 .gitignore 文件?)