1. ホーム
  2. git

[解決済み] Git リポジトリ内で既存の Git サブモジュールを移動するにはどうすればよいですか?

2022-03-22 02:31:14

質問

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 以降では、サブモジュールの移動に関する修正も含まれているので、そちらを使用したほうがよいでしょう。


このプロセスは、サブモジュールを削除する方法と似ています ( サブモジュールを削除するには? ):

  1. 編集 .gitmodules でサブモジュールのパスを適当に変更し、インデックスに git add .gitmodules .
  2. 必要であれば、サブモジュールの新しい場所の親ディレクトリを作成します ( mkdir -p new/parent ).
  3. 旧ディレクトリから新ディレクトリにすべてのコンテンツを移動する( mv -vi old/parent/submodule new/parent/submodule ).
  4. Gitがこのディレクトリを追跡していることを確認する ( git add new/parent ).
  5. 古いディレクトリを削除するには git rm --cached old/parent/submodule .
  6. ディレクトリを移動する .git/modules/old/parent/submodule に、そのすべてのコンテンツを .git/modules/new/parent/submodule .
  7. を編集します。 .git/modules/new/parent/config ファイルの中で、ワークツリーのアイテムが新しい場所を指していることを確認してください。 worktree = ../../../../../new/parent/module . 通常、さらに2つの .. その場所のダイレクトパスにあるディレクトリより
  8. ファイルを編集する 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
    #
    
    
  9. 最後に、変更をコミットします。