Windows .git忽略任何级别的NuGet packages文件夹,但包括任何级别的.targets文件
我正在尝试为该应用程序实施变通方法 这涉及到忽略层次结构中任何级别的所有包文件夹的内容。但是,不应忽略.targets文件(通常位于包文件夹的子文件夹中) 例如: .gitignore YourProject/ YourProject.csproj packages/ repositories.config Microsoft.Bcl.Build.1.0.7/ lib/ foo.dll tools/ Microsoft.Bcl.Build.targets 这也不是:Windows .git忽略任何级别的NuGet packages文件夹,但包括任何级别的.targets文件,windows,git,nuget,gitignore,Windows,Git,Nuget,Gitignore,我正在尝试为该应用程序实施变通方法 这涉及到忽略层次结构中任何级别的所有包文件夹的内容。但是,不应忽略.targets文件(通常位于包文件夹的子文件夹中) 例如: .gitignore YourProject/ YourProject.csproj packages/ repositories.config Microsoft.Bcl.Build.1.0.7/ lib/ foo.dll tools/ Microsof
packages/*
!packages/**/*.targets
**/packages/*
!**/packages/**/*.targets
这也不是:
packages/*
!packages/**/*.targets
**/packages/*
!**/packages/**/*.targets
更新:
- 无论packages文件夹在层次结构中的位置如何,这都需要起作用
- 它需要忽略包、子文件夹、子文件夹等下的文件
- 其他.gitignore行,如
,必须继续工作bin/
包/
的主要问题是,由于忽略了目录,git甚至没有检查它的子目录
解决方案-您必须有2个gitignore文件。一个是常规的,另一个在packages目录中,如下所示:
# ignore all files
*
# do not ignore directories
!*/
# do not ignore targets
!*.targets
# do not ignore gitignore
!*.gitignore
新例子:
$ mkdir foo
$ cd foo/
$ mkdir foo
$ mkdir foo/bar
$ mkdir foo/bar/baz
$ touch foo/.foo
$ touch foo/bar/.foo
$ touch foo/bar/baz/.foo
$ touch regular.txt
$ touch foo/ignored.txt
$ touch foo/bar/baz/ignored-2.txt
$ cat foo/.gitignore
*
!*/
!*.foo
!regular.txt
!.gitignore
$ git add . && git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: foo/.foo
# new file: foo/bar/.foo
# new file: foo/bar/baz/.foo
# new file: regular.txt
#
$mkdir foo
$cd foo/
$mkdir foo
$mkdir foo/酒吧
$mkdir foo/bar/baz
$touch foo/.foo
$touch foo/bar/.foo
$touch foo/bar/baz/.foo
$touch regular.txt
$touch foo/ignored.txt
$touch foo/bar/baz/ignored-2.txt
$cat foo/.gitignore
*
!*/
!*.福
!regular.txt
!.gitignore
$git加上&&git状态
#论分行行长
#
#初始提交
#
#要提交的更改:
#(使用“git rm--cached…”取消存储)
#
#新文件:foo/.foo
#新文件:foo/bar/.foo
#新文件:foo/bar/baz/.foo
#新文件:regular.txt
#
我认为被忽略路径的优先级很重要
我修复了这个问题,首先指定保留什么,然后忽略包的其余内容
在.gitignore
文件中,确保您应该具有:
!packages/repositories.config
packages/
看
请注意,我的
.gitignore
文件是的简单副本,我想您可以使用!*。目标\n/packages/*.
(其中\n是换行符),但这不会忽略无扩展文件。问题是*
目录也匹配。@vcsjones刚刚尝试过;那也不行。它添加了包下的所有DLL。谢谢!例如,您可能希望在baz下包含一个不需要的文件,以表明未添加该文件。另外,由于我不想指定每个项目文件夹,因此我似乎可以将您的项目替换为**
。最后,它应该是目标,而不是目标。(不是为了我,而是为了将来的读者。)在进一步的测试中,这不起作用(至少在Windows下是这样)。要进行演示,请在baz\fez
下创建文件dispured.txt
。将添加该文件。此操作已关闭:***/baz/*\n**/baz/***\n!*/\n!*。foo
。至少还有一个问题:不忽略目录会影响其他.gitignore行,比如bin/
。哇-我最后的评论仍然不够。显然你必须做***/packages/***/***
,***/packages/***/***/***
,等等。请告诉我有更好的方法。@TrueWill很好。从头开始重新编写答案,在新示例中,foo/
中的所有内容都被忽略。