[解決済み] git サブモジュールの新しいコミットを無視する
質問
背景
Linux で Git 1.8.1.1 を使用しています。リポジトリは以下のような感じです。
master
book
サブモジュールは以下のように作成されました。
$ cd /path/to/master
$ git submodule add https://[email protected]/user/repo.git book
は
book
サブモジュールはクリーンです。
$ cd /path/to/master/book/
$ git status
# On branch master
nothing to commit, working directory clean
問題点
一方、master では、book サブモジュールに対して "新規コミット" が存在することがわかります。
$ cd /path/to/master/
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: book (new commits)
#
no changes added to commit (use "git add" and/or "git commit -a")
Gitはサブモジュールディレクトリを完全に無視し、masterもきれいになるようにする必要があります。
$ cd /path/to/master/
$ git status
# On branch master
nothing to commit, working directory clean
失敗した試み1 - 汚い
ファイル内部
master/.gitmodules
は、以下のように、このように
答え
:
[submodule "book"]
path = book
url = https://[email protected]/user/repo.git
ignore = dirty
失敗した試み2 - 追跡されない
変更された
master/.gitmodules
を次のように、このように
答え
:
[submodule "book"]
path = book
url = https://[email protected]/user/repo.git
ignore = untracked
失敗した試み3 - showUntrackedFiles
編集
master/.git/config
を次のように、このように
答え
:
[status]
showUntrackedFiles = no
失敗した試行その4 - 無視
bookディレクトリをマスター無視ファイルに追加しました。
$ cd /path/to/master/
$ echo book > .gitignore
失敗例5 - クローン
以下のように、bookディレクトリをマスターに追加しました。
$ cd /path/to/master/
$ rm -rf book
$ git clone https://[email protected]/user/repo.git book
質問
どのようにすれば
book
サブモジュールは、独自のリポジトリディレクトリで
master
リポジトリにあるにもかかわらず、git が
book
サブモジュールを無視しますか?つまり、以下は表示されないはずです。
#
# modified: book (new commits)
#
を実行するときに、そのメッセージを表示しないようにするにはどうしたらよいでしょうか。
git status
を実行したときにこのメッセージを表示しないようにするにはどうしたらよいでしょうか?
に関する記事 git サブモジュールの落とし穴 という記事は、サブモジュールの使い方として不適切ではないでしょうか?
どのように解決するのですか?
スーパーレポで追跡する必要のない別のリポジトリを含めるには、次の方法を試してください。
$ cd /path/to/master/
$ rm -rf book
$ git clone https://[email protected]/user/repo.git book
$ git add book
$ echo "book" >> .gitignore
次にコミットします。
リンク先の git submodule pitfalls の記事で述べられています。 :
... 親とサブモジュールの間の唯一の結びつきは、親のコミットに保存されているサブモジュールのチェックアウトされた SHA の記録値 [のみ] です。
つまり、サブモジュールはチェックアウトされたブランチやタグによってではなく、常に特定のコミットによって保存されます。そのコミット (SHA) は通常のテキストファイルのようにスーパーレポ (サブモジュールを含むもの) に保存されます (もちろん、その参照としてマーキングされます)。
別のコミットをチェックアウトするとき
をチェックアウトすると、サブモジュール内の
をチェックアウトしたり、その中で新しいコミットをすると、スーパーレポはチェックアウトされたSHAが変更されたことを確認します。そのときに
modified (new commits)
の行が
git status
.
それを解消するためには、どちらかというと
-
git submodule update
を実行すると、サブモジュールは現在スーパーレポに保存されているコミットにリセットされます (詳しくは を参照してください。git submodule
のマニュアルページ または -
git add book && git commit
で、新しいSHAをスーパーレポに保存します。
コメントで言及されたように、放棄することを検討してください。
book
サブモジュールを放棄することを検討してください。スーパーレポの一部としてその状態を追跡することが必要でない場合、スーパーレポの内部でそれをクローンしてください。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Gitを使って最後のXコミットをまとめる
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
-
[解決済み】サブモジュールを削除する方法は?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
gitlabの紹介と使い方
-
Git Bash报错发生: メールアドレスが自動検出されない (「Anita@newton.(none)」を取得)的解决方法。
-
[解決済み】Git リポジトリのサブモジュールを一覧表示する
-
[解決済み] 別のgitレポの中でgitレポを管理する
-
[解決済み] Git: 'modified content' /dirty サブモジュールのエントリを status や diff などで表示させないようにできますか?
-
[解決済み] キーフィンガープリントが原因でHerokuにプッシュできない
-
[解決済み] 新サーバーへのGitプッシュ/クローン
-
[解決済み] Git のリモート HEAD を master 以外に指定するように変更する
-
[解決済み] Git の 'master' ブランチを 'release' にリネームするには?
-
[解決済み] .gitignoreにあるgitサブモジュールを無視するか、それとも自分のレポにコミットするか?