Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 更新子模块URL_Git_Github - Fatal编程技术网

Git 更新子模块URL

Git 更新子模块URL,git,github,Git,Github,直到今天,我还在github中托管我的git存储库及其子模块存储库。超级存储库中所有提交中的子模块文件夹将重定向到子模块存储库中的正确提交 现在,我必须将子模块存储库从github移植到bitbucket,并删除github中的子模块存储库。此操作是否会中断我在超级存储库中的提交?超级存储库提交不在其提交中存储子模块的url信息吗 示例场景: 假设子模块中有一个commitc67061d7710e699a191965a02d9d0da341d87117,它在许多提交中都在超级存储库中引用。我想更

直到今天,我还在github中托管我的git存储库及其子模块存储库。超级存储库中所有提交中的子模块文件夹将重定向到子模块存储库中的正确提交

现在,我必须将子模块存储库从github移植到bitbucket,并删除github中的子模块存储库。此操作是否会中断我在超级存储库中的提交?超级存储库提交不在其提交中存储子模块的url信息吗

示例场景:

假设子模块中有一个commit
c67061d7710e699a191965a02d9d0da341d87117
,它在许多提交中都在超级存储库中引用。我想更改提交的引用

githubserver/tree/c67061d7710e699a191965a02d9d0da341d87117

bitbucketserver/tree/c67061d7710e699a191965a02d9d0da341d87117

在超级存储库中包含对
c67061d7710e699a191965a02d9d0da341d87117的引用的所有提交中


我在其他stackoverflow问题中了解了如何更新子模块的url。但是他们没有明确提到url更新是更改所有提交中的引用,还是仅更改此类操作之后的提交。

好消息是,从长远来看,这将很好,因为您将把所有历史记录从github移动到bitbucket,并适当地更新
.gitmodules
文件。一旦这样做,新的签出和
git子模块init
就会正常工作


坏消息是现有的签出将继续使用旧的远程URL,因此
git子模块更新将开始失败。要解决此问题,您必须告诉签出存储库的所有人运行
git submodule sync
,以便将子模块的远程更新为bitbucket。

因此我更改了
.gitmodules
文件和
git submodule init
。这是否会在本地更改所有以前提交的子模块url?否,您必须运行
git submodule sync
以更新已初始化子模块的远程。
.gitmodules
修改,然后执行
git submodule sync
将在本地更改所有以前提交的子模块url。但是如何在远程存储库中使用此更改,以便其他人可以在其本地存储库中获得此更改?您必须提交新的
.gitmodules
文件。然后告诉人们使用
git remote set url
到新的主repo。然后让他们运行一个
git pull
,然后运行
git submodule sync
。因此,提交
.gitmodules
文件中的更改并推送它,远程存储库只需知道新子模块url的位置,这难道不意味着使用old
.gitmodules
文件的旧提交会告诉远程存储库仍然指向这些提交中的旧子模块url,并且它们会中断,因此?