代码之家  ›  专栏  ›  技术社区  ›  Kerido

重用git存储库的一部分

  •  10
  • Kerido  · 技术社区  · 16 年前

    我有以下项目设置:

    • Solution A
      • Project 1 (轻量化组件)
      • Project 2 (包含大量文件,取决于 )

    解决方案A 是单身吗 吉特 存储库。然后我创建了另一个解决方案,发现我可以重用甚至更新 项目1

    • Solution B
      • 项目1
      • Project 3 (取决于 项目1 ).

    项目1 成为共享组件。也就是说,每次我修改 项目1 从任一解决方案( A B ),我需要另一个相应地更新。

    也许这和 子模块 的特征 . 但是,我能够使用它的唯一方法是指定整个 解决方案A 解决方案B . 这并不是我理想中想要的,因为这是一个巨大的空间 . 我只需要它的一小部分作为子模块。

    我知道这是有可能的 svn公司 和我描述的完全一样:在 svn:externals 财产。

    2 回复  |  直到 16 年前
        1
  •  7
  •   Community Mohan Dere    9 年前

    这肯定与子模块有关(参见 nature of submodules )

    在你的情况下,理想的解决方案是提取 Project1 SolutionA Git回购:
    看见 How to extract a git subdirectory and make a submodule out of it? .

    但这涉及到改写历史,如果你已经出版了它,如果有人从中退出,这将是一个问题。

    使用 filter-branch 用于提取过程。

    重写存储库使其看起来 Project1/ 是它的项目根目录,并放弃所有其他历史记录:

    git filter-branch --subdirectory-filter Project1 -- --all
    

    例如,您可以将库子目录转换为自己的存储库。注意 -- filter-branch 修订选项中的选项,以及 --all 重写所有分支和标记。

    然后宣布 SolutionB

    cd SolutionB
    git submodule add /path/to/Project1 Project1
    

    注意:如果您计划发布您的应用程序,请不要在此处使用本地URL !

    git commit -m "Add submodules Project1"
    
        2
  •  0
  •   ezod    16 年前

    将项目1拆分到它自己的存储库中,并使其成为解决方案a和解决方案B的子模块。