Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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
不总是使用trunk/branchs/tags结构将repo从SVN迁移到GIT_Git_Svn_Git Svn - Fatal编程技术网

不总是使用trunk/branchs/tags结构将repo从SVN迁移到GIT

不总是使用trunk/branchs/tags结构将repo从SVN迁移到GIT,git,svn,git-svn,Git,Svn,Git Svn,我正在寻找一种永久(即导入后不会使用git svn,并且会再次克隆repo以除去所有git svn剩余物)将我的一个svn存储库迁移到git的方法。通常这将是一件容易的事情——只需执行第页中解释的步骤 但是,在SVN存储库中,我在一段时间后切换到了trunk/branchs/tags结构,因此~2000次提交中大约有一半使用的是/trunk中的实际主干,而另一半使用/trunk/(即,有一次大型提交移动了所有内容)因此,无论是在执行git svn初始化时使用-s还是不使用它,都不能正常工作 我现

我正在寻找一种永久(即导入后不会使用git svn,并且会再次克隆repo以除去所有git svn剩余物)将我的一个svn存储库迁移到git的方法。通常这将是一件容易的事情——只需执行第页中解释的步骤

但是,在SVN存储库中,我在一段时间后切换到了trunk/branchs/tags结构,因此~2000次提交中大约有一半使用的是/trunk中的实际主干,而另一半使用/trunk/(即,有一次大型提交移动了所有内容)因此,无论是在执行git svn初始化时使用
-s
还是不使用它,都不能正常工作

我现在正在寻找一种将存储库正确导入git的方法,即在不破坏旧提交的同时保留分支信息(没有标记,我从未创建过任何标记)。如果这不可能,我想知道是否有办法重写旧的提交来更改repo,使其使用trunk/branchs/tags结构,那么我可以简单地在git svn中使用
-s

TL,DR:如果可以接受一些手动工作,可以修复问题中描述的混乱的存储库。最简单的方法是使用SVN转储文件,然后使用git SVN和stdlayout选项简单地导入它


我通过重写存储库的svndump,从一开始就包含适当的结构,成功地做到了这一点:

svnadmin dump orig/ --incremental > repo.svndump
然后,我使用一个小型内联Perl脚本来更改文件夹:

perl -pe 's/^Node-path: (?!trunk|branches|tags)(.+)$/Node-path: trunk\/$1/g' repo.svndump > repo2.svndump
由于转储现在无效-需要在r0中创建
trunk
文件夹,并且需要删除将所有内容从
/
移动到
/trunk
的提交-我手动编辑转储文件(幸运的是,所有元数据都是纯文本),并在r0更改的开头添加了以下内容:

Node-path: trunk
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END
在“提交移动所有文件”中,我删除了所有操作并添加了以下内容以创建
分支
文件夹(如果使用了
标记
文件夹,也同样如此)


现在可以使用
svnadmin load
加载已编辑的转储文件,这给了我一个可以由git svn导入的存储库,没有任何问题。

如果它是公共的,请尝试让github为您导入。它不是(我很确定github也不支持这种非常特殊的情况)。您可以使用git svn的
-r
开关首先克隆到您使用
-T
更改结构的位置,然后在第二个命令中使用
-s
从那里导入吗?
Node-path: branches
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END