首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git:如何从项目中分离库?过滤枝子树?

git:如何从项目中分离库?过滤枝子树?
EN

Stack Overflow用户
提问于 2011-06-19 16:45:21
回答 5查看 6.2K关注 0票数 24

因此,我有一个更大的(封闭源代码)项目,在这个项目的上下文中创建了一个库,这个库在其他地方也可能有用,我认为。

现在,我想在自己的项目中拆分库,它可以作为github或类似的开源。当然,库(以及它在那里的历史)不应该包含我们项目的任何痕迹。

在这里,git子树似乎是一个解决方案,但它并不完全适合。

我的目录布局如下(因为它是一个Java项目):

  • 击剑-游戏(git )
    • 钢筋混凝土
      • de
        • fencing_game
          • 传输(我的库)
          • 协议(库的一部分)
          • 围栏(与图书馆接口的主要项目的一部分)
          • 客户端(与库接口的主要项目的一部分)
          • 服务器(与库接口的主要项目的一部分)

代码语言:javascript
复制
            - client _(part of the main project)_
            - server _(part of the main project)_
            - ...  _(part of the main project)_

代码语言:javascript
复制
- _other files and directories (build system, website and such - part of the main project)_

拆分后,我希望库的目录布局如下(包括直接位于粗体目录中的任何文件):

  • my(姓名待定)
    • 钢筋混凝土
      • de
        • fencing_game
          • 传输(我的库)
          • 协议(库的一部分)

历史还应该只包含主项目历史的一部分,这部分涉及到存储库的这一部分.

我第一眼看了看git-subtree split --prefix=src/de/fencing_ame/transport,但是这个会

  1. 给我一棵植根于transport的树(它不会编译)
  2. 包括transport/clienttransport/servertransport/fencing目录。

第一点可以通过在接收端使用git subtree add --prefix=src/de/fencing_ame/transport <commit>来缓解,但我认为git子树也不能很好地防止导出这些子目录。(真正的想法是能够在这里共享完整的树)。

这里必须使用git filter-branch吗?

拆分后,我希望能够在我的主项目中导入库,无论是使用git子树还是git子模块,都可以在一个单独的子目录中,而不是在现在的位置。我想布局是这样的

  • 击剑-游戏(git )
    • 钢筋混凝土
      • de
        • fencing_game
          • 运输(空)
          • 围栏(与图书馆接口的主要项目的一部分)
          • 客户端(与库接口的主要项目的一部分)
          • 服务器(与库接口的主要项目的一部分)

代码语言:javascript
复制
            - client _(part of the main project)_
            - server _(part of the main project)_
            - ...  _(part of the main project)_

代码语言:javascript
复制
- my-library 
    - src 
        - de 
            - fencing\_game 
            - **transport** _(my library)_ 
            - **protocol** _(part of the library)_

代码语言:javascript
复制
- _other files and directories (build system, website and such - part of the main project)_

,什么是最无痛的方法?,除了git子树和git过滤器分支之外,还有其他工具来实现这个目标吗?

EN

回答 5

Stack Overflow用户

发布于 2011-09-20 19:25:52

我觉得你还得去探险呢。如果您只想拆分“协议”,可以使用"git子树拆分.“。或者"git过滤器-分支“

git filter-branch --subdirectory-filter fencing-game/src/de/fencing_game/transport/protocol -- --all

但是,如果您在传输和传输/协议中都有文件,它就会开始变得毛茸茸的。

我写了一些定制的工具来完成我正在做的一个项目。它们没有在任何地方发布,但是您可以使用宝库做类似的事情。

票数 3
EN

Stack Overflow用户

发布于 2014-03-07 19:35:50

从父项目中分割混合了文件的子树。

这似乎是一个常见的请求,但是当文件夹像这样混合在一起时,我不认为有一个简单的答案。

我建议将库与其他文件夹混合使用的一般方法如下:

  1. 为库创建一个具有新根的分支: git子树拆分-P src/de/f击剑_ -b temp-br git签出temp-br #-或-,如果您真的想保留完整的路径: git签出-b temp-br cd src/de/f击剑游戏
  2. 然后用一些东西重写历史,删除那些不是库一部分的部分。我不是这方面的专家,但我能够进行实验,并找到了这样的方法: git过滤器-分支-标记-名称-筛选猫-修剪-空-索引-筛选'git rm -rf -缓存-忽略-不匹配客户端服务器其他东西‘头#也清除从子dir cd传输git过滤器-分支-标签-名称-过滤猫-修剪-空-索引-过滤器'git rm -rf -缓存-忽略-不匹配的围栏客户端服务器的头。 注意:您可能需要删除连续命令之间的过滤器分支所做的备份。 git更新-参考文献-d参/原件/参考文献/标题/临时参考文献
  3. 最后,只需为库创建一个新的回购程序,并提取所有剩下的内容: cd git git git拉温br

我建议您的最终库路径更像/transport/protocol,而不是完整的父项目路径,因为这似乎与项目有某种联系。

票数 3
EN

Stack Overflow用户

发布于 2011-06-19 17:25:40

这里的问题是,没有好的分离,什么是和不是你的库的一部分。我强烈建议解决方案是重构的,然后您只需将库作为子模块。

如果这个库的重用将由其他开发人员在同一个repo中进行,那么只需在一个单独的分支上跟踪这些更改,而不需要额外的repos。

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

https://stackoverflow.com/questions/6403715

复制
相关文章

相似问题

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