gitサブモジュールディレクトリの名前を変更する簡単な方法はありますか(それを削除して新しい宛先名で再度追加するという全体の動きを経る以外に )。
そして、私たちがそうしている間に、なぜ親ディレクトリで次のことを実行できないのですか? git mv old-submodule-name new-submodule-name
npm
シンプルな仕組みを示します。ある日...多分...誰か...それを書き直します...その間...
gitサブモジュールディレクトリの名前を変更する簡単な方法はありますか(それを削除して新しい宛先名で再度追加するという全体の動きを経る以外に )。
そして、私たちがそうしている間に、なぜ親ディレクトリで次のことを実行できないのですか? git mv old-submodule-name new-submodule-name
npm
シンプルな仕組みを示します。ある日...多分...誰か...それを書き直します...その間...
回答:
次のワークフローが機能していることがわかりました:
mv oldpath newpath
git rm oldpath
git add newpath
git submodule sync
注:この方法では、GITの2018バージョンでインデックスと.gitmodulesが正しく更新されません。
注:VonCの回答git mv oldpath newpath
で指摘されているように、今すぐ実行できる場合があります。(gitの最新バージョンを使用していることを確認してください)
git add newpath
末尾にスラッシュを使用しないでください
.git/modules/SUBMODULE/config
ファイルを編集して、worktree
ポイントが正しいディレクトリを再び指すようにすることもできます。
2.13.1
。しかし、単純に行うことgit mv old new
は魅力のように機能します。変更を完了するには、git commitを実行するだけです。
Git1.8.5(2013年10月)では、プロセスを簡略化する必要があります。単にa:
git mv A B
"
git mv A B
"、サブモジュールA
を移動すると、その作業ツリー.gitmodules
を再配置し、ファイル内のパスを調整するように指示されました。
コミットで詳細を見る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
サブモジュール用に改善されます:
参照してくださいa127331コミットすることにより(2016年4月19日)ステファンBellerを(stefanbeller
)。
(合併によりJunio C浜野- gitster
-で9cb50a3コミット 2016年4月29日)
mv
:ネストされたサブモジュールの移動を許可する「
git mv old new
」は、ディレクトリ内のサブディレクトリとしてold/
正しく存在するサブモジュールのパスを調整しませんでした。ただし、サブモジュールはgitディレクトリへのリンクと
.gitmodules
ファイルへの更新を更新する必要があります。
fatal: source directory is empty, source=my_source, destination=my_destination
。1.8.5の安定版リリース時に、これを再試行します。
正しい解決策は次のとおりです。
mv oldpath ~/another-location
git rm oldpath
git submodule add submodule-repository-URL newpath
ソース:gitサブモジュールの名前を変更
上記の提案をいくつか試しました。私は走っています:
$ 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
.git/modules/<name>
各フォルダにはconfig
参照を保持するファイルがあるため、参照フォルダを(バックアップを作成するのに最適)削除します。worktree
次に、リポジトリへの変更をコミットして、変更をステージングします。
git commit -am 'Removing submodule.'
未解決の問題がないかどうかを次の方法で再確認します。
git submodule update
git submodule sync
git submodule status
これでgitサブモジュールを再び追加できます:
git submodule add --name <custom_name> git@github.com:foo/bar.git <my/path>
.gitmodulesファイルを編集してサブモジュールの名前を変更してから、サブモジュールディレクトリの名前を変更します。
git submodule sync
後で行う必要があるかもしれませんが、今は確認する立場にはありません。
MacOs:VonCソリューションを使用してサブモジュールフォルダーCommon
を小文字に変更する場合:
git mv Common common
私は得る
致命的: '共通'の名前変更に失敗:無効な引数
解決策-一時フォルダー名を使用して2回移動します。
git mv Common commontemp
git mv commontemp common
それで全部です :)
.gitmodules
サブモジュールを移動するときに手動で更新する必要はなくなります。以下の私の回答を