有没有办法将目录添加到Git但排除.gitignore中的扩展名?

时间:2011-01-21 00:59:11

标签: git

有没有办法将目录添加到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扩展名? 还有其他选择可以通过吗?

2 个答案:

答案 0 :(得分:10)

git add console/*

问题是通配符是通过shell globing扩展的,而不是直接传递给git,所以git-add实际上是传递给控制台目录[1]中的每个文件。因为git-add正在接收目录中的每个文件作为参数,所以它认为你可能真的试图添加一个被忽略的文件,这就是为什么会有一个警告,并且它提示使用-f,如果这是你真正想要做的事情

解决方案是不使用shell globing而是直接传递目录。

git add console

同样,将所有内容添加到repo(包括以'。'开头的文件)除了忽略文件[2]到repo之外的正确方法是使用git add .而不是git add *

[1]除了以“。”开头的。假设您处于类似shell的状态,而不是从Windows cmd.exe命令提示符处尝试此操作。如果您使用的是Windows命令提示符,则应切换到使用msysgit中的Git-Bash shell或来自cygwin的shell,具体取决于您安装git的方式。
[2] .gitignore仅用于防止未跟踪的文件被跟踪,如果该文件已被git跟踪,则它将继续被正常处理,直到从repo中删除。这可以在不影响git rm --cached filename的实际文件的情况下完成。

答案 1 :(得分:7)

.gitignore可以采用shell样式的glob模式。因此,例如,如果要忽略所有.jpg个文件,可以添加

# Ignore all JPEGs
*.jpg

.gitignore。如果您只想忽略新目录中的JPEG,可以执行

new_directory/*.jpg

然后只需正常添加目录。