协慌网

登录 贡献 社区

忽略 git 项目中的任何 “bin” 目录

我有这样的目录结构:

.git/
.gitignore
main/
  ...
tools/
  ...
...

在主要工具和工具以及任何其他目录中,可以有一个 “bin” 目录,我想忽略它(我也想忽略它下面的所有内容)。我在. gitignore 中尝试了这些模式中的每一种,但它们都不起作用:

/**/bin/**/*
/./**/bin/**/*
./**/bin/**/*
**/bin/**/*
*/bin/**/*
bin/**/*
/**/bin/* #and the others with just * at the end too

谁能帮我吗?如果我这样做,第一个模式(我认为应该工作的模式)工作得很好:

/main/**/bin/**/*

但我不希望每个顶级目录都有一个条目,我不想每次添加新目录时都要修改. gitignore。

这是在 Windows 上使用最新的 msysgit。

编辑: 还有一件事,有文件和目录在他们的名字中有子字符串'bin',我不希望那些被忽略:)

答案

在版本 1.8.2 之前, **.gitignore没有任何特殊含义。从 1.8.2 开始,git 支持**表示零个或多个子目录(参见发行说明 )。

忽略目录树中当前级别以下任何名称 bin 的所有目录的方法是使用带有模式的.gitignore文件:

bin/

man页中,有一个使用类似模式忽略名为foo的目录的示例。

编辑:如果您的 git 索引中已有任何 bin 文件夹,您不再希望跟踪,则需要明确删除它们。 Git 不会因为它们现在匹配新的.gitignore模式而停止跟踪已经被跟踪的路径。仅从索引( --cached )recursivelly( -r )执行文件夹 remove( rm )。 root bin 文件夹的命令行示例:

git rm -r --cached bin

你的梦想的.gitignore似乎是:

bin/

在顶层。

我认为 git 初学者值得一提:

如果您已经签入了一个文件,并且想要忽略它, 那么如果稍后添加规则Git 将不会忽略该文件 。在这些情况下,您必须首先在终端中运行以下命令来解除文件:

git rm --cached

因此,如果您希望在编辑. gitignore 之后添加忽略本地存储库中的某些目录(已存在),您希望在根目录上运行此目录

git rm --cached -r .
git add .

它将基本上 “刷新” 您的本地存储库并取消暂停忽略的文件。

看到:

http://git-scm.com/docs/git-rm ,

https://help.github.com/articles/ignoring-files/