.gitignore加载其他.gitignore。

9

这是可能的吗?使用git update-index --assume-unchanged不是一个解决方法,被忽略的文件必须被跟踪。创建子模块也是一样。

例如:

cat .customgitignore(1|2|3...)

i-do-not-need-this.extension

cat .gitignore

basic-stuff.extension
<load> .customgitignore1
<load> .customgitignore2
<load> .customgitignore3
 etc

对于感兴趣的人,以下是问题描述。

我正在创建配置的私有存储库。一个分支等于一个配置。额外的分支作为工作区。根据需求,我将其他分支的配置与工作区合并。每个分支-配置都有自己的 .gitignore 文件,应该仅在合并后应用。我试图避免在 gitignore 文件中出现冲突。

2个回答

7
我正在尝试在gitignore文件中省略冲突。
然后不要对最终的.gitignore文件进行版本控制:根据需要生成它。
将您的.gitignore文件分开,但添加一个内容过滤器驱动程序(一个smudge脚本),它将:
  • 检测每个.gitignore.xxx文件的内容
  • 将它们的内容连接到实际的.gitignore文件中(该文件未添加到git中,并保持为私有文件)

enter image description here


4
由于 Git 默认不支持这个功能,您可以通过使用 Git 钩子(hooks)自己实现,例如:
在任何情况下,您都需要在自定义文件中管理您的忽略和包含规则,而不是直接修改 .gitignore 文件,因为该文件会在生成时被覆盖。假设您在一个分支中有一个名为 .gitignoreincludes 的文件,以及其他分支中的自定义包含文件。
因此,您可以像这样安装“post-merge”钩子:
#!/bin/bash
gitignoreWithIncludes=".gitignoreincludes"    
if [[ -f $gitignoreWithIncludes ]]; then
  echo ".gitignore" > .gitignore
  while read -r line
  do
      if [[ $line == include* ]]; then
        includeName=${line:8}
        while read -r includeLine
        do
          echo $includeLine >> .gitignore
        done < $includeName
      else
        echo $line >> .gitignore
      fi
  done < $gitignoreWithIncludes 
fi

这个钩子将在任何成功的合并时启动,会查找一个.gitignoreincludes文件,如果存在,则会生成一个.gitignore文件。 .gitignore将包含来自.gitignoreincludes和所有引用为include FILE_NAME的文件的所有条目。让.gitignore忽略自身,可以在执行合并时安全地多次重新生成它。
可以通过在包含的文件中允许include指令或实现post-checkout钩子等方式进一步改进此功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接