我是git的新手,我正在尝试将svn存储库移动到git.我按照下面的指南,所以现在我的服务器上有一个git repo
http://pauldowman.com/2008/07/26/how-to-convert-from-subversion-to-git/
所以,如果我做"git branch"git回复"*master",如果我做"git branch -r",我会得到svn存储库中所有分支的列表.
我的最后一个svn-checkins已经在其中一个分支中,但当我执行"git svn clone"-stuff我在该分支中的提交(它们尚未合并到主干中)在我的(git)主分支中可见.我在这里错过了什么?
此外,如果我在我的开发机器上做"git clone"我得到的文件没问题.但如果我做"git branch -r"我只能看到主分支而不是远程分支".
由于我们一起摆脱了svn-repo,我希望在git-repo中拥有所有svn分支,以便可以从开发人员客户端访问它们.
再一次,我不是一个完全的新手,但离它不远.所以如果有一些基本的东西我在这里失踪请告诉我.
更新
完成一些RTFM(man git-svn)后,我解决了主分支中存在分支内容的第一个问题
重置 - 硬件遥控器/主干
现在主干和主分支是一样的.现在,接下来将弄清楚如何从开发客户端获取分支.
更新2
我通过结合上面的url和Scott指向的url来实现它.所以,从一开始.
我首先在服务器上创建了一个空存储库,它们保存在我们服务器上的/ usr/local/git-repos中:
server> cd /usr/local/git-repos
server> mkdir my_project.git
server> cd my_project.git
server> git init
Run Code Online (Sandbox Code Playgroud)
然后我将svn-repository克隆到我的dev-machine(注意,在我们的svn服务器上,"branches"dir被称为"branch",而不是 's'):
dev> git svn clone http://<svn.server>/my_project --no-metadata -A authors.txt -t tags -b branch -T trunk my_project
Run Code Online (Sandbox Code Playgroud)
然后进行一些清理以按顺序获取标签和分支:
dev> cp -Rf .git/refs/remotes/tags/* .git/refs/tags/
dev> rm -Rf .git/refs/remotes/tags
dev> cp -Rf .git/refs/remotes/* .git/refs/heads/
dev> rm -Rf .git/refs/remotes
Run Code Online (Sandbox Code Playgroud)
现在将我的服务器添加为远程存储库:
dev> git remote add origin jorgen@<our_server>:/usr/local/git-repos/my_project.git
Run Code Online (Sandbox Code Playgroud)
最后,将所有分支和标记推送到服务器:
dev> git push origin --all
Run Code Online (Sandbox Code Playgroud)
Phew,现在你有它,现在我可以摆脱那个svn-repo.
更新3
Checkout ebneters发布在下面,以便更轻松地进行...
小智 15
关于如何进行相当好的SVN导入有一个相当详细的解释,解释了如何在这里正确转换分支:
https://git-scm.com/book/en/v1/Git-and-Other-Systems-Migrating-to-Git
简短的回答就是运行:
$ cp -Rf .git/refs/remotes/* .git/refs/heads/
$ rm -Rf .git/refs/remotes
Run Code Online (Sandbox Code Playgroud)
希望这很有帮助.
小智 5
斯科特的解决方案对我不起作用.我怀疑最近版本的git-svn中有些内容可能已经发生了变化,因为他发布了(并且自编写链接的书籍以来),因为它似乎在克隆完成后立即进行垃圾收集.但这只是猜测为什么它不起作用.我正在使用git 1.6.5.6.
具体来说,我的.git/refs/remotes目录是完全空的,除了一个标签目录,它也是空的.所以我无法复制任何东西以使其正确.
经过一番探讨之后,我能够通过检查文件.git/packed-refs以及对以下内容执行搜索和替换来解决此问题(按此顺序):
refs/remotes/tags => refs/tags
refs/remotes => refs/heads
Run Code Online (Sandbox Code Playgroud)
如果您的编辑器是vim,则可以使用以下两个命令执行此操作:
:%s/refs\/remotes\/tags/refs\/tags/g
:%s/refs\/remotes/refs\/heads/g
Run Code Online (Sandbox Code Playgroud)
svn2git 1.3.1也没有为我生成可用的结果(几个月前的某个点之后没有导入任何提交,并且所有分支都显示相同的提交).现在我已经放弃了svn2git并且使用git-svn和上面的结果取得了最大的成功.
一厢情愿的想法:如果git-svn只是添加了一个像'放弃'或'迁移'这样的命令,那将是一件好事,它会以一种面向未来的方式自动化这个过程.
归档时间: |
|
查看次数: |
11710 次 |
最近记录: |