繁体   English   中英

如何将平面svn repo迁移到git repo

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM