Git忽略子文件夹

Mar*_*cel 400 git directory ignore gitignore

我的.Net解决方案中有很多项目.我想排除所有"bin/Debug"和"bin/Release"文件夹(及其内容),但仍然包含"bin"文件夹本身以及其中包含的任何dll.

带有"bin /"的.gitignore忽略"Debug"和"Release"文件夹,但也包含"bin"文件夹中包含的任何dll.

.gitignore文件中的"bin/Debug"或"bin/Release"不会排除目录,除非我完全将忽略模式限定为"Solution/Project/bin/Debug" - 我不想这样做需要在我的解决方案中为每个项目包含这个完整模式,并为添加的任何新项目添加它.

有什么建议?

Jos*_*Lee 508

你试过通配符吗?

Solution/*/bin/Debug
Solution/*/bin/Release
Run Code Online (Sandbox Code Playgroud)

使用git 1.8.2版,您还可以使用**通配符匹配任何级别的子目录:

**/bin/Debug/
**/bin/Release/
Run Code Online (Sandbox Code Playgroud)

  • @Taras:不幸的是,它没有. (11认同)
  • 它工作,除非在例如Solution/Module/Project中有另一个项目的子文件夹,所以现在我添加了/*/*/bin/Debug和/*/*/*/bin/Debug(对于sub)文件夹).看起来您必须为目录结构中的每个级别添加通配符子文件夹. (8认同)
  • @Marcel:嗯,git 肯定不会忽略您没有告诉它的任何文件 - 它会忽略与通配符匹配的任何内容,不多也不少。 (2认同)
  • Visual Studio中有一个与`**`相关的错误.现在应该修复.[链接](http://connect.microsoft.com/VisualStudio/feedbackdetail/view/976537/consecutive-asterisks-in-gitignore-handled-incorrectly-by-microsoft-git-provider) (2认同)

And*_*eas 100

您可以在顶层使用.gitignore忽略项目中具有相同名称的所有目录.例如:

Debug/
Release/
Run Code Online (Sandbox Code Playgroud)

这应该立即更新,以便在您执行git状态时可见.确保这些目录尚未添加到git中,因为这将覆盖忽略.

  • +1对于确保尚未添加到git的目录的评论.如果已经添加到git,请执行:`git rm -rf DirectoryName /` (14认同)
  • 不同之处在于 .gitignore 文件将遵循代码,因此它适用于任何地方。而排除文件仅适用于您的存储库,这意味着它仅适用于该特定存储库。除非其他提交者有理由想要提交这些目录,否则我建议使用 .gitignore。 (2认同)
  • 对我不起作用。由构建创建的目录继续以未暂存状态弹出。快把我逼疯。git rm -rf 报告 foo/ 报告 foo 不存在。 (2认同)

mgo*_*old 50

问题不是要求忽略所有子目录,但我无法在任何地方找到答案,所以我会发布:*/*.

  • 你有机会澄清吗?我已经尝试了各种变体,但无法让 `git add` 忽略一个目录和该目录所有子目录中的所有文件。我试过`dirname/`、`dirname/*`、`dirname/**`、`dirname/*/*`,即使在绝望中也尝试过`dirname/*/*/*`、`dirname/*/*/* /*`, `目录名/*/*/*/*/*`。 (2认同)
  • `*/*`忽略所有子目录,但忽略当前目录中的文件.忽略特定的子目录是正常的gitignore用法.`dirname`,`dirname /`和`dirname/*`都适合我.该目录中的任何内容是否已提交? (2认同)

aja*_*n81 36

以上所有答案都是有效的,但我提到的一点是,一旦你将该目录中的文件添加到repo中,就不能忽略包含该文件的目录/子目录(git会忽略该指令) ).您必须首先从repo中删除目标目录中的所有文件,然后您可以忽略该文件夹.

  • git rm - 如果你想让它们没有跟踪/与历史无关,但想要在本地保持文件完好无误. (11认同)
  • 它应该是 ```git rm -r --cached 。 ``` (4认同)
  • 我认为 `git reset` 会撤消这个命令 (4认同)
  • 此答案前面应该有一个 **警告**,或者至少有一个大胆的免责声明,以了解在哪个文件夹中运行此命令。`git reset` 可以让您摆脱使用 `git rm -r --cached.` 可能造成的混乱,但是您将无法恢复 git 的状态(例如 git add 和 git rm 等...)以前有过。我自己也必须记住在复制粘贴命令之前进行思考。一两年后我总是开始沾沾自喜......:P (3认同)

Mid*_*ava 27

除了在.gitignore文件中输入正确的条目之外,如果您试图忽略已经添加到repo中的内容,则必须git rm -r /path/to/dir在将dir添加到.gitignore文件之前执行并提交.否则git将忽略的唯一事情就是你的ignore指令.


Tol*_*lga 21

忽略存储库根目录的所有子文件夹,但包含此文件夹根目录中的文件的最简单形式是将其添加到您的 .gitignore 文件中

*/
Run Code Online (Sandbox Code Playgroud)

如果您想忽略另一个子文件夹的所有子文件夹(仍包括其中的文件):

subfolder/*/
Run Code Online (Sandbox Code Playgroud)

如果您已经提交了需要忽略的项目,则需要在忽略它们之前将它们从存储库中删除。

要删除存储库根目录的所有子文件夹:

git rm -r --cached */*
Run Code Online (Sandbox Code Playgroud)

要删除另一个子文件夹的所有子文件夹:

git rm -r --cached subfolder/*/*
Run Code Online (Sandbox Code Playgroud)


Kat*_*tie 17

我在机器上工作的唯一方法是这样做:

# Ignore all directories, and all sub-directories, and it's contents:
*/*

#Now ignore all files in the current directory 
#(This fails to ignore files without a ".", for example 
#'file.txt' works, but 
#'file' doesn't):
/*.*

#Only Include these specific directories and subdirectories:
!wordpress/
!wordpress/*/
!wordpress/*/wp-content/
!wordpress/*/wp-content/themes/
Run Code Online (Sandbox Code Playgroud)

请注意您必须明确允许要包含的每个级别的内容.因此,如果我在主题下有5个子目录,我仍然需要拼写出来.

这是来自@ Yarin的评论:https://stackoverflow.com/a/5250314/1696153

这些是有用的主题:

我也试过了

*
*/*
**/**
Run Code Online (Sandbox Code Playgroud)

**/wp-content/themes/**

要么 /wp-content/themes/**/*

这些也不适用于我.很多线索和错误!


A. *_*rel 8

要排除内容和子目录:

**/bin/*
Run Code Online (Sandbox Code Playgroud)

要仅排除所有子目录但保留内容,请添加“ /”:

**/bin/*/
Run Code Online (Sandbox Code Playgroud)


fre*_*kjh 6

要忽略所有子目录,您可以简单地使用:

**/
Run Code Online (Sandbox Code Playgroud)

从git版本1.8.2开始有效。


小智 6

这么多年了,这个页面似乎仍然出现在谷歌搜索的顶部......

现代版本的 Git 支持在单个存储库中嵌套.gitignore文件。只需将.gitignore文件放在您想要忽略的子目录中即可。使用单个星号来匹配该目录中的所有内容:

echo "*" > /path/to/bin/Debug/.gitignore
echo "*" > /path/to/bin/Release/.gitignore
Run Code Online (Sandbox Code Playgroud)

如果您之前进行过提交,请记住删除之前跟踪的文件:

git rm -rf /path/to/bin/Debug
git rm -rf /path/to/bin/Release
Run Code Online (Sandbox Code Playgroud)

您可以通过向git status您显示从跟踪中删除的所有文件来确认这一点。


Nic*_*k F 5

在继续跟踪/bin目录中的文件时,忽略所有子文件夹的通用方法是将以下行添加到项目的.gitignore文件中:

bin/*/*
Run Code Online (Sandbox Code Playgroud)

如果只想忽略特定的命名子文件夹,则可以执行以下操作:

bin/Debug/*
bin/Release/*
Run Code Online (Sandbox Code Playgroud)

nb。如果该bin目录不在您项目的根目录中(与.gitignore文件一起),则代替例如。bin/*/*您可能需要path/to/bin/*/*