Gitサブモジュールディレクトリの名前を変更する簡単な方法はありますか( 削除 itの動作全体を行って、新しい宛先名で再追加する以外)。
そして、私たちがそれに取り組んでいる間に、なぜ親ディレクトリで次のことができないのですか:git mv old-submodule-name new-submodule-name
次のワークフローが機能していることがわかりました:
mv oldpath newpath
git rm oldpath
git add newpath
git submodule sync
注:このアプローチでは、GITの2018バージョンでインデックスと.gitmodulesが適切に更新されません。
Git1.8.5(2013年10月)はプロセスを簡素化する必要があります 。単純に:
_git mv A B
_
「_
git mv A B
_」、サブモジュールA
を移動すると、その作業ツリーをに再配置し、_.gitmodules
_ファイルのパスを調整するように指示されました。
詳しくは commit 0656781fadca1 :
現在、サブモジュールで「_
git mv
_」を使用すると、サブプロジェクトの作業ツリーがスーパープロジェクトの作業ツリーに移動します。ただし、_.gitmodules
_のサブモジュールのパス設定は変更されず、作業ツリーと矛盾し、適切な_path -> name mapping
_(status
やdiff
など)に依存するgitコマンドが奇妙な動作をするようになりました。サブモジュールの作業ツリーを移動するだけでなく、_
git mv
_ファイルから "_submodule.<submodule name>.path
_"設定を更新し、両方をステージングすることにより、ここで "_.gitmodules
_"を助けましょう。
これは_.gitmodules
_ファイルが見つからない場合は発生せず、このサブモジュールのセクションがない場合にのみ警告を発行します。これは、ユーザーが_.gitmodules
_ファイルなしで単純なgitlinksを使用するか、「git mv」コマンドを発行する前に既に手動でパス設定を更新している可能性があるためです(この場合、mv
は彼)。
_.gitmodules
_が見つかり、マージの競合が含まれる場合のみ、mv
コマンドは失敗し、再試行する前に競合を解決するようユーザーに指示します。
git 2.9(2016年6月)は、サブモジュールの_git mv
_を改善します:
commit a127331 (2016年4月19日)by Stefan Beller(stefanbeller
) を参照してください。
( C浜野順夫-gitster
- in commit 9cb50a 、2016年4月29日)
mv
:ネストされたサブモジュールの移動を許可します「_
git mv old new
_」は、_old/
_ディレクトリ内のサブディレクトリとして存在するサブモジュールのパスを正しく調整しませんでした。ただし、サブモジュールはgitディレクトリへのリンクと_
.gitmodules
_ファイルへの更新を更新する必要があります。
$ mv submodule-oldpath submodule-newpath
$ git rm submodule-oldpath
$ git add submodule-newpath
$ git submodule sync
Git addコマンドを使用する場合、サブモジュールはサブモジュールとしてではなく、単純なディレクトリとしてプロジェクトに含まれていたため、この解決策はうまくいきません。
正しい解決策は次のとおりです。
$ mv submodule-oldpath ~/another-location
$ git rm submodule-oldpath
$ git submodule add submodule-repository-URL submodule-newpath
ソース: http://bcachet.github.io/development/2012/05/25/rename-git-submodule/
上記の提案をいくつか試しました。私は走っています:
$ git --version
git version 1.8.4
サブモジュールを非初期化し、ディレクトリを削除して新しいサブモジュールを作成するのが最善であることがわかりました。
git submodule deinit <submodule name>
git rm <submodule folder name>
git submodule add <address to remote git repo> <new folder name>
少なくともそれが私にとって最もうまくいったことです。 YMMV!
名前を変更することはできないため、最初に削除(deinit
)してから再度追加する必要があります。
それを削除した後:
git submodule deinit <path>
git rm --cached <path>
次の場所で参照を再確認して削除することもできます。
.gitmodules
.git/config
config
への参照を保持するworktree
ファイルがあるため、.git/modules/<name>
から参照フォルダーを削除します(バックアップを作成するのが最善です)次に、リポジトリに変更をコミットして変更をステージングします。
git commit -am 'Removing submodule.'
未解決の問題がないかどうかを再確認してください:
git submodule update
git submodule sync
git submodule status
そのため、gitサブモジュールを再度追加できます。
git submodule add --name <custom_name> [email protected]:foo/bar.git <my/path>
.gitmodulesファイルを編集してサブモジュールの名前を変更し、サブモジュールディレクトリの名前を変更します。
git submodule sync
その後、しかし、私は今チェックする立場にありません。
MacOs: VonC solution を使用してサブモジュールフォルダーCommon
を小文字に変更する場合:
git mv Common common
私は得る
致命的:「Common」の名前変更に失敗しました:無効な引数
解決策-一時フォルダー名を使用して2回移動します。
git mv Common commontemp
git mv commontemp common
それで全部です :)