您好,我有一个包含子模块的超级项目。子模块通过分支名称而不是 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 提交
我正在使用 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个服务api并client挂载它们相应的子模块文件夹。
然后我可以在 2 个单独的窗口中“打开容器中的文件夹...”,除了 git 之外,一切都运行良好。我需要能够进行更改,从容器提交更改分支...,但由于仅安装了子模块文件夹,所以我根本无法使用 git。
在这种情况下我有什么选择?如何在没有父文件夹的情况下从容器修改子模块?
我有一个包含多个模块的 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 存储库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超级项目的输出保持如上所示,没有变化。
(如果我添加--init到git submodule update命令中,则同上。)
问:如何确定git submodule update [--init]跳过sub/x子模块的原因?
我们有一个包含各种子模块的 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...
?更一般地说,有没有一种方法可以对存储库执行完整性检查,从而可以预先捕获这些错误?
我正在开发一个 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.py中util.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,他们也必须手动修复导入。 …
我有一个存储库,其子模块位于 /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 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)
如何通过仅提供一次访问令牌来递归克隆子模块?
我有一个大型解决方案(CoreServices),它利用公共库(Common)。我有另一个大型解决方案,它也利用公共库,因此子模块似乎是正确的答案。大多数时候,他们是。
VS2022 应该支持这些子模块。然而,在我的 Git Changes 窗口中,它总是说我有一个修改过的子模块引用 - 而且我在哪个分支上并不重要。我无法进行更改...或撤消它。尝试提交告诉我没有文件。我想也许我会找到提交哈希在超级项目上的位置并更新它,但无济于事。
谁能解释这种行为?
我一直在使用 go 工作区,一切都按预期工作。
尽管我很困惑是否应该提交 go.work 所在的 ROOT 目录,以及实际上是否应该提交 go.work。
如果是这种情况,那么我添加了 git 子模块。
虽然我不确定我是否喜欢这个工作流程 :-) 我的意思是,使用 git 子模块。
所以我有(目录结构)
root(go.work 所在的位置)
这是我的 go.work 根目录
go 1.18
use (
./test-work1
./test-work2
)
Run Code Online (Sandbox Code Playgroud)
我找不到任何有关此的信息。如果我们应该管理“根”,那么我认为这需要在 GIT 中结束 - 但如果我不想将其作为一些大型 MONOREPO 进行管理,那么我需要使用 git 子模块。
或者也许“root”永远不应该添加到 git 中而我们在本地使用它?
有谁有良好的工作流程的经验吗?
尽管工作区是一个相当新的补充,但地面上的信息似乎很薄弱。
提前致谢。