Git子模块:你可以进行本地的,未提交的编辑吗?

时间:2011-07-22 12:49:37

标签: git git-submodules

我的项目中有一个git子模块,它包含一组配置文件,然后需要在每个项目的基础上进行一些调整。

是否可以使用子模块执行此操作,或者我在这里做错了吗?显然,我不想将更改提交给子模块的存储库,因为它们是特定于项目的。

非常感谢任何提示或指示。

编辑:请注意,这些本地编辑是项目的本地编辑,项目在部署到服务器时需要保留这些更改(使用git和fabric)。

2 个答案:

答案 0 :(得分:1)

可以进行局部更改,但实际上并不可行。

Git会注意到子模块已经发生变化,并会向您显示。您无法在超级模块中提交更改子模块,因为这些更改不会在某处推送。因此,当有人试图检查该子模块时,git会抱怨,因为它无法找到为该子模块记录的提交。

如果它是每个项目而不是每个机器的差异,您可以在子模块存储库中创建一个分支,在该存储库中进行项目特定的更改。然后可以将这些更改提交到子模块并进行推送。

如果您希望这些更改成为子模块存储库的一部分,您必须自己决定,但这是您使用git执行此操作的唯一方法。

答案 1 :(得分:0)

我使用的一种方法是在子模块目录中使用指向项目源文件的符号链接。例如,在Drupal网站上:

/project
    /drupal
    /sites

如果您不熟悉Drupal,sites目录将包含任何其他模块,主题或多站点信息,并且通常位于Drupal根目录内(在本例中为/project/drupal) 。在您的项目中,drupal将替换为您的主代码库,sites将包含您的项目特定设置。

在这种情况下,drupalproject的子模块,指向官方存储库。我添加了从/project/drupal/sites/project/sites的符号链接,因此在项目级别检查了sites的修改,但Drupal仍然可以假装它是一个子目录。

希望类似的设置可以适用于您的项目。值得注意的一点是,符号链接也会在sites中显示drupal中的更改,因此您可能希望将符号链接添加到.gitignore文件中。另一个缺点是你必须为你设置项目的每台机器重新配置符号链接,但这很容易成为部署脚本的一部分。