44

Zend Framework 2 ベンダー ディレクトリのディレクトリ (およびその内容) の SupplierName をホワイトリストに登録しようとしています。

/vendor の元の .gitignore ファイルは次のようになります。

# Add here the vendor path to be whitelisted
# Ex: for composer directory write here "!composer" (without quotes)
!.gitignore
*

ここで、ディレクトリ SupplierName をホワイトリストに登録したいと思いますが、これはそれほど難しくないと思いました。gitignore のドキュメントを読み、次の構成を試しました。

最初に !SupplierName をコメントの直後に追加して、ホワイトリストに登録されたパスをここに追加する必要があることを確認してください。

# Add here the vendor path to be whitelisted
!SupplierName
# Ex: for composer directory write here "!composer" (without quotes)
!.gitignore
*

その直後にgit status、vendor/SupplierName ディレクトリが表示されない実行を行いました。git add vendor/SupplierName次のメッセージが表示されました。

次のパスは、.gitignore ファイルの 1 つによって無視されます: vendor/SupplierName

2 回目の試行

# Add here the vendor path to be whitelisted
# Ex: for composer directory write here "!composer" (without quotes)
!SupplierName
!.gitignore
*

その直後にgit status、vendor/SupplierName ディレクトリが表示されない実行を行いました。git add vendor/SupplierName次のメッセージが表示されました。

次のパスは、.gitignore ファイルの 1 つによって無視されます: vendor/SupplierName

3 回目の試行

# Add here the vendor path to be whitelisted
# Ex: for composer directory write here "!composer" (without quotes)
!.gitignore
*
!SupplierName

その直後にgit status、vendor/SupplierName ディレクトリが表示されない実行を行いました。git add vendor/SupplierName うまくいくようです。しかし今、Module.php ファイル (およびその他のファイル、サブディレクトリなど) を追加したい場合は、次のようになります。git add vendor/SupplierName/Module.php-->

次のパスは、.gitignore ファイルの 1 つによって無視されます: vendor/SupplierName/Module.php

# Add here the vendor path to be whitelisted
# Ex: for composer directory write here "!composer" (without quotes)
*
!.gitignore
!SupplierName
!SupplierName/
!SupplierName/*

vendor/SupplierName にファイルを直接追加できますが、git add vendor/SupplierName/config/module.config.phpそれでも

次のパスは、.gitignore ファイルの 1 つによって無視されます: vendor/SupplierName/config/module.config.php

それが問題のように見えるので、再帰的なホワイトリストに関する問題を探していましたが、何も見つかりませんでした。

4

7 に答える 7

50

2 つ.gitignoreのファイルを使用して、目的の結果を得ることができます。

# vendor/.gitignore
*
!.gitignore
!SupplierName/
!SupplierName/*

# vendor/SupplierName/.gitignore
!*

私はこれをテストリポジトリでテストしましたが、vendor/SupplierNameディレクトリの下に多くのレベルのファイルを追加するのにうまくいくようです。

$ git add .

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   vendor/.gitignore
#   new file:   vendor/SupplierName/.gitignore
#   new file:   vendor/SupplierName/a
#   new file:   vendor/SupplierName/b
#   new file:   vendor/SupplierName/c
#   new file:   vendor/SupplierName/d
#   new file:   vendor/SupplierName/dir1/d
#   new file:   vendor/SupplierName/dir1/dir4/dir5/dir6/dir7/dir8/dir9/dir10/somefile
#   new file:   vendor/SupplierName/dir1/dir4/f1
#   new file:   vendor/SupplierName/dir1/dir4/f2
#   new file:   vendor/SupplierName/dir1/dir4/f3
#   new file:   vendor/SupplierName/dir1/dir4/f4
#   new file:   vendor/SupplierName/dir1/e
#   new file:   vendor/SupplierName/dir1/f
#   new file:   vendor/SupplierName/dir3/dir6/f5
#   new file:   vendor/SupplierName/dir3/dir6/f6
#   new file:   vendor/SupplierName/dir3/dir6/f7
#   new file:   vendor/SupplierName/dir3/dir7/f8
#   new file:   vendor/SupplierName/e
#
于 2013-03-10T09:25:10.080 に答える
16

.gitignoreこれは、(プロジェクト ルートにある) 1 つのファイルだけで実現することもできます。

/*
!/.gitignore
!/vendor
/vendor/*
!/vendor/SupplierName
于 2013-03-10T23:37:04.880 に答える
2

CVS から Git に移行するときにも同様の問題がありました。

CVS とは異なり、Git はディレクトリを調べず、ファイルに注目します。

たとえば、ディレクトリ "a" を無視することはできませんが、次のようにディレクトリ "a" 内のすべてのファイルを無視することはできません: !a/*

サブディレクトリについても同様です。

ディレクトリ「a」にサブディレクトリ「b」があり、「!a/*」を無視すると、「a/b」内のすべてのファイルが取得されます。

そのため、ホワイトリストに登録するすべてのサブディレクトリについて、「!a/b/*」なども無視する必要があります。

必要な .gitignore ファイルは 1 つだけです。

したがって、次のような結果になります。

# ignore everything
*
# except for .gitignore files in the current directory
!.gitignore
# and all files in directory a
!a/*
#and all files in subdirectory b
!a/b/*

これを使用しても、a/c および a/b/c からファイルを取得できます。サブディレクトリへの再帰の回避策があるかどうかはわかりません。

于 2013-03-10T19:49:43.650 に答える
2

最初にすべてをブラックリストに含めてから、すべてのディレクトリとサブディレクトリをホワイトリストに追加する必要があります。たとえば、ホワイトリストにDIR /opt/source/、 DIR /opt/nginx/、および FILEのみを入れたい場合は、次のようにファイルを記述して機能させることができます。/home/test/.opt/hello.txt.gitignore

/*
!/.gitignore
!/opt
/opt/*
!/opt/source/
!/opt/nginx/
!/home
/home/*
!/home/test
/home/test/*
!/home/test/.opt
/home/test/.opt/*
!/home/test/.opt/hello.txt
于 2015-10-25T03:15:30.313 に答える