这取决于您之后想要留在存储库中的内容。
如果你想要三个分支,v1.0
, v2.0
, v3.5
, 都具有这样的结构:
/root
/lib
/tools
/src
那么是的,我很确定你可以做到这一点。就分支结构而言,您最终会得到类似的结果:
-- A -- B -- Current
|
|--- v1.0
|--- v2.0
|--- v3.5
A
, B
,Current
是您在迁移到 git 后提交的提交,以及 wherev1.0
和v2.0
本质v3.5
上是“死胡同”分支。如果您想获得更像这样的分支结构,您可以做一些花哨的事情:
-- v1.0 --- v2.0 --- v3.5 -- A -- B -- Current
也就是说,将v1.0
, v2.0
, 和分离v3.5
到它们自己的分支中,然后重新定位v1.0
到v2.0
, v2.0
onv3.5
和v3.5
当前版本中的第一个提交上。
但我不确定你到底想做什么。
有没有办法将 src 子目录中的 3 个版本分成单独的分支,而不是为每个版本保留目录?
是的,我很确定你可以做到这一点。我的方法有点……令人费解,我承认,但这里有。请注意并阅读手册页- 以下命令可能不会搞砸一切,但使用风险自负。
git checkout -b v1.0
- 进入一个新的分支。
删除除v1.0
. 有几种方法可以做到这一点。这个问题有一些方法可以删除除 ; 我不能让他们为我工作,它可能对你更好。
`git filter-branch --index-filter "git rm -r -f --cached --ignore-unmatch src/v2.0" --prune-empty -f`
这将从分支中删除src/v2.0
所有关联的历史记录。-f
此过滤器不需要;但是git-filter-branch
做了某种备份(阅读手册页?),它可能会吐出错误。你第二次尝试它肯定会git filter-branch
。
重复此操作以删除src/v3.5
。
这会给你留下src/v1.0
. 您可能希望将源src/v1.0
从src
; 您可以运行git filter-branch --subdirectory-filter
(阅读手册页)来获取目录结构/v1.0-files
(仅包含子目录中的文件v1.0
;已将内容从 移动v1.0
到root
),然后查看页面中的示例man git-filter-branch
(特别是底部示例)以移动文件到一个子目录。这可能是矫枉过正,然后你需要将它合并到git filter-branch --subdirectory
一个包含所有其他剔除的东西的分支中;一个简单的mv v1.0/* .
可能会起作用,但是您的历史记录中将有另一个提交。我不知道你喜欢什么。
所以现在你已经进入v1.0
了它自己的分支。耶!
重复v2.0
和v3.5
。
恐怕除了给你……“奇怪”的历史之外,我什么也做不了。大概v2.0
有,本质上,v1.0
+改进;我上面列出的结构(三个“死胡同”分支)显示v2.0
并且v3.5
不建立在以前的版本上。我不完全确定你有什么样的历史,如果这是一个问题,等等。
因为你有v1.0
,v2.0
并且v3.5
在他们自己的小分支中,你可以git merge
他们或git rebase
等等,如果你想要一个更好看的历史。
希望这能让你思考一下;就像我说的,请阅读手册页。:)