gpt4 book ai didi

git - 使 git 子模块独立于 super 项目使用

转载 作者:行者123 更新时间:2023-12-05 06:32:22 26 4
gpt4 key购买 nike

我有一个更大的带有子模块的 super 项目,一些子模块应该构建 docker 镜像,我想独立于 super 项目构建它。问题是 git 操作在 docker 构建过程中失败,因为 docker 在子项目级别切断了 docker 上下文:

fatal: Not a git repository: ../.git/modules/<submodule>

问题基本上是 <submodule>/.git在 docker 上下文中可用,但是 <superproject>/.git不是。因此,我需要一个不引用 super 项目的子模块。现在我正在为子模块寻找某种 git-dir 拆分机制。基本上与git-submodule-absorbgitdirs相反.

最佳答案

子模块的 .git 文件采用 gitdir: ... 的形式,它指向子模块的实际 .git 目录。

您可以在构建之前将子模块的“真实”.git 目录复制到您的 Docker 镜像中,并在构建 Docker 镜像时将 .git 文件替换为该目录.
几乎就足够了——您还需要修复配置工作树和嵌套的子模块。


详细步骤如下:

在构建 Docker 镜像之前,将子模块的真实 .git 目录复制到 Dockerfile 旁边,以便您可以将其复制到 Dockerfile 中:

DOTGIT=$(cat $SUBMODULE/.git)
GITDIR=${DOTGIT/gitdir: }
cp -rf $SUBMODULE/$GITDIR $SUBMODULE.gitdir

然后从子模块的 config 中删除 worktree:

sed -i '/worktree =/d' $SUBMODULE.gitdir/config

然后在您的 Dockerfile 中,复制子模块

COPY $SUBMODULE /submodule
WORKDIR /submodule

删除原来的.git文件

RUN rm .git

并复制原始 subdmoule 的 .git 目录而不是它:

COPY ./$SUBMODULE.gitdir .git

如果你有嵌套的子模块,你可以用 absorbgitdirs 修复它们

RUN apt-get update && apt-get install -y git
RUN git submodule absorbgitdirs

关于git - 使 git 子模块独立于 super 项目使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51357079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com