web-dev-qa-db-ja.com

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

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

3790
Laurie Young

ディレクトリを(リポジトリ内で)(ほぼ)空のままにするもう1つの方法は、次の4行を含む.gitignoreファイルをそのディレクトリ内に作成することです。

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

そうすると、m104の solution のように正しい順序で並べる必要はありません。

これはまた、あなたがgitステータスをしたときにそのディレクトリ内のファイルが "未追跡"として表示されないという利点も与えます。

@GreenAsJade のコメントを永続的にする:

この解決策がまさにその質問が求めていたものであることは注目に値すると思います。このソリューションはディレクトリが空のままであることを保証します。 「ここにファイルをチェックインしたくない」と書かれています。 「ここにチェックインするファイルはまだありませんが、ここにディレクトリが必要です。ファイルは後で表示される可能性があります」。

3691
Jamie Flournoy

できません。 Git FAQ を参照してください。

現在、gitインデックス(ステージング領域)の設計ではファイルの一覧表示のみが許可されており、空のディレクトリを許可するように変更できるほど十分な権限を持っている人はいません。

ディレクトリはその中にファイルを追加するときに自動的に追加されます。つまり、ディレクトリをリポジトリに追加する必要はなく、独自に追跡することもありません。

あなたは "git add <dir>"と言うことができ、そこにファイルが追加されます。

チェックアウトにディレクトリが本当に必要な場合は、その中にファイルを作成する必要があります。 .gitignoreはこの目的にはうまくいきます。空のままにしておくことも、ディレクトリに表示されるはずのファイルの名前を入力することもできます。

1023
Andy Lester

ディレクトリに.gitkeepという名前の空のファイルを作成し、それを追加します。

645
Artur79

ディレクトリにREADMEファイルを置くことができます。それ以外の場合はリポジトリに空のディレクトリを作成します。

392
John Mee
touch .keep

Linuxでは、これは.keepという名前の空のファイルを作成します。前者はGitにとらわれず、後者はGitに固有のものであるため、この名前は.gitkeepよりも優先されます。第二に、他のユーザーが指摘したように、Git自身が使用するファイルとディレクトリのために.git接頭辞規約を予約するべきです。

あるいは、別の answer に記載されているように、代わりに READMEまたはREADME.mdファイル をディレクトリに含めることができます。

もちろん、これはファイルの存在があなたのアプリケーションを壊さないことを要求します。

292
A-B-B

空のバージョン管理フォルダーが必要な理由

まず最初に:

空のディレクトリは、Gitバージョン管理システムの下のツリーの一部にすることはできません

単に追跡されません。しかし、空のディレクトリを「バージョン管理」することが意味のあるシナリオがあります。例えば:

  • 事前定義されたフォルダー構造を足場化し、リポジトリのすべてのユーザー/貢献者が利用できるようにします。または、上記の特殊なケースとして、cache/またはlogs/ディレクトリなどの一時ファイルのフォルダーを作成します、フォルダを提供したいが、.gitignoreその内容
  • 上記に関連して、いくつかのプロジェクトはいくつかのフォルダーなしでは動作しません(これはよく設計されていないプロジェクトのヒントですが、実際のシナリオでは頻繁に発生する可能性があります。たとえば、許可の問題に対処する必要があります)。

推奨される回避策

多くのユーザーが提案します:

  1. ディレクトリを空にしないために、READMEファイルまたは他のファイルにコンテンツを配置する、または
  2. .gitignoreファイルを作成して、最後にアプローチ#1と同じ目的を果たす一種の「逆論理」(つまり、すべてのファイルを含める)を作成します。

両方のソリューションは確実に機能しますが、Gitのバージョン管理に対する意味のあるアプローチと矛盾していることがわかります。

  • なぜあなたはあなたのプロジェクトに本当にしたくないかもしれない偽のファイルやREADMEを置くことになっていますか?
  • .gitignoreを使用して、(keepingファイル)を行う理由は、(exclusingファイル)、それは可能ですが?

.gitkeepアプローチ

バージョン管理システムにフォルダを強制的に存在させるには、.gitkeepというemptyファイルを使用します。

それほど大きな違いではないように見えるかもしれませんが:

  • フォルダーを保持するというsingle目的を持つファイルを使用します。あなたがそこに置きたくない情報をそこに置くことはありません。

    たとえば、フォルダを保持する言い訳としてではなく、有用な情報を備えたREADMEとしてREADMEを使用する必要があります。

    懸念の分離は常に良いことであり、.gitignoreを追加して不要なファイルを無視することもできます。

  • .gitkeepという名前を付けると、ファイル名自体から(および他の開発者に対しても非常に明確かつ簡単になります。これは、共有プロジェクトと、 Gitリポジトリ)このファイルは

    • コードに関係のないファイル(先頭のドットと名前のため)
    • 明らかにGitに関連するファイル
    • その目的(keep)は、ignore

採択

LaravelAngular-CLI のような非常に重要なフレームワークで採用されている.gitkeepアプローチを見てきました。

276
Cranio

他の回答で説明されているように、Gitはそのステージング領域で空のディレクトリを表すことができません。 ( Git FAQ を参照してください。)ただし、.gitignoreファイルだけが含まれているディレクトリが十分空の場合は、次の方法でのみ空のディレクトリに.gitignoreファイルを作成できます。

find . -type d -empty -exec touch {}/.gitignore \;
121
mjs

Andy Lesterは正しいですが、あなたのディレクトリが empty emptyでなく、空である必要がある場合は、回避策として空の.gitignoreファイルをそこに入れることができます。

余談ですが、これは実装の問題であり、基本的なGitストレージ設計の問題ではありません。 Gitメーリングリストで何度も述べられてきたように、これが実装されていないのは、パッチを提出するのに十分な世話をしている人がいないためです。

61

Ruby on Rails logフォルダの作成方法:

mkdir log && touch log/.gitkeep && git add log/.gitkeep

これでログディレクトリがツリーに含まれます。デプロイするときにとても便利なので、ログディレクトリを作るためのルーチンを書く必要はありません。

ログファイルは、

echo log/dev.log >> .gitignore

しかし、あなたはおそらくそれを知っていました。

30
Thomas E

Gitは空のディレクトリを追跡しません。さらなる説明は Git FAQ を参照してください。推奨される回避策は、空のディレクトリに.gitignoreファイルを配置することです。 .gitignoreはUnixの慣習では「隠されている」ので、私はその解決策が好きではありません。なぜディレクトリが空なのかについての説明もありません。

空のディレクトリにREADMEファイルを配置して、そのディレクトリが空である理由とGitで追跡する必要がある理由を説明することをお勧めします。 Gitに関する限り、READMEファイルが配置されていれば、ディレクトリは空ではなくなります。

本当の質問は、なぜあなたはgitの空のディレクトリが必要なのですか?通常、コンパイル/実行の前に空のディレクトリを作成することができるある種のビルドスクリプトがあります。そうでなければそれから1を作りなさい。これは、空のディレクトリを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

あるいは、 every READMEファイルを無視しないようにすることもできます。

path/to/emptydir/*
path/to/otheremptydir/*
!README.emptydir

すべてのREADMEがすでに作成された後にそれらを一覧表示するには、次の手順を実行します。

find -name README.emptydir
27
lesmana

警告:このTweakは実際にはうまく機能しません。ご不便をおかけして申し訳ありません。

下記の元の投稿:

Gitの内部で遊んでいる間に解決策を見つけました!

  1. あなたが自分のリポジトリにいるとしましょう。
  2. 空のディレクトリを作成してください。

    $ mkdir path/to/empty-folder
    
  3. 配管コマンドと空のツリーを使用してインデックスに追加します SHA-1

    $ git update-index --index-info
    040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904    path/to/empty-folder
    

    コマンドを入力してから2行目を入力します。押す Enter その後 Ctrl + D 入力を終了します。注:形式はモード[SPACE]type[SPACE] SHA-1ハッシュ[ TAB]パス(タブは重要です。回答のフォーマットでは保持されません)。

  4. それでおしまい!空のフォルダはインデックスにあります。コミットするだけです。

この解決方法は短く、見かけ上はうまく機能します(EDIT!を参照)、しかし覚えておくのはそれほど簡単ではありません...

空のツリーSHA-1は、新しい空のGitリポジトリcdを作成し、空のツリーSHA-1を出力するgit write-treeを発行することで見つけることができます。

編集:

私はそれを見つけてからこのソリューションを使ってきました。モジュールがどこにも定義されていないことを除けば、サブモジュールの作成とまったく同じように機能するようです。これはgit submodule init|updateの発行時にエラーになります。問題は、git update-index040000 tree部分を160000 commitに書き換えることです。

さらに、そのパスの下に置かれたファイルは、他のリポジトリに属していると思われるため、Gitに気付かれることは決してありません。見過ごされがちなので、これは厄介です。

しかし、あなたのリポジトリでまだGitサブモジュールを使っていない(そして使わない)なら、 "empty"フォルダは空のままにしておくか、Gitにその存在を知らせてその内容を無視させたいなら、この微調整。サブモジュールで通常のやり方をすることはこのTweakより多くのステップを踏みます。

26
ofavre

空のディレクトリを追加すると、そのディレクトリが存在することを想定したスクリプトがあるため(生成されたバイナリのターゲットになる可能性があるため)、最小の抵抗のパスになるようです。別の方法は スクリプトを修正して必要に応じてディレクトリを作成することです

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"ファイルも削除せずにコンテンツを削除するという複雑な作業が少しあります。

Rootの.gitignoreに以下を追加することで、生成されたファイルをすべて無視することができます。

.generated
20
nobar

tmp という名前の空のディレクトリが必要だとしましょう。

$ mkdir tmp
$ touch tmp/.gitignore
$ git add tmp
$ echo '*' > tmp/.gitignore
$ git commit -m 'Empty directory' tmp

言い換えると、Gitにそれを無視するように指示する前に(そして空のディレクトリにある他のすべてのものに)、.gitignoreファイルをインデックスに追加する必要があります。

20
m104

私は空のディレクトリでも問題に直面しています。プレースホルダファイルを使用することの問題は、それらが必要でなくなった場合、それらを作成して削除する必要があることです(後でサブディレクトリまたはファイルが追加されたため)傾向があります。

そのため、このようなプレースホルダファイルの作成/削除を自動的に管理できるオープンソースツールを作成することにしました。これは.NETプラットフォーム用に書かれており、Mono(Linux for .NET)およびWindowsで動作します。

ちょっと見てください: http://code.google.com/p/markemptydirs

14
Jonny Dee

あなたはできませんし、残念ながらできないでしょう。これはLinus Torvald自身による決定です。彼は私たちにとって何が良いのかを知っています。

私が一度読んだどこかにそこに外傷があります。

Re:Empty directories ..が見つかりましたが、別のものがあるかもしれません。

あなたは回避策を持って生きなければなりません...残念ながら。

12
user2334883

.gitignoreファイルを追加するとき、その中に任意の量のコンテンツを入れる場合(Gitに無視させたい)、無視されないファイルを追加しないようにするためにアスタリスク*を1行追加することをお勧めします。誤って内容。

10
Michael Johnson

@ Artur79と@mjsの回答が気に入っているので、両方を組み合わせて使用​​し、それを私たちのプロジェクトの標準にしました。

find . -type d -empty -exec touch {}/.gitkeep \;

しかし、私たちの開発者のほんの一握りだけがMacまたはLinuxで作業しています。多くのことがWindows上で動作しますが、私はそこで同じことを達成するための同等の単純なワンライナーを見つけることができませんでした。他の理由で Cygwin がインストールされているほど幸運だった人もいますが、Cygwinを処方するだけではやり過ぎです。

より良い解決策のために編集しなさい

ですから、私たちの開発者のほとんどはすでに Ant をインストールしているので、最初に考えたのはAntビルドファイルをまとめてプラットフォームとは無関係にこれを実現することです。これはまだ見つかりません ここ

しかし 、後でこれを小さなユーティリティコマンドにする方が良いと思うので、Pythonを使って再作成してPyPIに公開しました here 。あなたは単に実行することによってそれをインストールすることができます。

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.

私はあなたがそれが役に立つと思うことを願っています。

10
Mig82

Jamie Flournoyの解決策 はうまくいきます。これは.htaccessを保持するための少し強化されたバージョンです:

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

このソリューションでは、/log/tmp/cacheなどの空のフォルダーをコミットでき、そのフォルダーは空のままになります。

8
Roman

すでに述べたように、空のディレクトリを追加することはできませんが、空の.gitignoreファイルをすべてのディレクトリに追加する1つのライナーがあります。

Ruby -e 'require "fileutils" ; Dir.glob(["target_directory","target_directory/**"]).each { |f| FileUtils.touch(File.join(f, ".gitignore")) if File.directory?(f) }'

簡単にアクセスできるように、これをRakefileに貼り付けました。

8
Peter Hoeg

これがハックですが、うまくいくのは面白いことです(Git 2.2.1)。 @Tekaが提案したものと似ていますが、覚えやすいです:

  • 任意のリポジトリにサブモジュールを追加する(git submodule add path_to_repo
  • これでフォルダとファイル.submodulesが追加されます。変更を確定します。
  • .submodulesファイルを削除して変更を確定します。

これで、コミットがチェックアウトされたときに作成されるディレクトリができました。興味深いことに、このファイルのツリーオブジェクトの内容を見ると以下のようになります。

fatal:無効なオブジェクト名です。b64338b90b4209263b50244d18278c0999867193

Gitの将来のバージョンでは動作しなくなる可能性があるので、私はそれを使用することをお勧めしません。リポジトリが破損している可能性があります。

Gitにディレクトリを追跡させる方法はないので、唯一の解決策はGitに追跡させたいプレースホルダファイルをディレクトリ内に追加することです。

ファイルには任意の名前を付けて好きなものを含めることができますが、ほとんどの人は.gitkeepという名前の空のファイルを使用します(ただし、VCSにとらわれない.keepを好む人もいます)。

接頭辞.は隠しファイルとしてマークします。

もう1つのアイデアは、ディレクトリの用途を説明するREADMEファイルを追加することです。

7
Zaz

私はいつも自分の望むフォルダ構造をチェックしてプロジェクト内で自分のためにそれを構築するための関数を構築します。空のフォルダはプロキシによって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にありますが、ほとんどの言語が同じ機能をサポートしていると確信しています、そしてフォルダーの作成はアプリケーションによって処理されるので、フォルダーは常にそこにあるでしょう。

7
Mild Fuzz

複数のセマンティックディレクトリに大量の一時的なデータを格納するフォルダを追加したい場合は、ルートの.gitignoreに次のようなものを追加するという方法があります。

/app/data/**/*.* !/app/data/**/*.md

それから、ディレクトリがすべてリポジトリの一部であることを確実にするために、それぞれのディレクトリに記述的なREADME.mdファイル(またはこの場合は*.mdのように一意にそれらをターゲットにできる限り空のファイル)をコミットできます。ファイル(拡張子付き)は無視されます。制限:.はディレクトリ名に使用できません。

あなたのアプリのために必要なストレージが増えるにつれて、これらすべてのディレクトリをxml/imagesファイルなどでいっぱいにして/app/data/の下にディレクトリを追加することができます(README.mdファイルはそれぞれのストレージディレクトリの説明正確に)。

新しいディレクトリごとに新しい.gitignoreを作成して、.gitignoreをさらに変更したり、分散化したりする必要はありません。おそらく最も賢い解決策ではありませんが、簡潔なgitignore-賢明で常に私のために働きます。素敵でシンプル! ;)

enter image description here

5
ajmedway

できません。これはGitメンテナによる意図的な設計上の決定です。基本的に、Gitのようなソースコード管理システムの目的はソースコードを管理することであり、空のディレクトリはソースコードではありません。 Gitはしばしばコンテンツトラッカーとも呼ばれています。また、空のディレクトリはコンテンツではありません(実際はまったく反対)ので、追跡されません。

5
Jörg W Mittag

争いにもう一つの選択肢を加える。

gitに関連するすべての目的のために、空のままにしてその内容を追跡しないようにするディレクトリをgitに追加したいとすると、ここで何度も提案されている.gitignoreがうまくいくでしょう。

前述のとおり、形式は次のとおりです。

*
!.gitignore

さて、あなたがコマンドラインでこれをする方法が欲しいなら、すぐに、あなたが追加したいディレクトリにinsideを実行することができます:

$ 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

もう1つのオプション(@GreenAsJadeによるコメントに応えて)、将来追跡されるファイルを含む{MAY}という空のフォルダを追跡したいが、今のところ空になる場合は、*を省略できます。 .gitignoreファイルから、that inをチェックしてください。基本的に、すべてのファイルは「meを無視しないでください」と言っていますが、それ以外の場合、ディレクトリは空で追跡されます。

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

!.gitignore

それで、それをチェックインすれば、あとでファイルを追跡できる空の、まだ追跡されているディレクトリがあります。

ファイル内のその1行を保持することをお勧めするのは、それが.gitignoreの目的を与えるからです。さもなければ、誰かがそれを削除しようと思うかもしれません。あなたがその行の上にコメントを入れるなら、それは役に立つかもしれません。

4
Mike

時々、あなたは「本物の」空の既存のディレクトリを必要とする、不適切に書かれたライブラリやソフトウェアを扱わなければなりません。単純な.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のファイルシステムで動作するかどうかはわかりません...)

4
Trendfischer

これを行う簡単な方法は、.gitkeepファイルを(現在)空のままにしたいディレクトリに追加することです。

詳細については SOF answer を参照してください。これは、.gitignoreファイルを追加するという競合する慣習(ここの多くの回答に記載されている)が混乱を招く理由も説明しています。

3
arcseldon

「コンテンツ」と見なされるファイルのみを含むフォルダーがあるリポジトリがある場合があります。つまり、それらはバージョン管理されることを気にするファイルではないため、コミットされるべきではありません。 Gitの.gitignoreファイルを使えば、ディレクトリ全体を無視することができます。しかし、レポジトリにフォルダを置くことが有益な場合があります。これは、このニーズを達成するための優れた解決策です。

私が過去にやったことは、レポジトリのルートに.gitignoreファイルを置いて、フォルダを除外することです。

/app/some-folder-to-exclude
/another-folder-to-exclude/*

ただし、これらのフォルダはリポジトリの一部にはなりません。そこにREADMEファイルのようなものを追加することができます。しかしその場合は、READMEファイルの処理を心配しないようにアプリケーションに指示する必要があります。

アプリケーションがそこにあるフォルダに依存している場合(空であっても)、問題のフォルダに.gitignoreファイルを追加して、それを使用して2つの目的を達成することができます。

Gitにフォルダ内にファイルがあることを伝えます。これによりGitはリポジトリにファイルを追加します。このファイル自体を除いた、このフォルダの内容を無視するようにGitに指示します。これは空のディレクトリの中に置くための.gitignoreファイルです:

*
!.gitignore

最初の行(*)はGitにこのディレクトリの全てを無視するように伝えます。 2行目は、Gitに.gitignoreファイルを無視しないように指示します。リポジトリに追加したいすべての空のフォルダにこのファイルを詰め込むことができます。

2
Rahul Sinha

このコードをcreate_readme.phpとして保存し、Gitプロジェクトのルートディレクトリから _ php _ コードを実行します。

> 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
2
user665190

多くの人がすでにこの質問に答えています。ここにPowerShellバージョンを追加するだけです。

ディレクトリ内のすべての空のフォルダーを見つける

そこに空の.gitkeepファイルを追加します

Get-ChildItem 'Path to your Folder' -Recurse -Directory | Where-Object {[System.IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | ForEach-Object { New-Item ($_.FullName + "\.gitkeep") -ItemType file}
0
Hainan.Z