【问题标题】:Publish a sub tree to a different GIT repository将子树发布到不同的 GIT 存储库
【发布时间】:2013-12-17 23:40:52
【问题描述】:

我知道 GIT 中有子树和子模块,但我仍然不确定哪一个是我的最佳选择。

所以情况是这样的:

  • 我有一个带有“lib1”和“lib2”的项目,项目和 repo 已经存在,我不是从头开始
  • 我想将所有项目保存在同一个 GIT 存储库中以便于签入/签出,因为我主要处理该存储库
  • 项目不是开源的,但我想开源“lib2”
  • 我永远不会单独在“lib2”上工作,只在主项目中工作
  • 我不希望对 lib2 做出贡献,因此从它的 repo 中合并是一个小问题
  • 理想情况下,我希望这对从事该项目的其他开发人员是透明的(因此当他们提交/推送时,他们不需要知道下面有一个子树)

因此,我们的想法是能够使用自己的历史推送“lib2”,从而使项目的所有其余部分保持私密。我知道已经有很多关于这个话题的问题,但我无法找到明确的答案。

【问题讨论】:

    标签: git git-submodules git-subtree


    【解决方案1】:

    您可以保留存储库原样并使用以下命令导出此库:

    git filter-branch --subdirectory-filer lib2
    

    git help filer-branch 说:

       --subdirectory-filter <directory>
           Only look at the history which touches the given subdirectory.
           The result will contain that directory (and only that) as its project root.
    

    您项目的开发人员不会注意到任何变化,因为没有任何变化。 - 但是更新导出的库需要您运行另一个过滤器分支。

    【讨论】:

    • 这将适合历史,但我怎样才能将“lib2”推送到它自己的仓库?那我应该使用子树吗?
    • 它将创建一个只包含这个目录的新分支。您可以简单地将该分支推送到另一个存储库:git push otherrep branch
    • 就像一个侧节点,这种方法有效,但是一旦你改变了一些东西,自动将东西推送到远程仓库有点困难,因为在 filter-branch + push 之后你必须硬重置才能避免出现问题你的主要仓库
    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 2011-08-26
    • 1970-01-01
    • 2013-01-29
    • 2013-01-20
    • 2011-02-28
    • 2013-04-13
    • 2014-05-30
    相关资源
    最近更新 更多