我的 .Net 解决方案中有很多项目。我想排除所有“bin/Debug”和“bin/Release”文件夹(及其内容),但仍包括“bin”文件夹本身和其中包含的任何 dll。
带有“bin/”的 .gitignore
忽略“Debug”和“Release”文件夹,以及“bin”文件夹中包含的任何 dll。
.gitignore
文件中的 bin/Debug
或 bin/Release
不排除目录,除非我将忽略模式完全限定为 Solution/Project/bin/Debug
- 我不想这样做,因为我需要为每个项目包含此完整模式在我的解决方案中,以及为添加的任何新项目添加它。
有什么建议么?
你试过通配符吗?
Solution/*/bin/Debug
Solution/*/bin/Release
使用 1.8.2 版本的 git,您还可以使用 **
通配符来匹配任何级别的子目录:
**/bin/Debug/
**/bin/Release/
您可以在顶层使用 .gitignore 来忽略项目中具有相同名称的所有目录。例如:
Debug/
Release/
这应该立即更新,以便在您执行 git status 时可见。确保这些目录尚未添加到 git,因为这将覆盖忽略。
$GIT_DIR/.git/info/exclude
文件来完成。
git rm -rf DirectoryName/
以上所有答案都是有效的,但我认为没有提到的是,一旦您将该目录中的文件添加到存储库中,您就不能忽略包含该文件的目录/子目录(git 将忽略该指令)。
要忽略已添加的文件,请运行
$ git rm -r --cached .
否则,您必须先从 repo 的目标目录中删除所有文件 - 然后您可以忽略该文件夹。
git rm -r --cached .
问题不是要忽略所有子目录,但我在任何地方都找不到答案,所以我将其发布:*/*
。
git add
忽略一个目录以及该目录的所有子目录中的所有文件。我试过dirname/
、dirname/*
、dirname/**
、dirname/*/*
,甚至在绝望中dirname/*/*/*
、dirname/*/*/*/*
、dirname/*/*/*/*/*
。
*/*
忽略所有子目录,但不忽略当前目录中的文件。忽略特定子目录是正常的 gitignore 用法。 dirname
、dirname/
和 dirname/*
都对我有用。该目录中是否已提交任何内容?
.git
目录,然后是 git init
,然后是 git add --all .
(也尝试过不使用 --all
),使用 1.9.4.msysgit.1。我命名目录下的每个非空子目录都被添加到索引中(在 TortoiseGit 和 git status
中检查)。从 !
开始的 .gitignore
中没有相关行,但肯定有一些冲突。现在通过在 add
期间删除文件夹来解决。猜猜这需要更多的挖掘才能提供诊断所需的信息。感谢您向我保证我没有误解语法。
除了在您的 .gitignore 文件中放置正确的条目外,如果您试图忽略已添加到 repo 中的某些内容,您必须执行 git rm -r /path/to/dir
并在将目录添加到您的 .gitignore 文件之前提交它。否则 git 唯一会忽略的是你的忽略指令。
我让它在我的机器上工作的唯一方法就是这样做:
# 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/
请注意,您必须如何明确允许要包含的每个级别的内容。所以如果我在主题下有 5 个子目录,我仍然需要把它拼出来。
这是来自@Yarin 的评论:https://stackoverflow.com/a/5250314/1696153
这些是有用的主题:
.gitignore 中的否定模式如何工作?
gitignore 排除规则实际上是如何工作的?
我也试过
*
*/*
**/**
和**/wp-content/themes/**
或/wp-content/themes/**/*
这些都不适合我。很多线索和错误!
要排除内容和子目录:
**/bin/*
要仅排除所有子目录但获取内容,请添加“/”:
**/bin/*/
要忽略所有子目录,您可以简单地使用:
**/
这适用于 git 版本 1.8.2。
忽略所有子文件夹,同时继续跟踪 /bin
目录中的文件的通用方法是将以下行添加到项目的 .gitignore 文件中:
bin/*/*
如果您只想忽略特定命名的子文件夹,您可以执行以下操作:
bin/Debug/*
bin/Release/*
注意。如果 bin
目录不在项目的根目录中(与 .gitignore 文件一起),则代替例如。 bin/*/*
您可能需要path/to/bin/*/*
忽略 .gitignore 文件中存储库根目录的所有子文件夹的最简单形式是:
*/
如果要忽略另一个子文件夹的所有子文件夹:
subfolder/*/
如果您已经提交了需要忽略的项目,则需要在它们被忽略之前将它们从 repo 中删除。
要删除 repo 根目录的所有子文件夹:
git rm -r --cached */*
要删除另一个子文件夹的所有子文件夹:
git rm -r --cached subfolder/*/*
似乎这个页面在这么多年后仍然出现在谷歌搜索的顶部......
现代版本的 Git 支持在单个 repo 中嵌套 .gitignore 文件。只需在要忽略的子目录中放置一个 .gitignore 文件。使用单个星号来匹配该目录中的所有内容:
echo "*" > /path/to/bin/Debug/.gitignore
echo "*" > /path/to/bin/Release/.gitignore
如果您之前进行过提交,请记住删除之前跟踪的文件:
git rm -rf /path/to/bin/Debug
git rm -rf /path/to/bin/Release
您可以通过执行 git status
来确认它,以显示从跟踪中删除的所有文件。
对于忽略子文件夹而不是主文件夹,我只能通过在主文件夹中放置一个虚拟的 readme.txt 来使其在 Visual Studio Code 中工作。只有在 /*/ 中检查了主文件夹(并且没有子文件夹)。
**
相关的错误。现在应该修好了。 link