Gitのサブモジュールで追跡されていないコンテンツを取り除くことはできないようです。 git status
を実行すると、次の結果が得られます。
#ブランチマスター上 #コミット用にステージされていない変更: #(「git add ...」を使用してコミットする内容を更新します) #( 「git checkout-...」を使用して、作業ディレクトリの変更を破棄します) #(サブモジュールの追跡されていない、または変更されたコンテンツをコミットまたは破棄します) # #modified:bundle/snipmate(未追跡コンテンツ) #変更:bundle/surround(未追跡コンテンツ) #変更:bundle/trailing-whitespace(未追跡コンテンツ) #変更:bundle/zencoding(追跡されていないコンテンツ) # コミットに変更が追加されていません(「git add」または「git commit -a」を使用)
--ignore-submodules
パラメーターを追加すると、これらのメッセージが非表示になります。しかし、より適切な、コアっぽい方法で、この汚れを取り除く方法があるのだろうか。
Gitステータスは追跡されていないコンテンツを報告するため、クリーンステータスを取得する実際の方法は、これらのサブモジュールのそれぞれにアクセスして、
.gitignore
で追跡されていないコンテンツを参照します。.git/info/exclude
に追加できます。または ezraspectre の answer (upvoted)で説明されているように、サブモジュールの仕様にダーティを追加します。
git config -f .gitmodules submodule.<path>.ignore untracked
またはglobal.gitignore
ファイル(多くの場合~/.gitignore-global
)を追加します。たとえば、.DS_Store
または私の場合はCarthage/Build
が MariánČerný in the comments によって報告されます。 .gitginore
manページ を参照してください:
ユーザーがすべての状況でGitに無視させるパターン(たとえば、選択したユーザーのエディターによって生成されたバックアップまたは一時ファイル)は、一般に
core.excludesFile
ユーザーの~/.gitconfig
。デフォルト値は$XDG_CONFIG_HOME/git/ignore
です。$XDG_CONFIG_HOME
が設定されていないか空の場合、代わりに$HOME/.config/git/ignore
が使用されます。
私はこれを見つけました ブログ投稿 全体的に機能します。 ignore = dirty
オプションを.gitmodules
ファイルの各エントリに追加することにより。
[submodule "zen-coding-gedit3"]
path = zen-coding-gedit3
url = git://github.com/leafac/zen-coding-gedit3.git
ignore = dirty
また、各サブモジュールdirに移動して、個別のgitとして機能することもできます。例えば:
cd my/project/submodule
git status
.../変更されたファイルのリストを取得 /
git add . //to add all of them to commit into submodule
git commit -m "message to your submodule repo"
リモートサブモジュールリポジトリを更新することもできます
git submodule update
結局
これは、サブモジュールブランチのdetached HEAD
が原因です。サブモジュールパス(例:./bundle/snipmate
)、次にgit checkout master
に移動します。
これが役立つことを願っています:)
昨日、12のサブモジュールに近いプロジェクトでこの問題に悩まされました。
git status
は出力を表示していました。
# On branch master
# Changes not staged for commit:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
# (commit or discard the untracked or modified content in submodules)
#
# modified: proj1 (untracked content)
# modified: proj1 (modified content, untracked content)
# ...
未追跡のコンテンツエラーを解決するには、*.pyc
を使用して、すべてのサブモジュール(Pythonで生成された*.pyo
、.gitignore
ファイル)から未追跡ファイルを削除する必要がありました。
もう1つを解決するには、各サブモジュールを更新するgit submodule update
を実行する必要がありました。
これは私にとってはうまくいきました:
git update-index --skip-worktree
パス名が機能しない場合は、ファイル名を試してください。これがあなたにとってもうまくいったかどうか教えてください。
さようなら!
SourceTree を使用することを好むため、解決策は、すべての未追跡ファイルのリストを表示するSourceTreeでサブモジュールリポジトリを開くことでした。次に、それらすべてをグループ選択し、「削除」を使用しました。
追跡されていないすべてのファイルが実際には必要ないことがわかっていたので、これを行うことができました。
これはおそらく、特定のフォルダー内に別の.git [隠しフォルダー]がある場合に発生します。
変更:./../ ..(変更されたコンテンツ、追跡されていないコンテンツ)
サブディレクトリにこの.gitフォルダーが含まれていないことを確認してください。
その場合は、サブディレクトリから.gitフォルダーを手動で削除することで問題を解決できます。
私の状況では、ZF2環境の新しいモジュールの開始点としてモジュールを複製します。これにより、独自の.gitフォルダーがディレクトリに配置されます。
この場合の解決策は、.gitフォルダーを削除することです(表示するには隠しファイルを表示する必要があります)。