web-dev-qa-db-ja.com

Gitサブモジュールの追跡されていないステータスを取り除く方法は?

Gitのサブモジュールで追跡されていないコンテンツを取り除くことはできないようです。 git statusを実行すると、次の結果が得られます。

#ブランチマスター上
#コミット用にステージされていない変更:
#(「git add ...」を使用してコミットする内容を更新します)
#( 「git checkout-...」を使用して、作業ディレクトリの変更を破棄します)
#(サブモジュールの追跡されていない、または変更されたコンテンツをコミットまたは破棄します)
#
#modified:bundle/snipmate(未追跡コンテンツ)
#変更:bundle/surround(未追跡コンテンツ)
#変更:bundle/trailing-whitespace(未追跡コンテンツ)
#変更:bundle/zencoding(追跡されていないコンテンツ)
#
コミットに変更が追加されていません(「git add」または「git commit -a」を使用)

--ignore-submodulesパラメーターを追加すると、これらのメッセージが非表示になります。しかし、より適切な、コアっぽい方法で、この汚れを取り除く方法があるのだろうか。

135
Tomer Lichtash

Gitステータスは追跡されていないコンテンツを報告するため、クリーンステータスを取得する実際の方法は、これらのサブモジュールのそれぞれにアクセスして、

  • 追跡されていないコンテンツを追加してコミットします。
  • または、各モジュールに固有の.gitignoreで追跡されていないコンテンツを参照します。
  • または、 peci1 レポート コメント内 のように、同じ無視されたコンテンツをサブモジュールの.git/info/excludeに追加できます。
  • または ezraspectreanswer (upvoted)で説明されているように、サブモジュールの仕様にダーティを追加します。

    git config -f .gitmodules submodule.<path>.ignore untracked
    
  • またはglobal.gitignoreファイル(多くの場合~/.gitignore-global)を追加します。たとえば、.DS_Storeまたは私の場合はCarthage/BuildMariánČerný in the comments によって報告されます。 .gitginore manページ を参照してください:

ユーザーがすべての状況でGitに無視させるパターン(たとえば、選択したユーザーのエディターによって生成されたバックアップまたは一時ファイル)は、一般にcore.excludesFileユーザーの~/.gitconfig。デフォルト値は$XDG_CONFIG_HOME/git/ignoreです。 $XDG_CONFIG_HOMEが設定されていないか空の場合、代わりに$HOME/.config/git/ignoreが使用されます。

83
VonC

私はこれを見つけました ブログ投稿 全体的に機能します。 ignore = dirtyオプションを.gitmodulesファイルの各エントリに追加することにより。

[submodule "zen-coding-gedit3"]
    path = zen-coding-gedit3
    url = git://github.com/leafac/zen-coding-gedit3.git
    ignore = dirty
134
ezraspectre

また、各サブモジュール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

結局

10
Ricardo Martins

これは、サブモジュールブランチのdetached HEADが原因です。サブモジュールパス(例:./bundle/snipmate)、次にgit checkout masterに移動します。

これが役立つことを願っています:)

3
Browny Lin

昨日、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を実行する必要がありました。

1
mu 無

これは私にとってはうまくいきました:

git update-index --skip-worktree

パス名が機能しない場合は、ファイル名を試してください。これがあなたにとってもうまくいったかどうか教えてください。

さようなら!

0
DarkCrazy

SourceTree を使用することを好むため、解決策は、すべての未追跡ファイルのリストを表示するSourceTreeでサブモジュールリポジトリを開くことでした。次に、それらすべてをグループ選択し、「削除」を使用しました。

追跡されていないすべてのファイルが実際には必要ないことがわかっていたので、これを行うことができました。

0
Glenn Lawrence

これはおそらく、特定のフォルダー内に別の.git [隠しフォルダー]がある場合に発生します。

変更:./../ ..(変更されたコンテンツ、追跡されていないコンテンツ)

サブディレクトリにこの.gitフォルダーが含まれていないことを確認してください。

その場合は、サブディレクトリから.gitフォルダーを手動で削除することで問題を解決できます。

0

私の状況では、ZF2環境の新しいモジュールの開始点としてモジュールを複製します。これにより、独自の.gitフォルダーがディレクトリに配置されます。

この場合の解決策は、.gitフォルダーを削除することです(表示するには隠しファイルを表示する必要があります)。

0
HappyCoder