尽管 .gitignore 文件强制添加
Posted
技术标签:
【中文标题】尽管 .gitignore 文件强制添加【英文标题】:Force add despite the .gitignore file 【发布时间】:2011-12-21 19:50:12 【问题描述】:尽管有.gitignore
文件,有没有办法强制git
添加文件?
【问题讨论】:
一个更好的问题可能是 - 你为什么要这样做?如果要跟踪文件,请取消忽略它(在.gitignore
文件中使用 !
为其模式添加前缀,例如 !dont/ignore/this/file
)。
@OhadSchneider 如果您强制将构建文件提交到另一个分支,这很有用。一些项目这样做,例如用于安全部署的 StrongLoop
@OhadSchneider 对我们来说,更多的是因为大多数开发人员使用 Visual Studio 2015 安装 git,它在用户文件夹中添加了一个全局 gitignore。这不包括 *.dll 和 *.exe 等文件。这对于我们只使用在构建期间检索到的 nuget 包的新项目来说非常有用,但对于少数旧项目,我们仍然使用在解决方案中手动引用的 dll。对于这些项目,我们希望手动包含它们,而不是告诉每个开发人员在全局 gitignore 中注释 *.dll 和 *.exe 文件。
@Nullius 你不能在更高级别的.gitignore
中取消忽略它们(例如,在与dll 相同的文件夹中添加.gitignore
,或者在上面的文件夹中,或其他什么)?跨度>
【参考方案1】:
如何取消忽略已忽略文件夹中的某些选定内容(文件或文件夹)
如果您忽略了 目录的内容,如下所示:
/ignored_dir/* # ignore the **contents of** this dir!
然后你可以像这样 UNignore 里面的文件或目录:
!/ignored_dir/special_file_to_include # Do NOT ignore this file--DO include it!
!/ignored_dir/special_dir_to_include/ # And do NOT ignore this dir--DO include it!
但是,如果您像这样直接忽略了“ignored_dir”:
/ignored_dir/ # ignore this directory **directly**
那么上述!
试图取消忽略某些文件或文件夹的规则将不起作用!因此,在这种情况下,从使用这种风格:/ignored_dir/
切换到这种风格:/ignored_dir/*
,然后将您的 !
规则如上所示添加到 UNignore 该目录中的某些内容!
参考资料:
-
Unignore subdirectories of ignored directories in Git
[我的eRCaGuy_dotfiles repo 带有包含这些注释和演示的示例 .gitignore 文件]:eRCaGuy_dotfiles/.gitignore
【讨论】:
作为对上述 A-S 答案的编辑(尽管相当广泛),这可能会更好,因为它是相同的答案并且一个有 24 票所以总是会显得更高。 (不过你的版本更有帮助。) @DarrenCook,我不想对别人的答案进行广泛的编辑。 Stack Overflow 的主要吸引力之一是答案和内容的个人所有权,而大型编辑会扰乱这一点。我认为我的回答也更有帮助,我希望自己保持对它的所有权,以使其成为我喜欢的方式,并在此过程中获得一些荣誉。最终,如果像你这样的人支持它,它就会浮到顶部。我已经看过几十次了。我添加它是因为它提供了新的、缺乏的内容和洞察力,而这些内容和见解尚未出现在此页面上。【参考方案2】:尽管 Daniel Böhmer 提供了可行的解决方案,Ohad Schneider 在评论中提供了更好的解决方案:
如果该文件通常被忽略,而您强制添加它 - 将来可能会再次被意外忽略(例如当文件被删除时,然后提交并重新创建文件。
您应该在 .gitignore 文件中取消忽略它,如下所示: Unignore subdirectories of ignored directories in Git
【讨论】:
这是正确的。我对小数据文件使用了 --force 选项,然后重新排列了一些文件夹结构并破坏了所有强制跟踪的文件。但是:在.gitignore
中使用 !specific-file-name.txt
而不使用文件夹层次结构,这样跟踪将跟随 repo 周围的文件。
视情况而定,例如有时您想在所有文件夹中排除“1.txt”,有时要排除“folder1/*.txt”
这不是一个“更好”的解决方案。这是解决不同问题的方法。
@aij - 我不同意,我的回答提供了另一种“尽管 .gitignore 文件的(当前状态)强制 git 添加文件的方法”。尽管括号中的额外文字是我添加的-我认为问题的文字也暗示了这一点。无论如何,我认为这对于考虑使用“--force”选项的人来说也是重要的信息【参考方案3】:
实现它的另一种方法是临时编辑 gitignore 文件,添加文件,然后恢复 gitignore。我觉得有点hacky
【讨论】:
我同意,这不是你想做的。【参考方案4】:见man git-add
:
-f, --force
Allow adding otherwise ignored files.
所以运行这个
git add --force my/ignore/file.foo
【讨论】:
嗯,这不起作用,在 git status 上文件仍然没有显示 好吧,我对其进行了测试以确保它确实有效并且确实有效。你能描述你的环境(操作系统,git版本......)吗?这就是我基本上所做的:echo "/foo" >> .gitignore; echo "bar" > foo; git add foo # should throw an error; git add -p foo # works
(不能在评论中粘贴换行符,执行命令 1 by 1
同样的事情发生在我身上,我之前在我的文件上运行过 git update-index --asume-unchanged 。我不得不用 --no-assume-unchanged 撤消它并且它起作用了
这仅适用于我使用通配符,在 Windows 上使用 git 1.9.5,即使在尝试 --no--assume-unchanged 之后也是如此。 “git add -f 以上是关于尽管 .gitignore 文件强制添加的主要内容,如果未能解决你的问题,请参考以下文章