拆分git存储库以同时处理两个项目

Sun*_*tva 7 git git-submodules git-subtree

我正在开发一个用于我的项目的框架 ; 然而,框架的开发到目前为止没有上下文:即我需要开始在现实项目中使用它,并具体看到我需要添加,修复或调整的东西(可能是在测试环境中工作的东西)适用于现实生活中的情况,或者某些事情没有意义,或者我想添加功能).

首先,由于Framework显然是一项正在进行中的工作,我需要确保它在Real-life项目中作为其中的不同部分保持更新,因此我可以回到Framework,编辑它,提交,返回到现实生活中的项目更新框架,继续与项目合作.

其次,我真的想要一种在不进行项目切换的情况下实现这一目标的方法.我的意思是我希望能够在Real-life项目中编辑Framework并将这些提交推送到Framework存储库.

现在,我知道这些工具来实现这一最有可能git submodulegit subtree,但他们两人都相当混乱.特别是子模块似乎更倾向于采用只读方法(例如,保持库始终更新):这将满足我的第一个要求,但不满足第二个要求.

有关如何使用Git实现此目的的任何指示以及工作流程的外观如何?

Lop*_*Sae 4

这两种方法中的任何一种都可以为您服务。

每一个都可以满足您的需要,就地编辑项目并将特定内容推送到单独的存储库。

为了保持两个项目的运行,这两种方法都会产生一定的开销。

关于你提到的两点:

  • 使用子模块,您将在其他存储库的文件夹中拥有一个存储库。外部(现实生活)将子模块(框架)存储库的位置以及当前使用的提交保存在文件中。当您想要编辑 Framework 时,只需转到存储它的子文件夹,在其中它的行为应该就像您在一个完全独立的 git 存储库中一样,具有自己的远程和历史记录。修改框架后,您返回现实生活并更新子模块引用。该过程通常如下所示:

    Edit files in Framework
    Move to Framework subfolder
    Stage, commit, and push changes to Framework repository
    Go back to Real-Life folder
    Update Real-Life submodule reference
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用子树,您可以在同一存储库中使用现实生活和框架,但仍将框架代码保留在特定的子文件夹下。当您更改框架中的内容时,您仍然可以提交这些现实存储库,就像是单个项目一样。子树工具允许您隔离 Framework 文件夹中的更改,并从中创建一组与现实生活分开存在的提交,这些提交将包含仅框架的更改,并且可以推送到 Framework存储库。该过程如下所示:

    Edit files in Framework
    Stage, commit, and push to Real-Life repository
    Create Framework commits using subtree tools
    Push Framework specific commits to Framework repository
    
    Run Code Online (Sandbox Code Playgroud)

如果您仍然不确定这两者之间存在的交易,我建议您使用 submodules。您会发现更多文档、用例,而且通常不太复杂。它有一些缺点,但通过首先熟悉子模块,您可以衡量子树提供的功能。有关子模块的更多信息