SVN到Git的迁移:将一组选定的提交移至新的存储库

时间:2019-03-19 08:04:27

标签: git svn git-svn git-filter-branch git-filter

我正在尝试将非常老的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
  • others / others1已移至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

1 个答案:

答案 0 :(得分:0)

我认为您应该从阶段C -const image = document.querySelector('.my-image'); fetch('flowers.jpg').then(function(response) { return response.blob(); }).then(function(blob) { const objectURL = URL.createObjectURL(blob); image.src = objectURL; }); VS var image = document.querySelector('.my-image'); fetch('flowers.jpg').then(function(response) { return response.blob(); }).then(function(blob) { var objectURL = URL.createObjectURL(blob); image.src = objectURL; }); dev1创建2个存储库副本。然后从存储库dev2中删除目录 dev2 ,并从存储库dev1中删除目录 dev1 。然后在两个存储库中将所有子目录上移一个级别,并删除目录 dev1 dev2

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 dev1