去年中了勒索病毒之后,放弃了自建仓库,把绝大部分代码都放到了淘蝌蚪的SVN进行管理。感谢这个平台,免费且可以创建私有项目,除了网站的速度慢一点之外也没什么问题。最近想添加新项目时发现已经无法登录到用户页了,不过SVN客户端还可以正常连接,淘蝌蚪推荐大家迁移到Git代码进行管理,周围都用码云的多,来进行一次大迁移吧。

taocode-bye

创建svn用户-Git用户的对应文件

svnusername=gitusername<mail@mail.com>

taocode-svn-init

淘蝌蚪会在创建仓库的时候生成一条用户名为""的记录

""=unknow<unknow@unknow.com>

git svn clone

自己管理的项目我都是按照SVN的目录结构来存放,使用git-svn来迁移也就是个-s参数的事了。

git svn clone http://svnRepository --authors-file=user.txt -s

有部分项目是关联的,用了一个仓库来管理。比如前后端的我的目录结构是

trunk
	|-server
	|-webview
branches
	|-server
		|-dev
	|-webview
		|-dev1
		|-dev2
tags
	|-server
		|-v1
		|-v2
	|-webview
		|-v1
		|-v2

可以通过指定子目录把项目分出来

git svn clone http://svnRepository --authors-file=user.txt --trunk=/trunk/server --branches=/branches/server --tags=/tags/server
git svn clone http://svnRepository --authors-file=user.txt --trunk=/trunk/webview --branches=/branches/webview --tags=/tags/webview

我见过很多人拿SVN当网盘来使用,不按照目录结构来存放,而且什么东西都往里面扔,仓库的体积越来越大,最终的结果就是一团糟,每次要提交还不如网盘能自动同步。这样的仓库,我选择了放弃…

svn-disk

检查空目录

Git仓库是不允许存在空目录的,从SVN获取的空目录需要在目录内添加.gitkeep文件

find ./repository/ -type d -empty | xargs -I {} cp .gitkeep {}

调整对应的branchs和tags

git-svn生成的仓库中,对应的branchs里面的内容都还是在远程分支里

remotes-branch

在.git/refs/将remotes内对应的branch移动到heads中,将remotes内tags的内容移动到refs的tags里面

mv .git/refs/remotes/origin/dev .git/refs/heads/dev
mv .git/refs/remotes/origin/tags/* .git/refs/tags/

合并提交

在码云创建的新仓库不一定是空的,包含了初始的文件和Initial commit记录,如果直接直接push的话会获得错误

hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

这时如果直接pull的话,又会提示历史记录冲突

fatal: refusing to merge unrelated histories

需要增加--allow-unrelated-histories合并一下,之后提交全部branch,提交tag

git remote add origin https://remote.git
git pull origin master --allow-unrelated-histories
git push origin --all
git push -u --tags