Git属性影响子模块

时间:2014-05-15 00:38:38

标签: git git-submodules

我的.gitattributes文件是否可能影响子模块?

我对指定过滤器和涂抹/清洁很感兴趣,因此它会在子模块中检出时应用。

1 个答案:

答案 0 :(得分:2)

否:如果要在子模块结帐时定义应用的内容过滤器驱动程序(涂抹/清理脚本),则需要在子模块存储库中存储的.gitattributes中定义。

但是:如果您不想在子模块仓库中添加.gitattributes(例如,因为您不拥有该仓库,那么您只需要包含它并想要申请在您的上下文中有意义的过滤器),您可以做的是:

  • 初始化子模块(git submodule init甚至git submodule update --init):
    这将在您的父代仓库中创建.git/modules/yourSubmodule文件夹

  • .git/modules/yourSubmodule/info/attributes中复制您要为某些文件声明的属性(此处为前例,所有ruby文件)

    *.rb filter=yourFilter
    

这将扮演.gitattributes的角色(仅对子模块有效,但已定义并存储在parent_repo/.git/modules/中)
这样,您可以定义子模块的属性,而无需在子模块repo本身中添加.gitattributes

它并非完全是&{39; .gitattributes'您的父级仓库:在您的父仓库的.git/modules文件夹中初始化子模块后添加的内容。 您可以存储" gitattributes"的内容。作为父仓库中的常规文件,但您必须编写一个能够初始化子模块的脚本并将该文件复制为.git/modules/yourSubmodule/info/attributes文件。
我在我的项目中已经这样做了:请参阅此installation script作为示例。

  • 修改.git/modules/yourSubmodule/config以声明引用该脚本的涂抹或清洁过滤器。

    [filter "yourFiler"]
        smudge= yourScript1 %f
        clean = yourScript2 %f
    

然后,如果您已经更新了子模块(git submodule update),则运行

cd parentRepo/yourSubmodule
git checkout HEAD -- .

这将触发该子模块的过滤器脚本