.gitignore NuGet在任何级别打包文件夹,但在任何级别都包含.targets文件

时间:2013-06-17 17:15:18

标签: windows git nuget gitignore

我正在尝试实施NuGet Package Restore Issues的解决方法。

这涉及忽略层次结构中任何级别的所有包文件夹的内容。但是,不应忽略.targets文件(通常位于包文件夹的子文件夹中)。

例如:

.gitignore
YourProject/
  YourProject.csproj
  packages/
    repositories.config
    Microsoft.Bcl.Build.1.0.7/
      lib/
        foo.dll
      tools/
        Microsoft.Bcl.Build.targets

应仅包含文件:

  • 的.gitignore
  • YourProject.csproj
  • Microsoft.Bcl.Build.targets

Windows,git版本1.8.1.msysgit.1。

我已经在StackOverflow上阅读了几个答案,检查了手册页,并尝试了许多变种但没有成功。

这不起作用:

packages/*
!*.targets

也不是这样:

packages/*
!packages/**/*.targets

也不是这样:

**/packages/*
!**/packages/**/*.targets

更新

  • 无论package文件夹位于层次结构中的哪个位置,都需要这样做。
  • 需要忽略包,子文件夹,子子文件夹等下的文件。
  • 其他.gitignore行,如bin/,必须继续有效。

2 个答案:

答案 0 :(得分:8)

没有“好”的方法(参见manpage作为证据),但是它周围有一个黑客。

忽略bat的packages/的主要问题是,由于目录被忽略,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
#

答案 1 :(得分:1)

忽略路径的优先级很重要,我接受了。

我通过首先指定要保留的内容来修复此问题,然后忽略其余的包的内容。

.gitignore文件中,请确保您应该:

!packages/repositories.config
packages/

请参阅https://github.com/danyandresh/Research/commit/65291219a1c1fbcdb2216c686767e8c46451baa1

请注意,我的.gitignore文件是Visual studio ignore list as found on github

的简单副本