2011-01-21 54 views
7

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

e.g当我执行的命令,如

git add console/* 

混帐与响应

$ 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扩展响应添加目录? 是否有一些其他选项需要传递?

+0

看起来你已经忽略了`console /`中的所有文件。如果不是这样,你的`.gitignore`文件中有什么,你不想排除什么? – 2011-01-22 12:15:28

回答

10
git add console/* 

的问题是,通配符由外壳globing扩大,而不是直接传递到Git的,所以混帐补充的是真正被传递的每个文件中的控制台目录[1]。因为git-add正在接收目录中的每个文件作为参数,所以它认为你可能真的试图添加一个被忽略的文件,这就是为什么有一个警告,并暗示要使用-f,如果这是你真正想要做的。

解决的办法是不使用shell globing,而只是像这样传递目录。

git add console 

同样的正确方法一切添加到回购(包括开头的文件“”)除了忽略的文件[2]对回购是使用git add .和不git add *

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

7

.gitignore可以采取壳式的全局模式。因此,举例来说,如果你想忽略所有.jpg文件,你可以添加

# Ignore all JPEGs 
*.jpg 

.gitignore。如果你只想在你的新目录中忽略JPEG,你可以做

new_directory/*.jpg 

然后,只需添加目录照常。

+0

我已经用命令和git的输出示例更好地解释了这个问题 – vfclists 2011-01-22 12:05:14

相关问题