git clone svn将文件夹拆分为单独的git存储库

git clone svn将文件夹拆分为单独的git存储库,git,svn,git-svn,Git,Svn,Git Svn,我有一些简单结构的SVN回购的旧转储: trunk/src/ folder1/ folder2/ folder3/ ... 我知道每个文件夹实际上是一个单独的项目,所以我想将这个svn repo克隆到git中,但将每个文件夹拆分到单独的git存储库中并保存历史。我该怎么做 我不需要魔法循环脚本。我可以手动命名每个文件夹。我只想知道如何将特定文件夹从svn克隆到保存历史的新git存储库中 [更新] 我只有一个SVN repo转储,没有SVN服务器。所以我做不到 git-svn克隆

我有一些简单结构的SVN回购的旧转储:

trunk/src/
  folder1/
  folder2/
  folder3/
  ...
我知道每个
文件夹
实际上是一个单独的项目,所以我想将这个svn repo克隆到git中,但将每个
文件夹
拆分到单独的git存储库中并保存历史。我该怎么做

我不需要魔法循环脚本。我可以手动命名每个文件夹。我只想知道如何将特定文件夹从svn克隆到保存历史的新git存储库中

[更新]

我只有一个SVN repo转储,没有SVN服务器。所以我做不到

git-svn克隆svn://path/to/my/trunk/src/folder1

相反,我使用的是

git-svn克隆file://path/to/my/dump

[我尝试的]

我使用
svnadmin
创建了一个svn转储文件,然后使用
svndumpfilter
只筛选出我需要的文件夹。我设法将原始svn转储文件拆分为单独的文件,每个
文件夹一个

svnadmin dump /svn/old_repos > ./repository.dump
svndumpfilter include /trunk/scr/folder1
      --drop-empty-revs
      --renumber-revs
      --preserve-revprops
    < ./repository.dump > ./folder1.dump
看起来转储文件已损坏。我尝试了
svndump load/repos/folder1
,但我收到了另一个错误,这次来自svnadmin:

svnadmin: File not found: transaction `0-0`, path `trunk/src/folder1
有什么想法吗?

类似于

git svn clone svn://path/to/your/trunk/src/folder1 
?

Subversion目录通常被认为是其自身的一种存储库

请注意,在这种情况下将不会集成SVN分支和标记


在转储的情况下,您可能需要将其导入某个地方(例如,导入临时本地SVN存储库)。

这就是我的窍门:

  • 创建svn存储库转储文件以供以后处理:

    svnadmin dump/svn/old_repo>/tmp/svn/repository.dump

  • 使用
    svndumpfilter
    将转储文件拆分为单独的转储:

    svndumpfilter包含/trunk/scr/folder1
    --空转
    --重新编号转速
    --保留旋转道具
    /tmp/svn/dump/folder1.dump

  • 创建新的空svn存储库

    svnadmin create/tmp/svn/repos/folder1

  • 创建根目录insde新的空svn存储库。这是非常重要的!由于一些不清楚的错误,我错过了那一步,几乎发疯了:

    svn mkdirfile:///tmp/svn/repos/folder1/trunk/src/folder1 --家长-m“走”

  • 将新转储加载到空的svn存储库中:

    svnadmin load/tmp/svn/repos/folder1

  • 现在来点git魔术。注意
    -T
    arg-它非常方便。我用它来简化我的生活,并使
    folder1
    成为git repo的根目录。如果我不这样做,我最终会得到一个git repo结构,如下所示:
    trunk/src/folder1/*
    (这就是我最初在svn repo中使用的结构)。我只想将
    folder1
    作为根:

    git svn克隆-T/trunk/src/folder1file:///tmp/svn/repos/folder1 /新建/路径/文件夹1


  • 就这样。对于您希望拥有新git存储库的每个目录,重复步骤2-7。我最后为此编写了一个简单的脚本。

    没有分支,所以这不是问题。问题是我只有SVN转储。没有实际的SVN服务器,所以我使用了
    git SVN克隆file://.....
    。我编辑了我的问题来解释这一点。SVN回购的转储?与
    svnadmin dump
    中一样?当我遇到这个问题时,我设置了临时本地SVN存储库,在那里导入转储,然后运行
    git SVN clone
    @Vi。SVN repo的转储-如
    cp-r/path/to/repo/root/some/other/place
    :)所以尝试使用常用的Subversion工具签出(或打印您想要克隆的目录的信息
    SVN info
    ),然后,找到正确的路径语法后,将其插入到
    git svn clone
    中。
    git svn clone svn://path/to/your/trunk/src/folder1