Git有一个很好的机制可以为远程存储库提供本地名称。这种机制大大简化了。 Git还支持子模块,并通过其绝对地址将子模块存储库URL保留在.gitmodules文件中。但是Git是否支持在子模块注册表中添加名称而不是绝对URL?
例如,假设我有一个多模块存储库,有一天我决定从一个Git托管服务迁移到另一个,或者我的本地网络地址更改,或者我们迁移到另一个路径不同的系统。进行此类迁移后,我需要通过新的提交来修复URL,但是当我想从过去签出特定标签时,这将尝试从旧服务中获取存储库,这将导致不存在存储库错误。在这种情况下,绝对URL难以使用。
是否可以给子模块地址命名,以便我可以像远程控制器一样更改地址,而不会遇到问题?或者,如果我选择一个特定的URL,那么我会永远坚持下去(我不考虑历史记录重写)吗?
答案 0 :(得分:1)
子模块是具有单独配置的单独存储库。 cd
进入每个子模块目录并运行git remote set-url
。这样可以使用git pull
单独更新子模块。
返回超级项目并修复.gitmodules
中的URL;编辑文件或运行git config -f .gitmodules submodule.<local-path>.url <URL>
(<local-path>
和<URL>
只是占位符)。
运行git submodule sync
;这样会将更新的URL从超级项目的.gitmodules
传输到.git/config
。 Git实际上并不使用.gitmodules
中的URL,而仅使用.git/config
中的URL。 .gitmodules
是在存储库中保留子模块列表及其URL的方法。要使git
知道URL git sync
。 git clone --recursive
自动呼叫git sync
。
git add
,git commit
,git push
,以保存和发布对gitmodules
和子模块的更改。