空のディレクトリを Git リポジトリに追加するにはどうすればよいですか?
質問
空のディレクトリ (ファイルが含まれていない) を Git リポジトリに追加するにはどうすればよいですか?
解決
ディレクトリを (リポジトリ内で) (ほぼ) 空のままにするもう 1 つの方法は、 .gitignore
そのディレクトリ内のファイルには次の 4 行が含まれています。
# Ignore everything in this directory
*
# Except this file
!.gitignore
そうすれば、m104 のように順序を正しく行う必要はありません。 解決.
これには、git status を実行したときに、そのディレクトリ内のファイルが「未追跡」として表示されなくなるという利点もあります。
作る @aaaaaaaaaaaaaaaaaのコメントが永続的:
この解決策は質問で求められたことを正確に実行しますが、おそらくこの質問を見ている多くの人が探していたものではないことは注目に値すると思います。このソリューションでは、ディレクトリが空のままであることが保証されます。「ここでは絶対にファイルをチェックインしたくない」と表示されます。「ここにチェックインするファイルはまだありませんが、ここにディレクトリが必要です。ファイルは後で来る可能性があります。」とは対照的に。
他のヒント
あなたはできません。を参照してください。 Git に関するよくある質問.
現在、GITインデックス(ステージング領域)の設計により、ファイルをリストすることができます。また、空のディレクトリを許可するために変更を行うのに十分な能力がある人はいません。
ディレクトリは、それらの内部にファイルを追加するときに自動的に追加されます。つまり、ディレクトリをリポジトリに追加する必要はなく、独自に追跡されていません。
「」と言うことができます。
git add <dir>
「そして、そこにファイルが追加されます。チェックアウトに存在するディレクトリが本当に必要な場合は、その中にファイルを作成する必要があります。.gitignoreはこの目的のためにうまく機能します。空のままにしておくか、ディレクトリに表示されると予想されるファイルの名前を入力できます。
という名前の空のファイルを作成します。 .gitkeep
ディレクトリ内にそれを追加します。
ディレクトリに README ファイルを配置し、リポジトリにこのディレクトリ (空のディレクトリ) を必要とする理由を説明することができます。
touch .keep
Linux では、これにより、という名前の空のファイルが作成されます。 .keep
. 。この名前は .gitkeep
前者は Git に依存しないのに対し、後者は Git に固有であるためです。第二に、別のユーザーが指摘したように、 .git
プレフィックス規則は、Git 自体が使用するファイルとディレクトリのために予約されている必要があります。
あるいは、別の記事で述べたように、 答え, 、ディレクトリには説明を含めることができます。 README
または README.md
ファイル その代わり。
もちろん、これには、ファイルの存在によってアプリケーションが中断されないことが必要です。
空のバージョン管理されたフォルダーが必要な理由
まず最初に:
空のディレクトリ Git バージョン管理システムではツリーの一部にすることはできません.
単に追跡されないだけです。ただし、空のディレクトリの「バージョン管理」が意味のあるシナリオもあります。次に例を示します。
- 足場 事前定義されたフォルダー構造, 、リポジトリのすべてのユーザー/寄稿者が利用できるようにします。または、上記の特殊なケースとして、 一時ファイル, 、 など
cache/
またはlogs/
ディレクトリ、ここにフォルダーを指定したいのですが、.gitignore
その内容 - 上記に関連するいくつかのプロジェクト いくつかのフォルダーがないと機能しません (これは多くの場合、プロジェクトの設計が不十分であることを示していますが、現実世界ではよくあるシナリオであり、たとえばアクセス許可の問題に対処する必要がある可能性があります)。
いくつかの推奨される回避策
多くのユーザーは次のように提案しています。
- を配置する
README
ディレクトリを空にしないために、ファイルまたは何らかのコンテンツを含む別のファイル、または - の作成
.gitignore
一種の「逆ロジック」を備えたファイル(すなわち、すべてのファイルを含めます)、これは最終的にアプローチ #1 と同じ目的を果たします。
その間 どちらのソリューションも確実に機能します これらは、Git のバージョン管理に対する有意義なアプローチと矛盾していると思います。
- 本当は必要のない偽のファイルや README をプロジェクトに入れる必要があるのはなぜでしょうか?
- なぜ使うのか
.gitignore
何かをする(維持する ファイル)、これは本来の目的とは正反対です (除く ファイル)、それは可能ですが?
.gitkeep アプローチ
を使用してください 空の というファイル .gitkeep
バージョン管理システムにフォルダーを強制的に存在させるためです。
それほど大きな違いではないように見えるかもしれませんが、
次のファイルを使用します。 シングル フォルダーを保存する目的。入れたくない情報は入れません。
たとえば、README は、フォルダーを保持する言い訳としてではなく、有益な情報を含む README として使用する必要があります。
懸念事項を分離することは常に良いことであり、懸念事項を追加することもできます。
.gitignore
不要なファイルを無視します。名前を付ける
.gitkeep
ファイル名自体から非常に明確かつ簡単になります (また、 他の開発者へ, 、これは共有プロジェクトに適しており、Git リポジトリの中心的な目的の 1 つです)。- コードとは関係のないファイル (先頭のドットと名前のため)
- 明らかに Git に関連するファイル
- その目的 (保つ) は明確に述べられており、一貫性があり、意味的には反対です。 無視する
可決
私は見たことがあります .gitkeep
などの非常に重要なフレームワークで採用されているアプローチ ララベル, Angular-CLI.
他の回答で説明されているように、Git はステージング領域で空のディレクトリを表すことができません。(「 Git に関するよくある質問.) ただし、目的上、ディレクトリが十分に空である場合は、 .gitignore
ファイルのみの場合は、作成できます .gitignore
空のディレクトリ内のファイルは、次の方法でのみ保存できます。
find . -type d -empty -exec touch {}/.gitignore \;
Andy Lester の言うことは正しいですが、ディレクトリを空にする必要があるだけで、空にする必要がない場合は、 空の 空の場合は、空の文字を入れることができます .gitignore
回避策としてそこにファイルを追加してください。
余談ですが、これは実装の問題であり、Git ストレージ設計の基本的な問題ではありません。Git メーリング リストで何度も言及されているように、これが実装されていない理由は、誰もそのパッチを提出するほどの関心を持っていないためであり、パッチを提出できない、あるいはそうすべきではないということではありません。
の ルビー・オン・レール ログフォルダーの作成方法:
mkdir log && touch log/.gitkeep && git add log/.gitkeep
これで、ログ ディレクトリがツリーに含まれるようになります。これはデプロイ時に非常に便利なので、ログ ディレクトリを作成するルーチンを作成する必要がありません。
次のコマンドを発行することで、ログファイルを外部から除外できます。
echo log/dev.log >> .gitignore
しかし、あなたはおそらくそれを知っていたでしょう。
Git は空のディレクトリを追跡しません。を参照してください。 Git に関するよくある質問 詳しい説明については。推奨される回避策は、 .gitignore
空のディレクトリにファイルを作成します。私はその解決策が好きではありません。 .gitignore
Unix の規約により「隠蔽」されています。また、ディレクトリが空である理由も説明されていません。
空のディレクトリに README ファイルを置き、ディレクトリが空である理由と Git で追跡する必要がある理由を説明することをお勧めします。README ファイルが配置されると、Git に関する限り、ディレクトリは空ではなくなります。
本当の疑問は、なぜ git に空のディレクトリが必要なのかということです。通常、コンパイル/実行前に空のディレクトリを作成できる何らかのビルド スクリプトがあります。そうでない場合は、作成してください。これは、git に空のディレクトリを置くよりもはるかに優れた解決策です。
git に空のディレクトリが必要になるのには、何らかの理由があります。その理由を README ファイルに記載してください。そうすることで、他の開発者 (そして将来のあなた) は、なぜ空のディレクトリがそこに存在する必要があるのかを知ることができます。また、空のディレクトリが必要な問題が解決したら、空のディレクトリを削除できることもわかります。
すべての空のディレクトリをリストするには、次のコマンドを使用します。
find -name .git -prune -o -type d -empty -print
すべての空のディレクトリにプレースホルダ README を作成するには、次の手順を実行します。
find -name .git -prune -o -type d -empty -exec sh -c \
"echo this directory needs to be empty because reasons > {}/README.emptydir" \;
README ファイル以外のディレクトリ内のすべてを無視するには、次の行を .gitignore
:
path/to/emptydir/*
!path/to/emptydir/README.emptydir
path/to/otheremptydir/*
!path/to/otheremptydir/README.emptydir
あるいは、単に除外することもできます 毎 README ファイルが無視されないようにする:
path/to/emptydir/*
path/to/otheremptydir/*
!README.emptydir
作成済みのすべての README をリストするには、次のようにします。
find -name README.emptydir
警告:結局のところ、この調整は実際には機能していません。 ご不便をおかけして申し訳ありません。
元の投稿は以下の通り:
Git の内部をいじっているときに解決策を見つけました。
- リポジトリにいると仮定します。
空のディレクトリを作成します。
$ mkdir path/to/empty-folder
配管コマンドと空のツリーを使用してインデックスに追加します。 SHA-1:
$ git update-index --index-info 040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 path/to/empty-folder
コマンドを入力し、2 行目を入力します。プレス 入力 その後 Ctrl + D 入力を終了します。注記:形式は モード [空間] タイプ [スペース] SHA-1ハッシュ [タブ] パス (タブは重要ですが、回答の書式設定ではタブが保持されません)。
それでおしまい!空のフォルダーはインデックスにあります。あなたがしなければならないのはコミットすることだけです。
この解決策は短いですが、明らかにうまく機能します (編集を参照してください!)でも、そう簡単には覚えられません…。
空のツリー SHA-1 は、新しい空の Git リポジトリを作成することで見つけることができます。 cd
それに入れて発行します git write-tree
, 、空のツリー SHA-1 を出力します。
編集:
このソリューションを見つけて以来、私はそれを使用しています。モジュールがどこにも定義されていないことを除いて、サブモジュールの作成とまったく同じように機能するように見えます。これにより、発行時にエラーが発生します git submodule init|update
。問題はそれです git update-index
を書き換えます 040000 tree
分割する 160000 commit
.
さらに、そのパスの下に置かれたファイルは、他のリポジトリに属していると見なされるため、Git によって認識されることはありません。これは見落とされやすいので厄介です。
ただし、リポジトリで Git サブモジュールをまだ使用しておらず (今後も使用しない)、「空の」フォルダーが空のままになる場合、または Git にその存在を認識させ、その内容を無視させたい場合は、次のようにします。この微調整。サブモジュールを通常の方法で使用するには、この調整よりも多くの手順が必要です。
おそらく、空のディレクトリを追加すると、 最も抵抗の少ない道 そのディレクトリが存在することを期待するスクリプトがあるためです (おそらく、それが生成されたバイナリのターゲットであるため)。別のアプローチは次のとおりです 必要に応じてスクリプトを変更してディレクトリを作成します.
mkdir --parents .generated/bin ## create a folder for storing generated binaries
mv myprogram1 myprogram2 .generated/bin ## populate the directory as needed
この例では、ディレクトリへの (壊れた) シンボリック リンクをチェックインして、「.generated」プレフィックスなしでアクセスできるようにします (ただし、これはオプションです)。
ln -sf .generated/bin bin
git add bin
ソース ツリーをクリーンアップしたい場合は、次のようにするだけです。
rm -rf .generated ## this should be in a "clean" script or in a makefile
ほぼ空のフォルダーをチェックインするというよく推奨されるアプローチを採用する場合、「.gitignore」ファイルを削除せずにコンテンツを削除するという多少の複雑さが発生します。
以下をルート .gitignore に追加することで、生成されたファイルをすべて無視できます。
.generated
という名前の空のディレクトリが必要だとします。 一時 :
$ mkdir tmp
$ touch tmp/.gitignore
$ git add tmp
$ echo '*' > tmp/.gitignore
$ git commit -m 'Empty directory' tmp
つまり、.gitignore ファイル (および空のディレクトリ内のその他すべて) を無視するように Git に指示するには、その前に .gitignore ファイルをインデックスに追加する必要があります。
私も空のディレクトリの問題に直面しています。プレースホルダー ファイルを使用する場合の問題は、プレースホルダー ファイルを作成し、不要になった場合は削除する必要があることです (後でサブディレクトリまたはファイルが追加されたため)。ソース ツリーが大きい場合、これらのプレースホルダー ファイルの管理は煩雑でエラーが発生しやすい可能性があります。
このため、このようなプレースホルダー ファイルの作成/削除を自動的に管理できるオープンソース ツールを作成することにしました。これは .NET プラットフォーム用に書かれており、Mono (Linux 用 .NET) および Windows 上で実行されます。
ちょっと見てください: http://code.google.com/p/markemptydirs
それはできませんし、残念ながら決してできることはありません。これはライナス・トーバルド自身が下した決定です。彼は私たちにとって何が良いのかを知っています。
かつて読んだどこかで暴言が書かれていました。
見つけました Re:空のディレクトリ.., しかし、もしかしたら他にもあるかもしれません。
残念ながら、回避策を順守する必要があります。
@Artur79 と @mjs の回答が気に入ったので、両方を組み合わせて使用し、それをプロジェクトの標準にしました。
find . -type d -empty -exec touch {}/.gitkeep \;
ただし、Mac または Linux で作業する開発者はほんの一握りです。Windows では多くの機能が動作しますが、同じことを実現するための同等の単純なワンライナーが見つかりませんでした。幸運にもそれを手に入れた人もいた シグウィン 他の理由でインストールされましたが、このためだけに Cygwin を処方するのはやりすぎのように思えました。
より良い解決策を得るために編集する
したがって、ほとんどの開発者はすでに 蟻 がインストールされたら、私が最初に考えたのは、プラットフォームに関係なくこれを実現するために Ant ビルド ファイルをまとめることでした。これはまだ見つかります ここ
しかし, 後でこれを小さなユーティリティコマンドにしたほうが良いだろうと思い、Pythonを使用して再作成してPyPIに公開しました ここ. 。以下を実行するだけでインストールできます。
pip3 install gitkeep2
作成と削除が可能になります .gitkeep
また、ファイルにメッセージを追加して、それらのディレクトリが重要である理由を同僚に理解させることもできます。この最後のビットはボーナスです。だったらいいなと思いました。 .gitkeep
ファイルは自己文書化されている可能性があります。
$ gitkeep --help
Usage: gitkeep [OPTIONS] PATH
Add a .gitkeep file to a directory in order to push them into a Git repo
even if they're empty.
Read more about why this is necessary at: https://git.wiki.kernel.org/inde
x.php/Git_FAQ#Can_I_add_empty_directories.3F
Options:
-r, --recursive Add or remove the .gitkeep files recursively for all
sub-directories in the specified path.
-l, --let-go Remove the .gitkeep files from the specified path.
-e, --empty Create empty .gitkeep files. This will ignore any
message provided
-m, --message TEXT A message to be included in the .gitkeep file, ideally
used to explain why it's important to push the specified
directory to source control even if it's empty.
-v, --verbose Print out everything.
--help Show this message and exit.
ぜひお役立てください。
を追加すると、 .gitignore
ファイルに任意の量のコンテンツ (Git に無視させたいコンテンツ) を含める場合は、アスタリスクだけを含む 1 行を追加するとよいでしょう。 *
無視されたコンテンツを誤って追加しないようにするためです。
前述したように、空のディレクトリを追加することはできませんが、空の .gitignore ファイルをすべてのディレクトリに追加するワンライナーを次に示します。
ruby -e 'require "fileutils" ; Dir.glob(["target_directory","target_directory/**"]).each { |f| FileUtils.touch(File.join(f, ".gitignore")) if File.directory?(f) }'
簡単にアクセスできるように、これを Rakefile に貼り付けました。
ジェイミー・フルーノイの解決策 よく働く。これを維持するために少し強化されたバージョンは次のとおりです。 .htaccess
:
# Ignore everything in this directory
*
# Except this file
!.gitignore
!.htaccess
このソリューションを使用すると、たとえば空のフォルダーをコミットできます。 /log
, /tmp
または /cache
フォルダーは空のままになります。
私は常に、目的のフォルダー構造を確認する関数を作成し、プロジェクト内でそれを構築します。これにより、空のフォルダーがプロキシによって Git に保持されるため、この問題が回避されます。
function check_page_custom_folder_structure () {
if (!is_dir(TEMPLATEPATH."/page-customs"))
mkdir(TEMPLATEPATH."/page-customs");
if (!is_dir(TEMPLATEPATH."/page-customs/css"))
mkdir(TEMPLATEPATH."/page-customs/css");
if (!is_dir(TEMPLATEPATH."/page-customs/js"))
mkdir(TEMPLATEPATH."/page-customs/js");
}
これは PHP で書かれていますが、ほとんどの言語が同じ機能をサポートしていると思います。また、フォルダーの作成はアプリケーションによって処理されるため、フォルダーは常にそこに存在します。
これはハックですが、面白いことにそれが機能します (Git 2.2.1)。@Teka が提案したものと似ていますが、覚えやすいです。
- サブモジュールを任意のリポジトリに追加します (
git submodule add path_to_repo
) - これにより、フォルダーとファイルが追加されます
.submodules
. 。変更をコミットします。 - 消去
.submodules
ファイルを作成して変更をコミットします。
これで、コミットがチェックアウトされたときに作成されるディレクトリが完成しました。ただし、興味深いのは、このファイルのツリー オブジェクトの内容を見ると、次の結果が得られることです。
致命的:有効なオブジェクト名B64338B90B4209263B50244D18278C099867193
ただし、Git の将来のバージョンでは動作しなくなる可能性があるため、使用はお勧めしません。これにより、リポジトリが破損したままになる可能性があります。
Git にディレクトリを追跡させる方法はないため、唯一の解決策は、Git に追跡させたいディレクトリ内にプレースホルダー ファイルを追加することです。
ファイルには名前を付け、必要なものを何でも含めることができますが、ほとんどの人は次のような空のファイルを使用します。 .gitkeep
(ただし、VCS に依存しないものを好む人もいます。 .keep
).
接頭辞 .
隠しファイルとしてマークします。
別のアイデアは、 README
ディレクトリが何に使用されるかを説明するファイル。
あなたはできません。これは、Git メンテナによる意図的な設計上の決定です。基本的に、Git のようなソース コード管理システムの目的はソース コードを管理することであり、空のディレクトリはソース コードではありません。Git はコンテンツ トラッカーともよく説明されますが、空のディレクトリはコンテンツではないため (実際にはその逆です)、追跡されません。
複数のセマンティック ディレクトリに大量の一時データを格納するフォルダーを追加する場合、1 つのアプローチは、次のようなものをルートの .gitignore... に追加することです。
/app/data/**/*.*
!/app/data/**/*.md
次に、説明的な README.md ファイル (または空のファイルでも構いません。ただし、 *.md
この場合) 各ディレクトリ内で、ディレクトリがすべてリポジトリの一部のままであることを確認しますが、ファイル (拡張子付き) は無視されたままになります。制限: .
ディレクトリ名には「」は使用できません。
これらのディレクトリをすべて xml/images ファイルなどで埋めて、その下にさらにディレクトリを追加できます。 /app/data/
時間の経過とともに、アプリに必要なストレージが増加します (README.md ファイルは、各ストレージ ディレクトリの正確な用途の説明を書き込む役割を果たします)。
さらに変更する必要はありません .gitignore
または新しいものを作成して分散化する .gitignore
新しいディレクトリごとに。おそらく最もスマートな解決策ではありませんが、gitignore 的には簡潔であり、私にとっては常に機能します。シンプルで素敵です!;)
争いにもう一つ選択肢が加わる。
ディレクトリを追加したいと仮定すると、 git
それに関連するあらゆる目的のために、 git
, 、空のままにする必要があり、その内容は決して追跡されません。 .gitignore
ここで何度も提案したように、うまくいきます。
前述したように、形式は次のとおりです。
*
!.gitignore
コマンドラインでこれを一気に行う方法が必要な場合は、 内部 追加したいディレクトリがある場合は、次を実行できます。
$ echo "*" > .gitignore && echo '!.gitignore' >> .gitignore && git add .gitignore
私自身、これを行うために使用するシェル スクリプトがあります。スクリプトに任意の名前を付けて、インクルード パスのどこかに追加するか、直接参照します。
#!/bin/bash
dir=''
if [ "$1" != "" ]; then
dir="$1/"
fi
echo "*" > $dir.gitignore && \
echo '!.gitignore' >> $dir.gitignore && \
git add $dir.gitignore
これにより、追加したいディレクトリ内から実行することも、最初で唯一のパラメータとしてディレクトリを参照することもできます。
$ ignore_dir ./some/directory
別のオプション(@GreenAsJadeによるコメントに応じて)は、空のフォルダーを追跡したい場合に、 5月 将来的には追跡されるファイルが含まれますが、現時点では空になるため、省略できます。 *
から .gitignore
ファイルして確認してください それ で。基本的に、このファイルは「無視しないでください」と言っているだけです。 自分" ですが、それ以外の場合、ディレクトリは空であり、追跡されます。
あなたの .gitignore
ファイルは次のようになります:
!.gitignore
これをチェックインすると、空ではあるが追跡されたディレクトリが作成され、後でファイルを追跡できるようになります。
ファイル内にその 1 行を残しておくことをお勧めする理由は、 .gitignore
目的。そうしないと、将来誰かがそれを削除しようと考えるかもしれません。行の上にコメントを入れていただけると助かります。
場合によっては、「実際の」空の既存のディレクトリを必要とする、不適切に書かれたライブラリやソフトウェアに対処しなければならないことがあります。シンプルなものを置く .gitignore
または .keep
壊れてバグが発生する可能性があります。このような場合には、次のことが役立つかもしれませんが、保証はありません...
まず必要なディレクトリを作成します。
mkdir empty
次に、壊れたシンボリック リンクをこのディレクトリに追加します (ただし、上記の使用例以外の場合は、 README
説明付き):
ln -s .this.directory empty/.keep
このディレクトリ内のファイルを無視するには、ルートに追加します。 .gitignore
:
echo "/empty" >> .gitignore
無視されたファイルを追加するには、パラメータを使用して強制的に追加します。
git add -f empty/.keep
コミット後、インデックス内に壊れたシンボリック リンクがあり、git がディレクトリを作成します。壊れたリンクは通常のファイルではなく、通常のファイルをポイントしていないため、いくつかの利点があります。したがって、これは質問の「(ファイルが含まれていない)」という部分にも当てはまりますが、意図ではなく意味としては、次のように思います。
find empty -type f
このディレクトリにはファイルが存在しないため、このコマンドは空の結果を示します。したがって、ディレクトリ内のすべてのファイルを取得するほとんどのアプリケーションでは、少なくとも「ファイルが存在する」または「読み取り可能」である場合には、このリンクが表示されません。一部のスクリプトでも、そこにファイルが見つかりません。
$ php -r "var_export(glob('empty/.*'));"
array (
0 => 'empty/.',
1 => 'empty/..',
)
ただし、このソリューションは特殊な状況でのみ使用することを強くお勧めします。 README
通常、空のディレクトリに置く方が良い解決策です。(そして、これが Windows ファイルシステムで機能するかどうかはわかりません...)
このコードを create_readme.php として保存し、実行できます。 PHP Git プロジェクトのルート ディレクトリからコードを取得します。
> php create_readme.php
README ファイルが空のすべてのディレクトリに追加され、それらのディレクトリがインデックスに追加されます。
<?php
$path = realpath('.');
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
foreach($objects as $name => $object){
if ( is_dir($name) && ! is_empty_folder($name) ){
echo "$name\n" ;
exec("touch ".$name."/"."README");
}
}
function is_empty_folder($folder) {
$files = opendir($folder);
while ($file = readdir($files)) {
if ($file != '.' && $file != '..')
return true; // Not empty
}
}
?>
それならそうする
git commit -m "message"
git push
時々、「コンテンツ」とみなされるファイルのみを含むフォルダーを持つリポジトリがあります。つまり、それらのファイルはバージョン管理を気にするファイルではないため、決してコミットすべきではありません。Git の .gitignore ファイルを使用すると、ディレクトリ全体を無視できます。ただし、フォルダーをリポジトリ内に置いたほうが有益な場合もあります。このニーズを満たすための優れたソリューションを次に示します。
私が過去に行ったことは、.gitignore ファイルをリポジトリのルートに配置し、次のようにフォルダーを除外することでした。
/app/some-folder-to-exclude
/another-folder-to-exclude/*
ただし、これらのフォルダーはリポジトリの一部にはなりません。そこに README ファイルのようなものを追加できます。ただし、README ファイルの処理を気にしないようにアプリケーションに指示する必要があります。
アプリがそこにある (空であっても) フォルダーに依存している場合は、単に .gitignore ファイルを問題のフォルダーに追加し、それを使用して次の 2 つの目的を達成できます。
フォルダー内にファイルがあることを Git に伝えると、Git はそのファイルをリポジトリに追加します。このファイル自体を除き、このフォルダーの内容を無視するように Git に指示します。空のディレクトリ内に配置する .gitignore ファイルは次のとおりです。
*
!.gitignore
最初の行 (*) は、このディレクトリ内のすべてを無視するように Git に指示します。2 行目は、.gitignore ファイルを無視しないように Git に指示します。このファイルをリポジトリに追加したいすべての空のフォルダーに詰め込むことができます。
これを行う簡単な方法は、 .gitkeep
(現時点では) 空にしておくディレクトリにファイルを追加します。
これを参照してください SOFの答え 詳細については、.gitignore ファイルを追加するという競合する規則 (ここでの多くの回答で述べられているように) を混乱させる人がいる理由も説明されています。