首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将git存储库中的文件夹拆分为不同的分支。

将git存储库中的文件夹拆分为不同的分支。
EN

Stack Overflow用户
提问于 2012-02-12 19:14:37
回答 1查看 1.4K关注 0票数 6

我终于将我们的CVS存储库迁移到了git。不幸的是,我们在CVS中没有使用分支,但是不同的版本/分支被分到不同的子目录中。

也就是说,我们有以下目录结构:

代码语言:javascript
复制
/root
    /lib
    /tools
    /src
        /v1.0
        /v2.0
        /v3.5

有没有办法将src子目录中的3个版本分别放在不同的分支中,而不是保留每个版本的目录?

我在Stack Overflow Question 4877053上发现了同样的问题,这里建议使用git-subtree,但即使在阅读了git-subtree的手册后,我也不知道如何使用它来解决我的问题。

有没有人能给我一个更详细的解释,甚至是另一个解决方案?

我对git非常陌生,也许这就是我不理解子树手册的原因;-)

非常感谢你所有的问候!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-03 00:25:34

这取决于您希望在存储库中保留什么内容。

如果你想要三个分支,v1.0v2.0v3.5,都有这样的结构:

代码语言:javascript
复制
/root
    /lib
    /tools
    /src

是的,我很确定你能做到。在分支结构方面,您最终会得到类似如下的结果:

代码语言:javascript
复制
-- A -- B -- Current 
              | 
              |--- v1.0
              |--- v2.0
              |--- v3.5

ABCurrent是你迁移到git后提交的,而v1.0v2.0v3.5本质上是“死胡同”的分支。如果你想得到一个更像这样的分支结构,你可以做一些奇特的事情:

代码语言:javascript
复制
-- v1.0 --- v2.0 --- v3.5 -- A -- B -- Current

也就是说,将v1.0v2.0v3.5分离到各自的分支中,然后将v1.0重新设置为v2.0,将v2.0重新设置为v3.5,将v3.5重新设置为当前版本中的第一个提交。

但我不确定你到底想做什么。

有没有办法将src子目录中的3个版本分别放在不同的分支中,而不是保留每个版本的目录?

是的,我很确定你能做到。我的方法有点...令人费解,我承认,但这是开始了。,请小心,阅读手册页-以下命令可能不会把一切都搞砸,但使用风险自负。

  1. git checkout -b v1.0 -进入一个新的分支。
  2. 删除除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.0v3.5重复一遍。

恐怕我看不出这能做什么除了给你..。然而,“奇怪”的历史。从本质上讲,v2.0可能有v1.0 +的改进;我上面列出的结构(三个“死胡同”分支)表明v2.0v3.5不是基于以前的版本构建的。我不能完全确定你有什么样的历史,如果这是一个问题,等等。

因为你在它们自己的小分支中有v1.0v2.0v3.5,如果你想要一个更好看的历史,你可以对它们进行git merge或者git rebase等。

希望这能给你一点思考;就像我说的,请阅读手册页。:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9248356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档