[英]How do I migrate a flat svn repo to git repo
我有一个平坦的svn存储库,看起来像:
my_repo/
├── file1.c
├── file2.c
├── file3.c
└── README
这个repo没有分支或标签,我想要做的就是将它转换为git存储库并维护提交历史记录。
我试过了:
git svn clone --trunk=/ -A users.txt svn+ssh://user@svn.example.com/projects/my_repo dest_dir
然而,当我导航到dest_dir
并执行git svn fetch
,我认为它可以工作,它似乎不会取任何东西。 使用git log
产生:
fatal: bad default revision 'HEAD'
如果我使用svn checkout svn+ssh://user@svn.example.com/projects/my_repo
它会返回:
A my_repo/file1.c
A my_repo/file2.c
A my_repo/file3.c
A my_repo/README
Checked out revision 57.
因此存储库是活的并且可访问。
我尝试了各种工具,包括subgit
,它给了我这个错误: svn: E170003: 'stat' not implemented
,我认为这是因为托管存储库的服务器使用旧版本的subversion。 我无法控制服务器,因此无法执行更新。
我也尝试使用svn2git
,使用该命令
svn2git svn+ssh://user@svn.example.com/projects/my_repo --rootistrunk -authors users.txt --verbose
但这给了我另一个错误:
E: 'svn+ssh:/user@svn.example.com/projects/my_repo' is not a complete URL and a separate URL is not specified command failed
这让我很难过,我不知道为什么它不起作用。 基本上我想知道如何在保持历史的同时将我的svn repo变成一个git repo。 希望有人可以帮助我,或指出我正确的方向。 从来没有意识到将这个简单的回购转移到git会很困难!
谢谢
问题在于svn2git
的--rootistrunk
参数。 而不是那样,试试这个:
svn2git svn+ssh://user@svn.example.com/projects/my_repo --trunk / --notags --nobranches --authors users.txt --verbose
我有同样的问题。 不是标准的svn存储库:没有主干,没有标签,没有早午餐。 我检查了svn2git的所有可能选项,但没有成功。 因为svn2git只是git svn的ruby包装器,所以我直接尝试了git svn并且没关系。 这就是我所做的。
初始化空git dir并给出svn存储库路径以及trunk,tags和brunches的相对路径。 在我的情况下它是/因为我没有任何这些。
1. git svn init http://svnmydomain.com/urlpart/projectname --trunk=/ --tags=/ --branches=/
如果svn repo受密码保护,你将不得不为上面的命令提供用户名和密码参数,但在大多数情况下它不会起作用,因为它有点儿麻烦。 而是在当前文件夹中svn checkout。 git svn将使用svn现金,不会要求您输入密码。
检查git config是否正常。 类型
2. git config --list
你应该看到这个:
svn-remote.svn.url=http://svnmydomain.com/urlpart
svn-remote.svn.fetch=urlpart/projectname:refs/remotes/origin/trunk
svn-remote.svn.branches=urlpart/projectname/*:refs/remotes/origin/*
svn-remote.svn.tags=urlpart/projectname/*:refs/remotes/origin/tags/*
如果git config不正确,请通过执行手动修复它
git config <key> <value>
现在当git config正常时你应该从svn获取数据并将其推送到git服务器
3. git svn fetch
4. git remote add origin git@gitdomain:url/gitproject.git
5. git add .
6. git commit -m "merge from svn"
7. git push origin master
如果有些人继续在svn中工作,你需要不断地与git同步svn。 要这样做:
8. git svn rebase
9. git push origin master
使用git v2.20.1进行了一次旧的“扁平”SVN回购同样的问题:(关于http://www.sailmaker.co.uk/blog/2013/05/05/migrating-from-svn-上的食谱to-git-preserving-branches-and-tags-3 / )
git svn init <SVN https URL> --stdlayout --prefix=svn/ -T /
git svn fetch --all
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.