尽管.gitignore文件仍然强制添加


413

有没有办法强制git添加文件而不管.gitignore文件?


4
一个更好的问题可能是-您为什么要这样做?如果您要跟踪文件,请忽略它(.gitignore使用!,在文件中添加其模式前缀!dont/ignore/this/file)。
Ohad Schneider

6
@OhadSchneider如果您强制将构建文件提交到另一个分支,则这很有用。一些项目可以做到这一点,例如用于安全部署的
StrongLoop

5
@OhadSchneider对我们来说,这是因为大多数开发人员都在Visual Studio 2015中安装了git,这会将全局gitignore添加到用户文件夹中。这不包括* .dll和* .exe之类的文件。这对于仅使用在构建过程中检索到的nuget程序包的新项目非常有用,但是对于少数较旧的项目,我们仍然使用在解决方案中手动引用的dll。对于这些项目,我们希望手动包含它们,而不是告诉每个开发人员在全局gitignore中注释* .dll和* .exe文件。
Nullius '16

4
@Nullius您能否不能在更高层次上忽略它们.gitignore(例如,.gitignore在dll所在的文件夹中添加一个,或在dll上方添加一个,或其他内容)?
Ohad Schneider

Answers:


569

man git-add

   -f, --force
       Allow adding otherwise ignored files.

所以运行这个

git add --force my/ignore/file.foo

11
嗯,这不起作用,在git状态下,该文件仍未显示
标记

5
好吧,我对其进行了测试,以确保它确实可以工作。您能描述一下您的环境(操作系统,git版本...)吗?这是我基本上完成的工作:(echo "/foo" >> .gitignore; echo "bar" > foo; git add foo # should throw an error; git add -p foo # works无法在评论中粘贴换行符,按1
顺序

4
我也遇到了同样的情况,我以前在文件上运行过git update-index --asume-unchanged。我不得不使用--no-assume-unchanged来撤消它,并且它起作用了
Jako 2015年

4
这仅适用于使用通配符,在Windows上使用git 1.9.5的我,即使尝试--no-假设未更改也是如此。“ git add -f <文件名>”什么都不做,但是“ git add -f *”有效。使用TortoiseGit也可以。
mhenry1384

@ mhenry1384它仅在Windows中适用于通配符的原因可能是由于使用了路径分隔符。对我来说,斜杠“ /”有效,反斜杠“ \”无效。cmd / PowerShell为我们将“ /”转换为“ \”的事实使我们很容易遇到这种情况。
OHW

19

尽管DanielBöhmer提供了可行的解决方案,但Ohad Schneider在评论中提供了更好的解决方案:

如果通常忽略该文件,而您强行添加它-​​将来可能会意外地再次忽略该文件(例如删除该文件时,将进行提交并重新创建该文件。

您应该像这样在.gitignore文件中取消忽略它:取消忽略 Git中被忽略目录的子目录


4
这是对的。我对小的数据文件使用--force选项,然后重新排列了一些文件夹结构并破坏了所有强制跟踪的文件。但是:在.gitignore使用!specific-file-name.txt无文件夹层次结构,这样一来跟踪将跟随周边回购该文件。
Merlin

这取决于情况,例如,有时您想在所有文件夹中排除“ 1.txt”,而有时又希望“ folder1 / *。txt”
AS

14
那不是一个“更好”的解决方案。这是另一个问题的解决方案。
aij

2

实现此目的的另一种方法是临时编辑gitignore文件,添加文件,然后还原回gitignore。我觉得有点


10
我同意,这不是您想要做的。
默林
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.