web-dev-qa-db-ja.com

.gitignoreはディレクトリ内のファイルを除外しますが、特定のディレクトリは除外しません

application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*

これは機能していないようです。プロジェクトを複製するとき、"application/cache"フォルダーや"application/cache/folder"フォルダーなどがありません...

キャッシュフォルダー内のファイルはキャッシュされないが、フォルダーはキャッシュされるので、フォルダーのアクセス許可が転送されて存在するようにしたいのですが。

95
Matthew

Gitはフォルダーを追跡せず、ファイルのみを追跡するため、フォルダー内のすべてを無視すると、Gitは追跡するものを何も持ちません。次の内容の.gitignoreファイルを各ディレクトリ(application/cacheapplication/cache/folderapplication/cache/folder/onemorefolder/)に追加できます。

*
!.gitignore

次に、それらのディレクトリを追加できます。各ディレクトリの.gitignoreファイルのみが追加されますが、これはディレクトリが追跡される(つまり、クローン作成時に作成される)ことを意味します。

214
mipadi

Gitは空のディレクトリを追跡しません。コミットするフォルダーに空のプレースホルダーファイルを追加するだけです。

touch application/cache/.keep
git add -f application/cache/.keep

これは、各「空の」フォルダーでも行います。後でこれらのファイルを無視できます。実際に存在するのは、gitがクローン上にこれらのディレクトリを作成することを確認するためだけです。 .gitignoreのエントリは、フォルダー内の他のファイルが追跡されないようにします(git add -f;で強制しない限り)。

22
KingCrunch

これを行うには、おそらくよりクリーンな方法があります。保持したいフォルダにサブ.gitignoreファイルを置くのではなく。これを次のようにルート.gitignoreに配置できます。

application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*
!*.gitkeep

次に、空の.gitkeepファイルを作成して、上記のディレクトリにコミットします。その後、フォルダーはそれらの.gitkeepファイルで追跡されますが、コンテンツは追跡されません。

15
Joel Duckworth

それぞれに.gitignoreファイルを(mipadiが言ったように)置くか、ルート.gitingnoreファイルにそのようなものを作成できます。

/assets/*/
/assets/*.*

それは私のためにうまくいきます

3
Claude Janz

Visual Studioは受け入れられた答えを好まなかった。 *の前に新しい行を追加して、機能させる必要がありました。

# Ignore all files in this folder.
*
!.gitignore
1
Stephen