12

NuGet Package Restore Issuesの回避策を実装しようとしています。

これには、階層内の任意のレベルで、すべてのパッケージ フォルダーの内容を無視することが含まれます。ただし、.targets ファイル (通常はパッケージ フォルダーのサブフォルダー内) は無視しないでください。

例えば:

.gitignore
あなたのプロジェクト/
  あなたのプロジェクト.csproj
  パッケージ/
    repositories.config
    Microsoft.Bcl.Build.1.0.7/
      ライブラリ/
        foo.dll
      ツール/
        Microsoft.Bcl.Build.targets

次のファイルのみを含める必要があります。

  • .gitignore
  • あなたのプロジェクト.csproj
  • Microsoft.Bcl.Build.targets

Windows、git バージョン 1.8.1.msysgit.1。

私は StackOverflow に関するいくつかの回答を読み、man ページを確認し、多数のバリアントを試しましたが成功しませんでした。

これは動作しません:

packages/*
!*.targets

これも:

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

これも:

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

アップデート:

  • これは、packages フォルダーが階層内のどこにあるかに関係なく機能する必要があります。
  • パッケージ、サブフォルダー、サブサブフォルダーなどの下のファイルを無視する必要があります。
  • のような他の .gitignore 行は、bin/引き続き機能する必要があります。
4

2 に答える 2

8

それを行う「良い」方法はありませんが (証明としてマンページを参照してください)、ハックがあります。

バットを無視することの主な問題packages/は、ディレクトリが無視されるため、git がそのサブディレクトリをチェックさえしないことです。

ここでの解決策 - 2 つの gitignore ファイルが必要です。通常の 1 つと、packages ディレクトリ内の 1 つが次のようになります。

# 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
#
于 2013-06-17T19:03:17.540 に答える
1

無視されたパスの優先順位は重要です。

最初に保持するものを指定してから、残りのパッケージのコンテンツを無視することで、この問題を修正しました。

ファイルには .gitignore、次のものがあることを確認してください。

!packages/repositories.config
packages/

https://github.com/danyandresh/Research/commit/65291219a1c1fbcdb2216c686767e8c46451baa1を参照してください。

私のファイルは、 github にある Visual Studio の無視リスト.gitignoreの単純なコピーであることに注意してください

于 2014-01-10T13:09:30.493 に答える