Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将svn转换为git,如何使分支不只是svn repo中的远程分支?_Svn_Git_Git Svn - Fatal编程技术网

将svn转换为git,如何使分支不只是svn repo中的远程分支?

将svn转换为git,如何使分支不只是svn repo中的远程分支?,svn,git,git-svn,Svn,Git,Git Svn,我是git的新手,我正在尝试将svn存储库移动到git。我遵循了下面的指南,所以现在我的服务器上有一个git回购 因此,如果我执行“git branch”,git回复“*master”,如果执行“git branch-r”,我将得到svn存储库中所有分支的列表 我上一次的svn签入是在其中一个分支中,但是当我进行“git svn克隆”时,我在该分支中的提交(它们尚未合并到主干中)在我的(git)主分支中可见。我错过了什么 另外,如果我在我的开发机器上做“git克隆”,我就可以得到文件。但是如果

我是git的新手,我正在尝试将svn存储库移动到git。我遵循了下面的指南,所以现在我的服务器上有一个git回购

因此,如果我执行“git branch”,git回复“*master”,如果执行“git branch-r”,我将得到svn存储库中所有分支的列表

我上一次的svn签入是在其中一个分支中,但是当我进行“git svn克隆”时,我在该分支中的提交(它们尚未合并到主干中)在我的(git)主分支中可见。我错过了什么

另外,如果我在我的开发机器上做“git克隆”,我就可以得到文件。但是如果我执行“git branch-r”,我只能看到主分支,而不能看到远程分支”

因为我们一起摆脱了svn repo,所以我希望git repo中的所有svn分支都可以从开发人员客户端访问

再说一次,我不是一个完全的git新手,但离它不远。所以,如果我在这里遗漏了一些基本的东西,请告诉我

更新
在做了一些RTFM(ManGitSVN)之后,我解决了主分支中存在的第一个分支问题

重置--硬遥控器/中继

现在主干和主分支是相同的。现在,下一步是了解如何从开发客户机获取分支

更新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
然后我将svn存储库克隆到我的开发机器上(注意,在我们的svn服务器上,“branchs”dir被称为“branch”wioutthe's'):

现在将我的服务器添加为远程存储库:

dev> git remote add origin jorgen@<our_server>:/usr/local/git-repos/my_project.git
唷,现在你有了它,现在我可以摆脱svn回购了

更新3

请在下面签出一个更简单的方法…

这里有一个相当详细的说明,说明如何进行相当好的SVN导入,说明如何正确转换分支:

简单的答案是运行以下命令:

$ cp -Rf .git/refs/remotes/* .git/refs/heads/
$ rm -Rf .git/refs/remotes

希望有帮助。

< P>另一个好办法,只是为了记录,我正在转换几个大的存储库,这是一个天赐之物。它自动化了所有的步骤来处理分支和转换Svn标签到真正的Git标签。

< P>史葛的解决方案对我不起作用。我怀疑某事。ng可能在git svn的最新版本中进行了更改,因为他发布了该版本(以及编写了链接的书),因为它似乎在克隆完成后立即积极地进行垃圾收集。但这只是猜测为什么它不起作用。我使用的是git 1.6.5.6

具体地说,我的.git/refs/remotes目录是完全空的,只有一个tags目录也是空的,所以我无法复制任何东西来纠正它

经过一些探索,我能够通过检查文件.git/packed refs并对以下内容执行搜索和替换(按此顺序)来修复此问题:

如果编辑器是vim,则可以使用以下两个命令:

:%s/refs\/remotes\/tags/refs\/tags/g
:%s/refs\/remotes/refs\/heads/g
svn2git 1.3.1也没有为我生成可用的结果(几个月前某个时间点之后没有导入任何提交,分支都显示了相同的提交)。现在,我已经放弃了svn2git,并将git svn与上述结合使用获得了最大的成功


一厢情愿的想法:如果git svn只是添加了一个像“放弃”或“迁移”这样的命令,它将以一种经得起未来考验的方式自动化这个过程,那当然好了。

我已经将2个svn repo迁移到git(git版本1.7.0.4)按照斯科特的配方,一个小的和一个大的。小的按照斯科特在书中的章节中所描述的行为。大的需要大卫的解决方案。 另一件事是

$ git push origin --all
没有推任何标签,而是我必须这样做:

$ git push origin --all
$ git push origin --tags
从国旗上看,这可能并不明显——从书中的所有章节,我都意识到了这一点
这是在我删除了本地git svn repo之后完成的。

啊,这会为我节省很多工作。但是,嘿,至少我现在比以前更了解git…:)我在一个svn服务器的git镜像上使用了这种方法,我一直从中获取数据,这以某种方式打破了历史。这是预期的还是我做错了什么。你是救世主!非常感谢! :)
refs/remotes/tags => refs/tags
refs/remotes => refs/heads
:%s/refs\/remotes\/tags/refs\/tags/g
:%s/refs\/remotes/refs\/heads/g
$ git push origin --all
$ git push origin --all
$ git push origin --tags