【发布时间】:2010-11-17 22:15:15
【问题描述】:
我想忽略存储库中的所有文件,但bin 子目录中的文件除外。我尝试将以下内容添加到我的.gitignore:
*
!bin/*
这并没有达到预期的效果,但是:我在bin/ 中创建了一个新文件,但执行git status 仍然显示nothing to commit (working directory clean)。
有什么建议吗?
【问题讨论】:
我想忽略存储库中的所有文件,但bin 子目录中的文件除外。我尝试将以下内容添加到我的.gitignore:
*
!bin/*
这并没有达到预期的效果,但是:我在bin/ 中创建了一个新文件,但执行git status 仍然显示nothing to commit (working directory clean)。
有什么建议吗?
【问题讨论】:
您遇到的唯一问题是 bin 目录本身与 bin/* 模式不匹配,因此 git 甚至不会查看 bin 目录。
我想到了两种解决方案。
.gitignore:
*
!/bin/
!bin/*
或
.gitignore:
*
!/bin/
bin/.gitignore:
!*
我更喜欢第二种解决方案,因为第一种解决方案不会停止忽略bin 目录中的文件,这些文件位于不称为bin 的子目录中。这对您的情况可能很重要,也可能无关紧要。
【讨论】:
# Ignore everything * # But not these files... !/wp-content/ !/wp-content/plugins/ !/wp-content/plugins/my_plugin/ !/wp-content/plugins/my_plugin/* cmets 中没有块代码?
我认为更好的方法是通过以斜线开头的模式将每个模式锚定到顶部 git 目录:
/*
!/public_html
!/.gitignore
它只会忽略顶级文件,而不是忽略所有文件,而不是您不想忽略的目录中的文件。
【讨论】:
这个.gitignore 为我工作:
*/
/*
!bin/
【讨论】:
这会忽略根文件和根目录,然后取消忽略根 bin 目录:
/*
/*/
!/bin/
这样你就可以得到所有的 bin 目录,包括子目录和它们的文件。
【讨论】:
/stuff/ 和!/stuff/specific/,但它仍然忽略/stuff/specific/
git check-ignore -v 告诉我这是因为~/.gitignore
!/bin/ 添加到我的根.gitignore 文件中,但随后我还必须添加/bin/.gitignore 文件和!*... 仅进行其中一项更改不起作用。它只有在结合这两个更改后才有效。
/stuff/* 和!/stuff/specific/。区别在于/stuff/ 告诉它忽略 stuff 目录本身,/stuff/* 说忽略 stuff 目录中的所有目录,然后不要忽略这个特定目录。这对我来说很重要。
这里如何忽略某个目录中除一个目录“MY_SUPER_DUPER_TEMPLATE_directory”之外的所有内容
结构:/bitrix/templates/MY_SUPER_DUPER_TEMPLATE_directory
/*
!/bitrix
/bitrix/*
!/bitrix/templates
/bitrix/templates/*
!/bitrix/templates/MY_SUPER_DUPER_TEMPLATE_directory
*.DS_Store
*.gitignore
【讨论】:
您必须排除前往目的地途中的所有内容,但您必须包括目的地:
注意:这是一个排除文件(即 .gitignore),因此逻辑是相反的。全部忽略,tsp目录除外,tsp目录中的全部忽略,src目录除外……
/*
!/tsp
/tsp/*
!/tsp/src
/tsp/src/*
!/tsp/src/*.h
!/tsp/src/*.cpp
!/tsp/src/data.txt
!/.gitignore
【讨论】:
在最新的 GIT 版本中尝试以下操作。
*
!*/
!/path/to/your/dir/**
【讨论】:
【讨论】:
来自官方git doc,其中一个例子说:
排除除特定目录 foo/bar 之外的所有内容的示例(注意 /* - 没有斜线,通配符也将排除 foo/bar 中的所有内容):
$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
有关前导斜杠的说明:When to use leading slash in gitignore。
【讨论】:
我最近不得不这样做:
*
!sub-dir/
!sub-dir/*
我不确定为什么我需要两行来排除一个文件夹,但这对我和 macos 都有效。
【讨论】:
这是我的解决方案。在我的场景中,我有一个包含子文件夹的文件夹,如下所示:
我只想从 database 文件夹推送 sql 文件夹,所以我的 .gitignore 文件如下:
database/*
!database/sql/
第一行简单地说忽略 database 文件夹的所有子文件夹,第二行表示忽略 database 的所有子文件夹文件夹排除(不要忽略)sql 子文件夹
【讨论】:
派对迟到了,但没有一个答案对我“开箱即用”。这个可以:
*
!bin
!bin/**
【讨论】:
事实证明,我不应该忽略父文件夹,而是使用 /* 忽略其中的文件和文件夹
-- **/node_modules
++ **/node_modules/*
然后
++ !node_modules/@my-package/
【讨论】: