gitignore加载其他gitignores

时间:2013-09-11 20:01:10

标签: git gitignore

有可能吗? git update-index --assume-unchanged不是解决方案,必须跟踪被忽略的文件。创建子模块。

E.g。

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

i-do-not-need-this.extension

cat .gitignore

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

感兴趣的人的问题描述。

我正在创建私人的配置回购。一个分支=一个配置。附加分支作为工作区。我根据需要将其他分支配置与工作空间合并。 Branches-configs每个都有自己的.gitignore,只有在合并后才能应用。我想在gitignore文件中省略冲突。

2 个答案:

答案 0 :(得分:7)

  

我想在gitignore文件中省略冲突

然后不要对最终的.gitignore文件进行版本化:按需生成它。

保持您的.gitignore文件分开,但添加content filter driversmudge脚本),其中包括:

    每个.gitignore.xxx文件的
  • detect the content
  • 将他们的内容连接到实际的.gitignore(未添加到git,并保留为私有文件)

enter image description here

答案 1 :(得分:4)

由于Git不支持开箱即用,你可以自己使用Git钩子实现一个,例如:

在任何情况下,您都需要管理您的忽略并包含在自定义文件中,而不是.gitignore本身,因为这将生成。因此,假设您在分支中有一个.gitignoreincludes文件,在其他分支中有自定义包含文件。

因此,您可以安装这样的“合并后”挂钩,例如:

#!/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挂钩,以便在分支等之间切换时重新生成.gitignore等。