这取决于你想要在仓库中剩下的东西。
如果你想三个分支,v1.0
,v2.0
,v3.5
,所有的结构是这样的:
/root
/lib
/tools
/src
然后是的,我敢肯定,你可以做到这一点。
-- A -- B -- Current
|
|--- v1.0
|--- v2.0
|--- v3.5
A
,B
,Current
幸福,因为你迁移到Git修订已经提交,并在v1.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
到v3.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
等等等等,如果你更喜欢更美观的历史。
希望这给你一点点思考;就像我说的,请阅读手册页。 :)
您是否有与不同版本目录相关的提交历史记录?当您将CVS回购迁移到git时,您现在有没有想保留的历史记录?我敢肯定,你可以使用'git filter-branch'和'git merge'组合来拆分这些目录,但是如果不知道你想保留什么或者你想要最终的存储库看什么喜欢。 – simont 2012-03-02 15:52:08