web-dev-qa-db-ja.com

Gitでディレクトリを追跡し、ファイルを追跡しない方法は?

私は最近Gitの使用を開始しましたが、1つだけ問題があります。内容を追跡せずにディレクトリを追跡するにはどうすればよいですか?

たとえば、私が取り組んでいるサイトではアップロードが許可されています。ブランチなどでアップロードディレクトリが作成されるようにアップロードディレクトリを追跡しますが、明らかにその中のファイル(開発ブランチのテストファイルまたはマスターの実際のファイル)はそうではありません。

私の.gitignoreには次のものがあります:

アップロード/*.*

また試してみました(ディレクトリ全体を無視します):

アップロード/

このディレクトリには、サブディレクトリ(uploads/thumbs/uploads/videos /)も含まれる場合があります。これらのファイルは追跡できますが、追跡することはできません。

これはGitで可能ですか?答えを見つけることなくどこでも検索しました。

67
Ben

Gitはディレクトリを追跡せず、ファイルを追跡します。そのためには、少なくとも1つのファイルを追跡する必要があります。したがって、.gitignoreファイルは次のようになります。

upload/*

あなたはこれを行うことができます:

$ touch upload/.placeholder
$ git add -f upload/.placeholder

-fを忘れると、以下が表示されます:

 $ git add upload/.placeholder 
次のパスは、.gitignoreファイルのいずれかによって無視されます。
 upload 
本当に追加する場合は、-fを使用します
 fatal:ファイルは追加されていません

次に、git statusを実行すると、以下が表示されます。

#ブランチマスター上
#
#初期コミット
#
#コミットする変更:
#( "gitを使用rm --cached ... "ステージング解除まで)
#
#new file:upload/.placeholder 
#

明らかにあなたはそうすることができます:

$ touch upload/images/.placeholder
$ git add -f upload/images/.placeholder
92
Peter Farmer

これについて書いた こちら

ディレクトリ内に.gitignoreを追加します。

37
Abizern

私が見つけた最善の答えは、このコンテンツを含むアップロードフォルダに.gitignoreファイルを含めることです

# Ignore everything in this directory
*
# Except this file
!.gitignore

Gitリポジトリに空のディレクトリを追加するにはどうすればよいですか?

16
Gonzalo Cao

これまでの最適なソリューション:

1)。gitignoreファイルを作成します

2)内部に書く:

*
*/
!.gitignore

3).gitignoreファイルを目的のフォルダーに追加します。

ソース: https://stackoverflow.com/a/5581995/295854

12
mejiamanuel57

ディレクトリだけを追跡し、ファイルを追跡しないために、次のことを行いました。 git tracking only filesに関する@PeterFarmerのコメントのおかげで、以下で説明するように、ファイルを除くすべてのディレクトリを保持することができました。

# exclude everything in every folder
/data/**/*.*

# include only .gitkeep files
!/data/**/*.gitkeep

これを.gitignoreファイルに追加すると、作業が行われます。以下は私のフォルダ構造です。

data/
├── processed
│   ├── dataset1.csv
│   └── dataset2.csv
├── raw
│   ├── raw_dataset1.json
└── test
    ├── subfolder
    │   └── dataset2.csv
    └── reviews.csv

私がする時 git add . && git status、gitはフォルダーのみを認識し、ファイルは認識しません。

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   .gitignore
        new file:   data/processed/.gitkeep
        new file:   data/raw/.gitkeep
        new file:   data/test/.gitkeep
        new file:   data/test/subfolder/.gitkeep

.gitignoreファイルについては、次のことに注意してください。

先頭のスラッシュは、ルートディレクトリのみを検索します。

/ dir

ダブルアスタリスクは、ゼロ個以上のディレクトリを探します。

/ ** /

2
metinsenturk