9

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

例如

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

i-do-not-need-this.extension

猫.gitignore

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

感兴趣的人的问题描述。

我正在创建配置的私人回购。一个分支 = 一个配置。作为工作区的附加分支。我根据要求将其他分支配置与工作区合并。每个分支配置都有自己的 .gitignore ,仅应在合并后应用。我试图省略 gitignore 文件中的冲突。

4

2 回答 2

7

我试图省略 gitignore 文件中的冲突

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

保持您的 .gitignore 文件分开,但添加一个内容过滤器驱动程序(一个smudge脚本),它将:

  • 检测每个 .gitignore.xxx 文件的内容
  • 将它们的内容连接到实际的 .gitignore (未添加到 git,并且仍然是私有文件)

在此处输入图像描述

于 2013-09-23T18:12:14.200 回答
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 等等。

于 2013-09-29T18:52:10.710 回答