2016-10-20 8 views
4
git ls-files 

もサブモジュールのリストです。でサブモジュールを除いてGitによって追跡されるすべてのファイルをリストする方法?

List submodules in a git repositoryRemove Lines from File which appear in another File私が行うことができます。

git ls-files | grep -Fxvf <(git submodule status | cut -d' ' -f3) 

は、いくつかのgitコマンド/フラグを使用して短い方法はありますか?

+1

おそらく、これらのサブモジュールには親gitリポジトリにツリーエントリが含まれている可能性があります。 'git ls-files'によって表示されることは全く妥当と思われます。 'git ls-files'に' --no-submodules'フラグを実装し、 'git'にパッチを提出することをお勧めします。彼らはちょうどそれを取るかもしれない。 – larsks

答えて

1

.gitmodulesファイルを直接解析することをお勧めします。一般に、より安全で、より速くgit submodule statusよりも高速です。

git ls-files | grep -Fxvf <(git config --file .gitmodules --name-only --get-regexp path | cut -d '.' -f2-) 

あるいは、ファイルがあれば正規表現がそのように設計されているとして直接解析することができる: - このファイルは、すべての解析エッジケースが適切に処理されることを確実にするためにgit configを使用して解析することができるなど空白、コメント、書式

git ls-files | grep -Fxvf <(grep "^\s*\[submodule " .gitmodules | cut -d '"' -f2) 

git submodule statusはそれが困難正しくcutを経由して解析することになり、出力形式を持っていること:ということは、それが#を介して表彰されているサブモジュールとは一致しません。二つの主な欠点は以下のとおりです。

  • モジュールが初期化されているかいない

  • ファイル名は、タブ\tで区切られていない、そしてそれが最後ではないされている場合、ファイル名のフィールドがに変わります行にあるものなので、スペースを含むファイル名は正しく処理できません。

関連する問題