[解決済み] Git リポジトリ内で既存の Git サブモジュールを移動するにはどうすればよいですか?
質問
GitスーパープロジェクトのGitサブモジュールのディレクトリ名を変更したいのですが、どうすればいいですか?
例えば、以下のようなエントリーが、私の
.gitmodules
ファイルを作成します。
[submodule ".emacs.d/vimpulse"]
path = .emacs.d/vimpulse
url = git://gitorious.org/vimpulse/vimpulse.git
を移動させるには、何を入力すればよいのでしょうか?
.emacs.d/vimpulse
ディレクトリを
.emacs.d/vendor/vimpulse
を削除することなく(説明
ここで
と
こちら
) を追加して、再追加してください。
Git は、サブモジュールのタグに本当にパス全体を記述する必要があるのでしょうか?
[submodule ".emacs.d/vimpulse"]
または、サブプロジェクトの名前だけを保存することも可能ですか?
[submodule "vimpulse"]
解決方法は?
注意事項 コメントで述べたように、この回答は古いバージョンのgitで必要な手順について言及しています。Gitは現在、サブモジュールを移動するためのネイティブサポートを備えています。
<ブロッククオート
git 1.8.5からです。
git mv old/submod new/submod
は期待通りに動作し、すべての配管を行なってくれます。git 1.9.3 以降では、サブモジュールの移動に関する修正も含まれているので、そちらを使用したほうがよいでしょう。
このプロセスは、サブモジュールを削除する方法と似ています ( サブモジュールを削除するには? ):
-
編集
.gitmodules
でサブモジュールのパスを適当に変更し、インデックスにgit add .gitmodules
. -
必要であれば、サブモジュールの新しい場所の親ディレクトリを作成します (
mkdir -p new/parent
). -
旧ディレクトリから新ディレクトリにすべてのコンテンツを移動する(
mv -vi old/parent/submodule new/parent/submodule
). -
Gitがこのディレクトリを追跡していることを確認する (
git add new/parent
). -
古いディレクトリを削除するには
git rm --cached old/parent/submodule
. -
ディレクトリを移動する
.git/modules/old/parent/submodule
に、そのすべてのコンテンツを.git/modules/new/parent/submodule
. -
を編集します。
.git/modules/new/parent/config
ファイルの中で、ワークツリーのアイテムが新しい場所を指していることを確認してください。worktree = ../../../../../new/parent/module
. 通常、さらに2つの..
その場所のダイレクトパスにあるディレクトリより -
ファイルを編集する
new/parent/module/.git
その中のパスが、メインプロジェクト内の正しい新しい場所を指していることを確認してください。.git
フォルダーに格納されます。gitdir: ../../../.git/modules/new/parent/submodule
.git status
の出力は、その後、私の場合、このようになります。# On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: .gitmodules # renamed: old/parent/submodule -> new/parent/submodule #
-
最後に、変更をコミットします。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] 既存の、プッシュされていないコミットメッセージを修正するには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] Git リポジトリでのマージの衝突を解決するには?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】サブモジュールを削除する方法は?
-
[解決済み】ローカルの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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】git rev-parseは何をするのですか?
-
[解決済み】ファイルのアンリンクに失敗しました。もう一度試してみるべきですか?
-
[解決済み] あなたのブランチは 'origin/master' より 3 コミット進んでいます。
-
git commits with an error: 更新が拒否されました。現在のブランチの先端が、このブランチより後ろにあるためです。
-
[解決済み] 複数のgitコミットを元に戻すには?
-
[解決済み] GitHubに空のブランチを作成する
-
[解決済み] fatal: EOF が早い fatal: インデックスパックが失敗した
-
[解決済み] 短いGitバージョンのハッシュを取得する
-
[解決済み】サブモジュールを削除する方法は?
-
[解決済み] git サブモジュールの名前を変更する