私は最近Gitの使用を開始しましたが、1つだけ問題があります。内容を追跡せずにディレクトリを追跡するにはどうすればよいですか?
たとえば、私が取り組んでいるサイトではアップロードが許可されています。ブランチなどでアップロードディレクトリが作成されるようにアップロードディレクトリを追跡しますが、明らかにその中のファイル(開発ブランチのテストファイルまたはマスターの実際のファイル)はそうではありません。
私の.gitignoreには次のものがあります:
アップロード/*.*
また試してみました(ディレクトリ全体を無視します):
アップロード/
このディレクトリには、サブディレクトリ(uploads/thumbs/uploads/videos /)も含まれる場合があります。これらのファイルは追跡できますが、追跡することはできません。
これはGitで可能ですか?答えを見つけることなくどこでも検索しました。
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
これについて書いた こちら 。
ディレクトリ内に.gitignoreを追加します。
私が見つけた最善の答えは、このコンテンツを含むアップロードフォルダに.gitignoreファイルを含めることです
# Ignore everything in this directory
*
# Except this file
!.gitignore
これまでの最適なソリューション:
1)。gitignoreファイルを作成します
2)内部に書く:
*
*/
!.gitignore
3).gitignoreファイルを目的のフォルダーに追加します。
ディレクトリだけを追跡し、ファイルを追跡しないために、次のことを行いました。 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
ダブルアスタリスクは、ゼロ個以上のディレクトリを探します。
/ ** /