如何告诉Git使用与“.gitignore”不同的gitignore文件?

问题描述:

我可以告诉Git Git仓库的地址是--git-dir。我可以告诉Git工作树在哪里与--work-tree。如何告诉Git gitignore文件在哪里?如何告诉Git使用与“.gitignore”不同的gitignore文件?

问:为什么我想要做这样的事情?

答:对于一些工作树,我有两个不同的Git存储库。其中一个位于.git的标准位置。这个库用于普通的版本控制。另一个版本库位于.git.sync。此库用于在计算机之间进行定期自动同步。也就是说,这是我自己使用Git实现的小型Dropbox克隆和一个定期运行的小脚本。

理想情况下,我将能够让Git使用.gitignore.sync.git.sync存储库,而不是使用的Git它使用正常的版本控制非常相同的.gitignore

Q.为什么我不使用Dropbox? A.不同步符号链接。糟糕的Dropbox!

您可以使用core.excludesfile指定新的忽略文件。默认情况下,这只会影响当前的存储库;如果您想更改默认值,则可以使用--global选项。

git config core.excludesfile ".new_gitignore" 

编辑1

AFAIK,.gitignore不能禁用。它优先于.git/info/excludescore.excludesfile。我能想到的唯一方法是使用过滤器进行一些攻击。 This answer很好地解释了过滤器的使用。

+1

谢谢!显然,除了'.gitignore'和'.git.sync/info/exclude',您还可以指定第三个gitignore文件。我还需要能***关掉***'.gitignore',因为该目录可能有一个'.gitignore',它不在我的控制范围之内。 – Douglas 2013-03-21 01:57:03

+0

@Douglas,根据您的评论进行一些修改。 AFAIK没有办法关闭.gitignore。 – 2013-03-21 06:28:27

+0

@Srinkanth,感谢您的更新!不过,我很难弄清楚,如何使用过滤机制来解决这个特殊的问题。 – Douglas 2013-03-21 14:11:46

每个存储库都有一个info/exclude文件 - .git/info/exclude.git.sync/info/exclude中应该有一个文件。填充这些排除文件,就像您将要使用.gitignore一样。

+0

谢谢!但是,我认为这不会对我有用,除非我可以告诉Git也不要使用'.gitignore'。对于我与其他人合作的项目,我并不总是可以摆脱'.gitingore'。 – Douglas 2013-03-21 01:45:18

在大多数命令中,“.gitignore”似乎被硬编码为git中的每个目录排除文件,优先于所有其他忽略文件。

然而,我创建一个小补丁GIT中克服此限制:https://gist.github.com/rev22/9954517

它添加下列配置选项:

core.ignoreperdir:指定为“的.gitignore”替代作为每个目录 排除文件。如果未设置,则使用默认的“.gitignore”。 如果此项为空,则不使用每个目录的排除文件。