Git リポジトリ内で既存の Git サブモジュールを移動するにはどうすればよいですか? 質問する

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"]

ベストアンサー1

Gitの新しいバージョン

Git はサブモジュールの移動をネイティブでサポートするようになりました。

git 1.8.5 以降はgit mv old/submod new/submod期待通りに動作し、すべての配管作業を自動的に行います。サブモジュールの移動に関する修正が含まれているため、git 1.9.3 以降を使用することをお勧めします。

gitの古いバージョン

コメントで述べたように、この回答は古いバージョンの git で必要な手順について言及しています。

このプロセスはサブモジュールを削除する方法と似ています(サブモジュールを削除するにはどうすればよいですか?):

  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/module2 つあるはずです。..

  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. 最後に、変更をコミットします。

おすすめ記事