我正在尝试将一个非常古老的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/
的内容
对于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
中提到的目录结构,维护dev1
和dev2
中存在的所有文件的所有提交历史记录。
重要提示:dev1
和dev2
中存在的大多数文件甚至在创建dev1
和dev2
之前创建 - 这些文件后来被移动到dev1
/ dev2
。
在我看来,你应该从C阶段创建2个存储库副本 - dev1
和dev2
。然后从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重复相同的操作。