标签: git-submodules

如何浅拉按分支名称跟踪的子模块

您好,我有一个包含子模块的超级项目。子模块通过分支名称而不是 sha 提交号进行跟踪。在我们的构建服务器上,我想尽可能少地拉动。所以我尝试了

git submodule update --remote --init 
Run Code Online (Sandbox Code Playgroud)

然而这并不肤浅。似乎拉出所有内容然后切换到分支

git submodule update --remote --init --depth 1
Run Code Online (Sandbox Code Playgroud)

这不起作用,它失败了:

git submodule update --remote --init --depth 1 ThirdParty/protobuf
Submodule 'ThirdParty/protobuf' (ssh://myrepo/thirdparty/protobuf.git) 
registered for path 'ThirdParty/protobuf'
Cloning into '/home/martin/jenkins/workspace/test_log_service/repo/ThirdParty/protobuf'...
fatal: Needed a single revision
Unable to find current origin/version/3.2.0-era revision in submodule path 'ThirdParty/protobuf'
Run Code Online (Sandbox Code Playgroud)

关于浅层子模块有一个不同的问题,但是我不认为它适用于分支,仅适用于 sha 提交

git git-submodules

5
推荐指数
1
解决办法
2895
查看次数

几种使用git的开发容器环境

我正在使用 vs-code devcontainer功能创建以下设置的容器化开发环境:

root_folder (main git repository)
|- .git
|- docker-compose.yml
|- @myapi-submodule (django python API)
  |- .devcontainer.json
|- @myclient-submodule (react js client)
  |- .devcontainer.json
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml我分别创建2个服务apiclient挂载它们相应的子模块文件夹。

然后我可以在 2 个单独的窗口中“打开容器中的文件夹...”,除了 git 之外,一切都运行良好。我需要能够进行更改,从容器提交更改分支...,但由于仅安装了子模块文件夹,所以我根本无法使用 git。

在这种情况下我有什么选择?如何在没有父文件夹的情况下从容器修改子模块?

git git-submodules docker docker-compose visual-studio-code

5
推荐指数
1
解决办法
740
查看次数

在 git 子模块中使用 aar 和 gradle 6.2.1 时遇到问题

我有一个包含多个模块的 Android 项目。它还有一个由多个模块组成的库,作为 git 子模块。该库是它自己的独立项目,带有用于测试的应用程序模块。

- Project
    - app
    - module1
    - module2
    - library (git submodule)
        - app (sample app module for testing library)
        - module1
        - module2 (depends on aar)
Run Code Online (Sandbox Code Playgroud)

更新到 Gradle 6.2.1,我遇到构建错误:

构建 AAR 时不支持直接本地 .aar 文件依赖项。生成的 AAR 将被破坏,因为任何本地 .aar 文件依赖项中的类和 Android 资源都不会打包在生成的 AAR 中。在这种情况下,以前版本的 Android Gradle 插件也会产生损坏的 AAR(尽管不会抛出此错误)。:module2 项目的以下直接本地 .aar 文件依赖项导致了此错误: .../master/module2/libs/my_dependency.aar

现在,如果我通过将 aar 作为模块导入来在库项目中修复此问题,则示例应用程序可以正常工作。但是,如果我在主项目中使用相同的库分支,则会收到有关 aar 模块没有 AndroidManifest.xml 或未定义compileSdkVersion 的错误。如果我修复这两个错误,那么仍然存在类未找到错误。

git 子模块是否支持这种类型的 aar 模块?此外,aar 依赖项使用 gradle 5.4.1 可以正常工作。

git android gradle git-submodules aar

5
推荐指数
1
解决办法
1706
查看次数

为什么“git submodule update”会跳过子模块?

我有一个带有单个子模块的 git 存储库sub/x。(该子模块不包含其自己的任何子模块。)

在超级项目的存储库中, 的输出git status显示以下(未暂存的)修改

modified:   sub/x (new commits)
Run Code Online (Sandbox Code Playgroud)

如果我现在跑步

git submodule update
Run Code Online (Sandbox Code Playgroud)

...在超级项目上,以下行被打印到终端(仅此而已):

Skipping submodule 'sub/x'
Run Code Online (Sandbox Code Playgroud)

此后,git status超级项目的输出保持如上所示,没有变化。

(如果我添加--initgit submodule update命令中,则同上。)

问:如何确定git submodule update [--init]跳过sub/x子模块的原因?

git git-submodules

5
推荐指数
1
解决办法
6333
查看次数

git fetch 失败并显示“致命:git upload-pack:不是我们的参考 a639...”,第二次成功

我们有一个包含各种子模块的 git 存储库。有一个主存储库的旧克隆,在运行时我们会重复出现以下错误git fetch

fatal: remote error: upload-pack: not our ref a63912a948cf1ce4c700c16b3417e89287f61f63
fatal: git upload-pack: not our ref a63912a948cf1ce4c700c16b3417e89287f61f63
Run Code Online (Sandbox Code Playgroud)

此后第二次运行时git fetch,错误消失。

我当前的假设是旧克隆(或正在获取的某些分支)包含对子模块中提交的引用,这些子模块由于某种原因(变基?)已从源中消失。我知道这种情况可能会发生,但是我如何找到特定的悬空引用,以便我可以修复它?

旧的克隆位于我们用于设置测试的基本映像中,因此我可以完美地重现该错误,即使它在每次尝试时都消失了。然而,我不愿意通过在我们的脚本中散布git fetch || git fetch或类似的黑客行为来忽略这个问题。

那么,我如何找出主存储库中的哪个提交引用了丢失的引用呢a63912... ?更一般地说,有没有一种方法可以对存储库执行完整性检查,从而可以预先捕获这些错误?

git git-submodules

5
推荐指数
0
解决办法
4284
查看次数

Git子模块的本地导入错误 - Python

我正在开发一个 Python 项目(项目 A),该项目使用 GitHub 中的另一个项目(项目 B)。我不是 Git 专家,所以经过快速研究,我发现我应该使用项目B作为git submodule.

所以,我cd project_A_root做了以下事情:

git submodule add project_B
git submodule init
git submodule update
Run Code Online (Sandbox Code Playgroud)

现在,我的项目结构如下所示:
在此输入图像描述

main.py文件中,我从do_something.py导入了一个方法。

主要.py

from ProjectB.do_something import foo
Run Code Online (Sandbox Code Playgroud)

但是,do_something.py文件从util.py文件导入了一个方法,这就是问题发生的地方。

do_something.py

from util import bar
Run Code Online (Sandbox Code Playgroud)

项目 B是一个子模块,它假定项目 B目录是项目的根目录,因此导入do_something.pyutil.py的方法时未指定包,并且出现错误:

ImportError: cannot import name 'bar' from 'util'
Run Code Online (Sandbox Code Playgroud)

相反,它应该像这样导入:

from ProjectB.util import bar
Run Code Online (Sandbox Code Playgroud)

我不确定处理这个问题的最佳方法是什么。我已经手动修复了子模块中的导入,但我无法将这些更改推送到 Git,因为这不是子模块的工作方式,因此如果有人想要克隆Project A,他们也必须手动修复导入。 …

python git importerror git-submodules

5
推荐指数
1
解决办法
2721
查看次数

如何将 git 子模块代码与主存储库代码一起推送

我有一个存储库,其子模块位于 /modules 目录中。

我现在想强制推送整个仓库内容,包括。/modules 的内容到另一个存储库(用于部署)。

但是,当我在子模块中进行更改时,目标存储库的内容似乎没有更新。这是我运行来推送内容的:

 - git pull
 - git submodule update --init --recursive
 - git push -f --recurse-submodules=on-demand https://example.com/deployment.git master
Run Code Online (Sandbox Code Playgroud)

git git-push git-submodules

5
推荐指数
1
解决办法
2718
查看次数

使用访问令牌从 GitHub 递归克隆子模块

我有一个包含许多子模块的伞式存储库。我在用

git clone --recurse-submodules --remote-submodules https://<access_token>@github.com/user/repo.git
Run Code Online (Sandbox Code Playgroud)

递归克隆所有子模块。在 Ubuntu 上,我被要求提供每个子模块的凭据,尽管它们都可以使用相同的访问令牌进行访问,我已经通过单独克隆它们进行了测试。旁注:我被要求提供用户名和密码,自 8 月 13 日起,GitHub 不再接受这些信息。在 Windows 上,Git 作为 Visual Studio 的一部分安装,我只需为伞式存储库提供一次访问令牌。

我已经尝试使用 Git 凭证缓存,但这不起作用:

git config --global credential.helper cache
Run Code Online (Sandbox Code Playgroud)

如何通过仅提供一次访问令牌来递归克隆子模块?

git github git-submodules

5
推荐指数
1
解决办法
6030
查看次数

VS2022 - 子模块的 Git 更改始终显示更改

我有一个大型解决方案(CoreServices),它利用公共库(Common)。我有另一个大型解决方案,它也利用公共库,因此子模块似乎是正确的答案。大多数时候,他们是。

VS2022 应该支持这些子模块。然而,在我的 Git Changes 窗口中,它总是说我有一个修改过的子模块引用 - 而且我在哪个分支上并不重要。我无法进行更改...或撤消它。尝试提交告诉我没有文件。我想也许我会找到提交哈希在超级项目上的位置并更新它,但无济于事。

谁能解释这种行为?

常见的变化 - 不能前进或后退 - 甚至不能切换分支

git-submodules visual-studio-2022

5
推荐指数
1
解决办法
3649
查看次数

GO 工作区 - 签入 git 以及使用 git 子模块的内容是什么?

我一直在使用 go 工作区,一切都按预期工作。

尽管我很困惑是否应该提交 go.work 所在的 ROOT 目录,以及实际上是否应该提交 go.work。

如果是这种情况,那么我添加了 git 子模块。

虽然我不确定我是否喜欢这个工作流程 :-) 我的意思是,使用 git 子模块。

所以我有(目录结构)

root(go.work 所在的位置)

  • proj1(也添加到 go.work)
  • proj2(也添加到 go.work 中)

这是我的 go.work 根目录

go 1.18

use (
    ./test-work1
    ./test-work2
)
Run Code Online (Sandbox Code Playgroud)

我找不到任何有关此的信息。如果我们应该管理“根”,那么我认为这需要在 GIT 中结束 - 但如果我不想将其作为一些大型 MONOREPO 进行管理,那么我需要使用 git 子模块。

在此输入图像描述

或者也许“root”永远不应该添加到 git 中而我们在本地使用它?

有谁有良好的工作流程的经验吗?

尽管工作区是一个相当新的补充,但地面上的信息似乎很薄弱。

提前致谢。

go git-submodules

5
推荐指数
0
解决办法
129
查看次数