7

我正在开发一个用于我的项目的框架;然而,框架的开发可以在没有上下文的情况下进行:即我需要在实际项目中开始使用它,并具体查看我需要添加、修复或调整的内容(也许在测试环境中有效的东西没有'不适用于现实情况,或者有些事情没有意义,或者我想添加功能)。

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

其次,我实际上想要一种无需进行项目切换即可实现此目的的方法。我的意思是我希望能够在现实项目中编辑框架并将这些提交推送到框架存储库。

现在,我知道实现这一目标的工具很可能是git submodulegit subtree,但它们都非常令人困惑。尤其是子模块,它似乎更倾向于只读方法(例如,始终更新您的库):这将满足我的第一个要求,但不能满足第二个要求。

关于如何使用 Git 实现这一点以及工作流程如何的任何指示?

4

1 回答 1

4

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

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

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

关于你提到的两点:

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

    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
    
  • 使用 Subtrees,您可以在同一个存储库中使用 Real-Life 和 Framework,但仍将 Framework 代码保存在特定的子文件夹下。当您在 Framework 中更改内容时,您仍会像提交单个项目一样提交这些 Real-Life 存储库。子树工具允许您隔离框架文件夹中的更改,并从中创建一组独立于现实生活的提交,这些提交将包含仅框架的更改,并且可以推送到框架存储库。该过程如下所示:

    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
    

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

于 2013-09-16T20:53:29.327 回答