Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.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迁移(带有移动的文件夹)_Git_Svn_Version Control_Bitbucket_Git Svn - Fatal编程技术网

SVN子文件夹到GIT迁移(带有移动的文件夹)

SVN子文件夹到GIT迁移(带有移动的文件夹),git,svn,version-control,bitbucket,git-svn,Git,Svn,Version Control,Bitbucket,Git Svn,案例 我们有一个巨大的SVN存储库,有80个子文件夹,我们正试图拆分成多个GIT存储库并移动BitBucked 我使用以下方法将SVN中的子文件夹迁移到GIT: git svn克隆”https://localhost:40/svn/repo“--trunk=“/Customers/[folder]”--prefix=“--authors file=“authors.txt”“[folder]” 它很好用 问题 “/Customers/[folder]”包含以前从SVN存储库中的另一个子文件夹“/

案例

我们有一个巨大的SVN存储库,有80个子文件夹,我们正试图拆分成多个GIT存储库并移动BitBucked

我使用以下方法将SVN中的子文件夹迁移到GIT:
git svn克隆”https://localhost:40/svn/repo“--trunk=“/Customers/[folder]”--prefix=“--authors file=“authors.txt”“[folder]”

它很好用

问题

“/Customers/[folder]”包含以前从SVN存储库中的另一个子文件夹“/Apps/[folder]”移动的子文件夹

旧结构:

repo
--Apps
----Customer1App1
----Customer1App2
----Customer2App1
--Customers
----Customer1
----Customer2
repo
--Customers
----Customer1
------Customer1App1
------Customer1App2
----Customer2
------Customer2App1
新结构:

repo
--Apps
----Customer1App1
----Customer1App2
----Customer2App1
--Customers
----Customer1
----Customer2
repo
--Customers
----Customer1
------Customer1App1
------Customer1App2
----Customer2
------Customer2App1
问题是新GIT存储库中迁移的应用程序文件夹与SVN一样,在此移动之前不包含任何历史记录。有办法解决这个问题吗

额外信息


我已经看到了这一点,但找不到从新存储库外部将其转换为子文件夹的方法。

对于一次性迁移
git svn
不是转换存储库或存储库部分的正确工具。如果您想将Git用作现有SVN服务器的前端,那么它是一个很好的工具,但是对于一次性转换,您应该不要使用
Git SVN
,而是
svn2git
,它更适合此用例

有很多工具称为
svn2git
,最好的工具可能是来自的KDE工具。我强烈建议使用
svn2git
工具。这是我所知道的最好的一款,它的规则文件非常灵活

您将能够轻松地配置
svn2git
s规则文件,以从当前的SVN布局(包括任何复杂的历史记录)生成所需的结果

如果您不是100%了解存储库的历史记录,
svneverever
from是在将SVN存储库迁移到Git时调查其历史记录的一个很好的工具


尽管
git svn
更容易开始,但以下是使用KDE
svn2git
而不是
git svn
更优越的原因,除了它的灵活性之外:

  • 通过
    svn2git
    (如果使用了正确的历史记录),可以更好、更清晰地重建历史记录,对于具有分支和合并等更复杂的历史记录尤其如此
  • 这些标记是真实的标记,而不是Git中的分支
  • 使用
    git svn
    时,标记包含一个额外的空提交,这也使得它们不是分支的一部分,因此正常的
    fetch
    将不会获取它们,直到您将
    --tags
    交给命令,因为默认情况下,也只获取指向已获取分支的标记。使用正确的svn2git标记就可以找到它们所属的位置
  • 如果您更改了SVN中的布局,您可以使用
    svn2git
    轻松配置它,使用
    git SVN
    您最终将丢失历史记录
  • 使用
    svn2git
    还可以轻松地将一个SVN存储库拆分为多个Git存储库
  • 或者将同一SVN根目录中的多个SVN存储库轻松组合到一个Git存储库中
  • 使用正确的
    svn2git
    比使用
    git svn

你看,有很多原因导致
git svn
更差,而KDE
svn2git
更优越。:-)

我最终用SharpSVN和SharpGit在C#中编写了自己的转换应用程序

本质上是这样的:

  • 查找所有移动和重命名
  • 查找涉及上述任何操作的所有修订
  • 然后,对于每个修订版:
    • 签出主目录
    • 将更改复制到主目录
    • 将所有文件添加到Git repo
    • 提交Git回购
    • 还原副本以创建新副本(我仍然需要优化此部分,使其更快)
    • 转到新版本

谢谢您的回复。这不是我所希望的答案,但看看svn2git,你可能是对的。我将尝试使用svn2git创建一个新的代码文件如果您想使用
git svn
,您可以通过指定多个中继位置来获得所需的内容,您可以指定多个中继位置。但我仍然建议使用KDEs
svn2git
。如果没有代码或代码链接,这似乎无法回答问题(至少对像我这样的未来读者来说不是这样)。