Git - 如何更改子模块的 url/路径

Bla*_*ack 5 git git-submodules

这是我的.gitmodules

[submodule "app/code/EthanYehuda/CronjobManager"]
        path = app/code/EthanYehuda/CronjobManager
        url = https://company@bitbucket.org/some_user/ethanyehuda_cronjobmanager.git
Run Code Online (Sandbox Code Playgroud)

我需要将网址更改为 https://github.com/Ethan3600/magento2-CronjobManager.git

所以我只是改变了它:

[submodule "app/code/EthanYehuda/CronjobManager"]
        path = app/code/EthanYehuda/CronjobManager
        url = https://github.com/Ethan3600/magento2-CronjobManager.git
Run Code Online (Sandbox Code Playgroud)

然后我将文件添加到暂存区并进行了提交:

git add .gitmodules
git commit -m "change url of submodule xy"
Run Code Online (Sandbox Code Playgroud)

然后我执行了git submodule update --init. 但是如果我去app/code/EthanYehuda/CronjobManager展示遥控器,那么我仍然得到https://company@bitbucket.org/some_user/ethanyehuda_cronjobmanager.git

alk*_*ino 24

从 git v2.25.0 ( changelog ) 开始,git submodule学习新的set-url命令。

使用它只需做git submodule set-url -- <path> <url>

对你来说是: git submodule set-url -- app/code/EthanYehuda/CronjobManager https://github.com/Ethan3600/magento2-CronjobManager.git

注意:无论你在 git 中的哪个位置,路径都应该相对于顶级目录。


jth*_*ill 9

.gitmodules 保留建议的默认值,您的更改将在设置后续克隆时生效。

一旦有人完成了克隆,生成的存储库就只是一个存储库。您可以进入现有子模块的目录并以通常的方式更改其原始远程 url,但该git submodule命令有一个方便的快捷方式

git submodule sync
Run Code Online (Sandbox Code Playgroud)

为你填补所有的空白。

sync [--recursive] [--] [<path>…?]

将子模块的远程 URL 配置设置同步到中指定的值.gitmodules。它只会影响那些已经有 URL 条目的子模块.git/config(即它们被初始化或新添加的情况)。当子模块 URL 更改上游并且您需要相应地更新本地存储库时,这很有用。

git submodule sync同步所有子模块,而git submodule sync -- A仅同步子模块“A”。

如果--recursive指定,此命令将递归到注册的子模块中,并同步其中的任何嵌套子模块。

  • 不,您必须已经更新了 `.gitmodules`,然后是子模块同步。正如引用的文档所说,同步从“.gitmodules”中更新远程设置。 (2认同)

abh*_*ora 8

请参阅答案以获取更多信息。

这些命令将在命令提示符下完成工作,而不会更改本地存储库上的任何文件

git config --file=.gitmodules submodule.Submod.url https://github.com/username/ABC.git
git config --file=.gitmodules submodule.Submod.branch Development
git submodule sync
git submodule update --init --recursive --remote
Run Code Online (Sandbox Code Playgroud)


Bla*_*ack 5

对我来说,我找到的解决方案不起作用,因为我的存储库的 git 历史记录与新存储库的历史记录完全不同。

\n\n

让我解释。我收到了一个 Zip 文件形式的项目。我初始化了一个新的存储库并提交了文件并将其推送到我的位桶中。

\n\n

然后我发现,这是一个公共github项目。所以我想更改 github 存储库的 URL。但它们有完全不同的 git 历史记录(我的存储库只有一个初始提交,而 github 存储库包含所有提交。)

\n\n

所以仅仅改变 URL 是行不通的。

\n\n

所以我不得不删除子模块并重新创建它。

\n\n
\n

提示<name_of_submodule>= app/code/EthanYehuda/CronjobManager (在我的情况下)

\n
\n\n

删除:

\n\n
git submodule deinit <name_of_submodule>\ngit rm -f <name_of_submodule>\nrm -rf .git/modules/<name_of_submodule>\ngit commit -m "Deleted submodule xy"\n
Run Code Online (Sandbox Code Playgroud)\n\n

重新添加:

\n\n
git submodule add --force https://github.com/example/foo-bar.git <name_of_submodule>\ngit commit -m "Add submodul xy"\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n
\n

正在获取子模块 app/code/EthanYehuda/CronjobManager 错误:\n 服务器拒绝对未指定对象的请求\n 9b677ef0e750acb9292030306bd97a3ee2734c61

\n
\n\n

\xe2\x86\x91 如果在克隆(例如登台)上拉取项目后出现这样的错误,那么您必须执行sync以下update --init操作git pull

\n\n
git submodule sync\ngit submodule update --init\n
Run Code Online (Sandbox Code Playgroud)\n