有没有一种方法可以将一个目录添加到Git中,但在.gitignore中排除某些扩展名?

7
有没有一种方法可以将一个目录添加到Git中,但是在.gitgnore文件中排除某些扩展名?
例如,当我执行添加目录的命令时:
git add console/*

git 响应响应

$ git add console/*
The following paths are ignored by one of your .gitignore files:
console/networkprobing.ppu
console/opsdatamodule.lrs
console/opsdatamodule.o
console/opsdatamodule.ppu
console/rcacsSystemDM.compiled
console/rcacsSystemDM.o
console/rcacsSystemTestProcs.o
console/rcacsSystemTestProcs.ppu
Use -f if you really want to add them.
fatal: no files added

如何让命令自动排除 .gitignore 扩展名?是否需要传递额外的选项?


看起来你已经在忽略 console/ 目录下的所有文件了。如果不是,请问你的 .gitignore 文件中都有哪些内容,又有哪些文件是你不想排除在外的呢? - CB Bailey
2个回答

10
git add console/*
问题在于通配符是由shell globbing扩展的,而不是直接传递给git,因此git-add实际上会接收到控制台目录中的每个文件[1]。因为git-add将目录中的每个文件作为参数接收,它认为您可能真的正在尝试添加一个被忽略的文件,这就是为什么会出现警告,并提示使用-f(强制)选项。

解决方法是不要使用shell globbing,而是像这样直接传递目录。

git add console
同样,将所有内容(包括以“.”开头的文件)添加到一个存储库中,但排除已被忽略的文件[2]的正确方法是使用 git add . 而不是 git add *

[1] 假设您正在类似于shell的sh中,而不是在Windows cmd.exe命令提示符中尝试此操作。如果您正在使用Windows命令提示符,则应切换到使用msysgit的Git-Bash shell或cygwin的shell,具体取决于您如何安装git。
[2] .gitignore仅用于防止未跟踪的文件成为跟踪文件。如果文件已由git追踪,则它将继续被正常处理,直到从存储库中删除它。可以使用 git rm --cached filename来完成此操作,而不会影响实际文件。


7

.gitignore 可以采用类似 shell 的 glob 模式。因此,例如,如果您想忽略所有的 .jpg 文件,您可以添加以下内容:

# Ignore all JPEGs
*.jpg

要忽略新目录中的JPEG文件,只需在.gitignore文件中添加以下内容:

new_directory/*.jpg

然后按照正常的方式添加目录。

我用一个命令的例子和git的输出更好地解释了问题。 - vfclists

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接