SVN to Git Migration:将一组选定的提交移动到新的存储库

问题描述 投票:-1回答:1

我正在尝试将一个非常古老的svn存储库迁移到git并重新安排目录结构。最初,svn存储库结构是这样的。

A阶段

application/
            .svn
            dev/
                dev1/
                dev2/               
            test/
                test1/
                test2/
            others/
                others1/
                others2/

几年来,结构变成了这样的东西。

B阶段

application/
            .svn
            dev1/
                dev/
                test/
                others/
            dev2/
                dev/
                test/
                others/

的内容

  • dev / dev1被移动到dev1 / dev
  • test / test1被移动到dev1 / test
  • 其他人/其他人1被转移到dev1 / others

对于dev2目录也进行了相同的移动。

现在我已经使用git将源代码移动到git svn clone,维护所有提交历史记录。目前,目录结构是这样的。

阶段C.

application/
            .git
            dev1/
                dev/
                test/
                others/
            dev2/
                dev/
                test/
                others/

现在我想将这个存储库拆分成两个这样的新存储库

阶段D.

dev1/
    .git
    dev/
    test/
    others/


dev2/
    .git/
    dev/
    test/
    others/

我试过像这样的git filter-branch subdirectory-filter

git filter-branch --subdirectory-filter dev1 --prune-empty

它成功地创建了我想要的目录结构,将dev1的所有提交历史保持到Stage B中提到的运动。在Stage B提到的运动之前的所有提交都丢失了。

我想要实现的是创建Stage D中提到的目录结构,维护dev1dev2中存在的所有文件的所有提交历史记录。

重要提示:dev1dev2中存在的大多数文件甚至在创建dev1dev2之前创建 - 这些文件后来被移动到dev1 / dev2

git svn git-svn git-filter-branch git-filter
1个回答
0
投票

在我看来,你应该从C阶段创建2个存储库副本 - dev1dev2。然后从repo dev1中删除目录dev2,并从repo dev2中删除目录dev1。然后在两个存储库中将所有子目录移动一级并删除目录dev1和dev2。

cp -a repo_c dev1
cp -a repo_c dev2

cd dev1
git rm -rf dev2
cd dev1
git mv * ..
cd ..
git rm -rf dev1
git commit -m "Restructure repository"

dev2交换dev2和dev1重复相同的操作。

© www.soinside.com 2019 - 2024. All rights reserved.