标签: git-submodules

将 git 子模块合并到主存储库中

好的,我们有一个包含 3 个子模块的存储库。现在我们想将此子模块合并回主存储库,保留所有历史记录(好吧,使用子模块比有用更令人头疼)。我们该如何进行?

git git-submodules

7
推荐指数
1
解决办法
3985
查看次数

git --recursive 不克隆子模块

我了解到要下载带有主存储库的子模块,我们可以--recursive在克隆主存储库时使用选项。

我做了同样的 git clone --recursive git@github.com:passion/academy.git

我发现它只创建了一个子模块的空目录,但没有下载它的代码。

我们需要做额外的事情git submodule update --init --recursive 吗?如果是,那么--recursive克隆主存储库时标志的用途是什么?

git github git-submodules

7
推荐指数
1
解决办法
2651
查看次数

如何使用子模块克隆本地存储库?

假设我递归地克隆一个存储库。

$ git clone --recursive ssh://server/project/client
Cloning into 'client'...
remote: Counting objects: 191, done
remote: Finding sources: 100% (191/191)
remote: Total 191 (delta 53), reused 159 (delta 53)
Receiving objects: 100% (191/191), 27.59 KiB | 0 bytes/s, done.
Resolving deltas: 100% (53/53), done.
Checking connectivity... done.
Submodule 'gui' (ssh://server/project/client/gui.git) registered for path 'gui'
Cloning into 'gui'...
remote: Counting objects: 3213, done
remote: Finding sources: 100% (3213/3213)
remote: Total 3213 (delta 1272), reused 3107 (delta 1272)
Receiving objects: 100% (3213/3213), 47.88 …
Run Code Online (Sandbox Code Playgroud)

git git-clone git-submodules

7
推荐指数
1
解决办法
5136
查看次数

保持 git 子模块结帐与提交 ID 同步的当今策略?

StackOverflow 上提出了很多关于自动更新子模块的问题,包括:

但在我看来,对于 git 子模块,还没有单一的方法可以像svn up关于 svn-externals 一样工作。

所以既然git每天都在变化,我又敢再问:

有没有一种(方便的)方法来初始化和自动更新checkout 和 pull(即merge和rebase)的子模块检出(即与其相应的子模块提交 ID 保持同步)?

目前我有两种方法:

#1: 创建一个post-checkout,post-merge并post-rewrite钩住以下内容

#!/bin/sh
git submodule update --init --recursive
Run Code Online (Sandbox Code Playgroud)

正如您已经看到的那样,这种方法有几个缺点:

  • 它很复杂,可能需要一个脚本才能使其可靠地工作
  • 如果您已经使用这些 git-hooks,则效果不佳
  • 提交挂钩仅在此克隆上处于活动状态(必须由在每个克隆上从事此项目的每个人重新完成)
  • 设置是非标准的,会混淆其他人

#2: 为pulland配置别名checkout

git config --global alias.up 'pull …
Run Code Online (Sandbox Code Playgroud)

git git-pull git-config git-checkout git-submodules

7
推荐指数
1
解决办法
642
查看次数

Git:在所有子模块上递归切换分支(签出)

我正在开发一个包含submodules. 我在所有子模块(包括父模块)中都有同名的分支(例如master,development..),并且它们都跟踪相应的远程分支。

我想一次在所有子模块中签出相同的分支。换句话说,我想要的是,如果我切换到development父模块中的分支,所有子模块也应该切换到development分支,以便我的工作树与分支保持一致。

手动执行此操作既痛苦又重复。有捷径吗?

git git-submodules git-alias

7
推荐指数
2
解决办法
1万
查看次数

在 git 中使一些子模块可选

我们有一个为多个项目/目标提供服务的 git 存储库。此外,还有 3 个子模块用于单独开发的模块,这些模块被引用并拉入工作区。

将有一个模块的第 4 个 repo,该模块仅在特定项目中需要,并且只有特定工程师有权访问它。有什么办法可以让这个第四个子模块成为可选的或者全有或全无?

非常感谢,

伙计。

git git-submodules

7
推荐指数
1
解决办法
804
查看次数

排除子模块的子模块

我有 git repo,在那里我使用extern/dir 中的git 子模块链接我的一些依赖项。假设我有一个依赖项A作为子模块,位于extern/A. 现在A本身有一些依赖项作为 git 子模块。InA的回购,即,例如。A/test/data/X.

现在,当我克隆我的 repo 并运行时git submodule update --init --recursive,为了在 CI 服务器上构建它,或者,我希望上面的命令忽略exter/A/test/data/X,因为它就像我不想要的 1G 数据。

然而,我的其他依赖项有一些有用的子模块,所以我不能跳过--recursive. 有没有办法做到这一点?

git git-submodules

7
推荐指数
1
解决办法
4322
查看次数

如何跳过 Python 导入中的中间文件夹?

我的 python 应用程序的文件夹结构如下:

my_repo/
  src/
    main.py
    util/   <-- util is a git submodule
      src/
        torgle.py
      test/
        test_torgle.py
  test/
    test_main.py
Run Code Online (Sandbox Code Playgroud)

在内部main.py,我可以util像这样在子模块中导入内容:

from util.src.torgle import Torgler
Run Code Online (Sandbox Code Playgroud)

但这src/只是在我的 git 子模块存储库中组织事物的一种方法,并且不应该真正成为主存储库中包名称的逻辑部分。有什么方法可以跳过src模块导入的部分吗?我宁愿这样做:

from util.torgle import Torgler
Run Code Online (Sandbox Code Playgroud)

也就是说,我可以util/src为 Pythonutil包设置别名文件夹吗?

(请注意,在我的实际情况中,我有更深层的嵌套包 ( util.x.y.z.torgle),因此from util import torgle; torgle.Torgler(...)无法很好地扩展。我对 特别感兴趣from util.torgle import Torgler。)

python git-submodules python-3.x

7
推荐指数
1
解决办法
1040
查看次数

如何启用我的 Azure 管道以使用 Git 签出子模块?

在我们的 Git 项目中,我们在 .gitmodules 中定义了以下内容

[submodule "DBPkg"]
  path = DBPkg
  url = https://MainCo@dev.azure.com/MainCo/OurProject/_git/DBPkg
Run Code Online (Sandbox Code Playgroud)

构建 Azure Pipeline 时,在“获取源”管道步骤(我使用“Azure Repos Git”)中,我启用了子模块的检出

在此输入图像描述

在我们的项目设置中,我还做了以下配置...

在此输入图像描述

然而,在构建项目时,当尝试使用以下命令签出子模块时,它会死掉......

2020-10-16T20:29:44.9912145Z HEAD is now at e06abce Modified docker file to remove unnecessary container name.
2020-10-16T20:29:44.9913415Z ##[command]git submodule sync
2020-10-16T20:29:44.9920288Z ##[command]git -c http.https://MainCo@dev.azure.com.extraheader="AUTHORIZATION: bearer ***" submodule update --init --force
2020-10-16T20:29:44.9923206Z Submodule 'DBPkg' (https://MainCo@dev.azure.com/MainCo/OurProject/_git/DBPkg) registered for path 'DBPkg'
2020-10-16T20:29:44.9923842Z Cloning into '/home/vsts/work/1/s/DBPkg'...
2020-10-16T20:29:44.9924246Z remote: TF401019: The Git repository with name or identifier DBPkg does not exist or you do not have …
Run Code Online (Sandbox Code Playgroud)

git permissions azure git-submodules azure-pipelines

7
推荐指数
1
解决办法
5329
查看次数

可以将稀疏签出模式添加到 .gitmodules 中吗?

假设我有一个git submodule并且我想在其上启用稀疏结帐。是否可以这样做并将该文件添加到存储库中以供其他克隆者使用?git 子模块被添加到,/.gitmodules但该子模块的稀疏签出文件位于.git/modules/foo/info/sparse-checkout? 如何配置 git 子模块,以便其他人克隆时--recursive只能获得白名单目录?如何将子模块上的稀疏结帐配置保存到存储库中?

git git-submodules sparse-checkout git-sparse-checkout

7
推荐指数
0
解决办法
1537
查看次数