我有一个由许多子模块组成的项目。然而,事后看来,其中一些子模块不应该是子模块,因为它们并不意味着或永远不会在另一个项目中使用,而且我偶尔会在它们之间传输代码。这个项目同时也是子模块中的实验,所以我对它有点疯狂。
我想知道是否有一种方法可以将子模块转换为常规目录,维护更改历史记录,但重写主项目的历史记录,以便将它们视为常规目录。
我看过有关子树合并的内容,但我希望有一种方法来重写提交,以便文件路径以子模块的路径为前缀。
我正在开发一个嵌入式项目,该项目将 Linux 源代码树作为子模块。我目前在非开发机器上工作,所以我永远不会使用这个存储库进行构建;仅供参考。
有一次我初始化了 linux 子模块(带来了大约 2.5GB 的数据),但现在我想反转这个过程,在这个存储库中保留未初始化的 linux 子模块。明确地说,就 Git 而言,我不想检查对子模块的任何更改;我只想要我的磁盘空间。
我怎样才能做到这一点?我可以删除./linux和.git/modules/linux目录以摆脱所有不需要的数据,但我怀疑这会让 git 理所当然地感到困惑和烦恼。
“git Remote get-url origin”可用于获取远程位置。如何对所有子模块执行相同的操作?
git submodule update --remote
Run Code Online (Sandbox Code Playgroud)
上面的命令将子模块更新到最新提交,但是我想更新到特定提交(例如某些提交哈希)。如何实现这一目标?
我一直在寻找一段时间,在使用嵌套的Git子模块时找不到任何有效的解决方案或指南/教程来发布Maven模块.
我们有一个复杂的公共和私人项目结构,需要特定的订单才能成功构建.我们的目标是执行Maven版本,以便在一个步骤中标记和部署多个Maven工件.
这是简化的Maven项目/模块和Git存储库结构:
parent-public:1.0.0:pom (descriptor only, no Maven modules, public Git repository)
| |
| |- public-module:1.0.0-SNAPSHOT:jar
| (Maven module, child of parent-public, Git submodule, public repository)
|
|- parent-private:1.0.0-SNAPSHOT:pom
(Maven modules, Git submodule, private repository)
|
|- public-module:1.0.0-SNAPSHOT:jar
| (Maven module only, child of parent-public, Git submodule, public repository, released)
|
|- private-module:1.0.0-SNAPSHOT:war
(Maven module, child of parent-private, released)
Run Code Online (Sandbox Code Playgroud)
当前结构允许Maven独立构建和部署项目/模块.
释放时public-module(从parent-public/parent-private/public-module目录),maven-release-plugin执行良好(已标记Git存储库并已部署发布工件).
在发布时parent-private,maven-release-plugin准备并开始执行发布,然后在目标结账期间失败(此问题在此处讨论,但解决方案在我的上下文中不起作用且没有足够的声誉来评论).
这是当前的 …
git submodule update已支持--depth此答案中所述的选项。
但是我们仍然无法轻松确定深度值,这可能会使 git 无法找到子模块的预期修订版。
浅层更新子模块是否有真正的解决方案?
考虑将具有依赖项的 Python 子模块导入具有自身依赖项的项目的情况。假设子模块有它的environment.yml文件,而项目本身有一个environment.yml文件。
有没有办法创建一个包含这两个环境规范的环境,如果是这样,您将如何进行?(或者是否有更好/更优选的方法来处理这种情况?)
当我运行该命令时git submodule status,我看到对几个月甚至几年前标签的引用。其他一切都工作正常(代码检查了我的期望,并且没有其他奇怪的行为)。
问题是该命令显示不正确。一切正常。总是得到我所期望的,并且我经常使用和git submodule update更新子模块。git addgit push
username:~/src/main (master)$ git submodule status
3f786850e387550fdab836ed7e6dc881de23001b module0 (old-tag-1234-g8f123456)
89e6c98d92887913cadf06b2adb97f26cde4849b module1 (years-old-tag-4321-g12f4567890)
2b66fd261ee5c6cfc8de7fa466bab600bcfe4f69 module2 (heads/master)
e983f374794de9c64e3d1c1de1d490c0756eeeff module3 (heads/master)
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为我的所有子模块都已master签出分支。我希望这个命令能够显示heads/master所有 4 个模块。
username:~/src/main/module0 (master)$ git status
On branch master
Your branch is up to date with 'origin/master'.
...
username:~/src/main/module3 (master)$ git status
On branch master
Your branch is up to date with 'origin/master'.
Run Code Online (Sandbox Code Playgroud)
这些子模块也被正确引用 -git submodule update不会导致对它们进行任何更改。这是一个每天由数十人更新数十次的存储库 - 我们不小心使用 3 年前的代码或忘记更新它的可能性为零。
进一步强调: …
我试图将我的env_file配置设置为相对于多个docker-compose.yml文件位置中的每个位置,而不是相对于第一个docker-compose.yml.
文档(https://docs.docker.com/compose/compose-file/compose-file-v3/#env_file)表明这应该是可能的:
如果您使用 docker-compose -f FILE 指定了 Compose 文件,则 env_file 中的路径相对于该文件所在的目录。
例如,当我发出
docker compose \
--file docker-compose.yml \
--file backend/docker-compose.yml \
--file docker-compose.override.yml up
Run Code Online (Sandbox Code Playgroud)
env_file第二个(即backend/docker-compose.yml)和第三个(即)中的所有路径docker-compose.override.yml都相对于第一个文件(即docker-compose.yml)的位置
我希望env_file每个docker-compose.yml文件中的设置都与其定义的文件相关。
这可能吗?
感谢您的时间
如果您对上下文感到好奇:
我想要一个独立的后端存储库,并且后端开发人员可以在不需要前端容器的情况下对其进行工作。前端存储库会将后端存储库作为 Git 子模块拉入,因为前端容器需要后端容器作为依赖项。这是我的 2 个仓库:
后端的组织方式如下:
/docker-compose.yml
/docker-compose.override.yml
Run Code Online (Sandbox Code Playgroud)
前端的组织方式如下:
/docker-compose.yml
/docker-compose.override.yml
/backend/ # pulled in as a Git submodule
/backend/docker-compose.yml
/backend/docker-compose.override.yml
Run Code Online (Sandbox Code Playgroud)
如果我将其放入文件env_file中,一切都会正常docker-compose.override.yml。后端的覆盖 …
我有两个名为private2和 的ADO 存储库public2。作为子模块的private2引用:public2
我还添加了用于构建的 yaml 文件(vsts-cicd.yml),如下所示:
\nresources:\n repositories:\n - repository: test\n type: git\n name: <ProjectName>/public2\n ref: master\n\nstages:\n\n- template: build1.yml@test\n parameters:\n repoToCheckout: test\n checkoutPath: \'$(Build.BuildNumber)\'\n\n- template: build2.yml@test\n parameters:\n repoToCheckout: test\n checkoutPath: \'$(Build.BuildNumber)\'\n \n- template: yaml/build3.yml\n\nRun Code Online (Sandbox Code Playgroud)\n在运行构建时,我看到前两个模板已成功完成。到达时- template: yaml/build3.yml失败并出现以下错误:
我缺少什么?
\n更新:
\n我按照这篇文章(https://www.timschaeps.be/post/dealing-with-error-tf401019-submodules-azure-pipelines/)来解决这个问题,但是我没有\xe2\x80\x99在项目中看到这个选项设置:\xe2\x80\x98将作业授权范围限制为引用的 Azure DevOps 存储库\xe2\x80\x99。我缺少什么?
\n\ngit-submodules ×10
git ×9
azure-devops ×1
conda ×1
docker ×1
maven ×1
monorepo ×1
python ×1
release ×1
repository ×1
yaml ×1