是否有一些简单的方法来重命名git子模块目录(除了进行删除它的整个动作, 然后使用新的目的地名称重新添加它)。
而当我们这样做时,为什么我根本无法在父目录中执行以下操作呢? git mv old-submodule-name new-submodule-name
npm
展示了简单的工作原理。某一天...也许...某人...与此同时将其重写...
是否有一些简单的方法来重命名git子模块目录(除了进行删除它的整个动作, 然后使用新的目的地名称重新添加它)。
而当我们这样做时,为什么我根本无法在父目录中执行以下操作呢? git mv old-submodule-name new-submodule-name
npm
展示了简单的工作原理。某一天...也许...某人...与此同时将其重写...
Answers:
我发现以下工作流程有效:
mv oldpath newpath
git rm oldpath
git add newpath
git submodule sync
注意:这种方法不能在GIT的2018版本中正确更新索引和.gitmodules。
注意:git mv oldpath newpath
正如VonC的答案中指出的那样,您现在可以立即执行此操作。(确保您使用的是最新版本的git)
git add newpath
请勿使用斜杠
.git/modules/SUBMODULE/config
文件,worktree
以便再次指向正确的目录。
2.13.1
。但是简单地做git mv old new
一件事情就像一种魅力。我只需要执行git commit即可完成更改。
Git1.8.5(2013年10月)应简化流程。只需执行以下操作:
git mv A B
git mv A B
在移动子模块时,“ ”A
被教导重新定位其工作树并调整.gitmodules
文件中的路径。
在commit 0656781fadca1中查看更多内容:
当前
git mv
在子模块上使用“ ”将子模块的工作树移到超级项目的工作树中。但是子模块的路径设置在.gitmodules
保持不变,这与工作树不一致,并且使得依赖于适当的git命令path -> name mapping
(如status
和diff
)的行为异常。让“
git mv
”帮助在这里,不仅移动子模块的工作树,而且在更新“submodule.<submodule name>.path
”从设定.gitmodules
文件和舞台两个。
如果没有.gitmodules
找到文件,则不会发生这种情况,只有在该子模块没有相应部分时才会发出警告。这是因为用户.gitmodules
在发出“ git mv”命令之前可能只是使用普通的gitlinks而没有文件,或者已经手动更新了路径设置(在这种情况下,警告提醒他mv
本来应该为他这样做)。
仅当.gitmodules
找到并包含合并冲突时,mv
命令才会失败,并告诉用户在再次尝试之前解决冲突。
git 2.9(2016年6月)将有所改进 git mv
针对子模块进行:
参见Stefan Beller()的commit a127331(2016年4月19日)。(由Junio C Hamano合并--在commit 9cb50a3中,2016年4月29日)stefanbeller
gitster
mv
:允许移动嵌套子模块”
git mv old new
”未正确调整作为子目录old/
正确存在的子模块的路径。但是,子模块需要更新其到git目录的链接以及对
.gitmodules
文件的更新。
fatal: source directory is empty, source=my_source, destination=my_destination
。当1.8.5稳定发布时,将再次尝试。
无法重命名,因此您必须先将其删除(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
我懂了
致命:重命名“公用”失败:参数无效
解决方案-使用一些临时文件夹名称并移动两次:
git mv Common commontemp
git mv commontemp common
就这样 :)
.gitmodules
移动子模块时,不再需要手动更新。请在下面