标签: git-submodules

浅深度git子模块更新或克隆

可能重复:
Git浅子模块

启动Git 1.6.5+ git clone有一个--recursive选项,也可以递归地克隆子模块.

我们项目中的子模块非常大(历史很多),有时需要很长时间来克隆,可以通过--depth 1选项保存.

有没有办法以--depth 1递归方式浅层克隆()这些子模块?

git git-submodules

8
推荐指数
0
解决办法
263
查看次数

将上游设置为子模块(或如何将GitHub fork作为子模块包含)

我对这个Git事情很陌生,需要一些帮助.

我最近在GitHub上创建了一个新的repo并将其克隆到我的桌面上.我们称之为myProject.我的GitHub帐户中也有一个fork,我将其作为子模块包含在myProject中.让我们把这种myForkOfOtherProject,这是一个叉otherProject.

那么,这是目前的情况:

回购的当前状态图

据GitHub说:

当一个repo被克隆时,它有一个默认的远程名为origin,指向你在GitHub上的fork,而不是它分叉的原始repo.要跟踪原始仓库,您需要添加另一个名为upstream的远程.

所以,我的问题是,如何将上游设置为子模块?或者我不明白什么?

先感谢您.

git github git-submodules

8
推荐指数
1
解决办法
4079
查看次数

将php composer包添加到我的git存储库中

我已经安装了composer并通过'composer install'添加了一些包.它将它们安装在"my_project\vendor"路径下,但是一些软件包是使用git克隆的,所以当我提交"my_project"时,这些克隆的软件包被忽略了.

问题是,当其他开发人员克隆"my_project"时,他们会丢失被忽略的包.有没有办法自动将包添加到"my_project",以便其他开发人员从我这里获取它们?

我认为这应该使用子模块完成,但我不知道如何自动将作曲家的每个新包作为子模块添加到我的项目中.

php git-submodules composer-php

8
推荐指数
2
解决办法
5681
查看次数

删除子模块后出错:以下路径被.gitignore文件忽略:

删除子模块后,我收到此错误.有问题的路径不在我的.gitignore文件中,我的.git/info/exclude文件中也没有任何相关内容.我没有.gitignore_global文件.为什么git试图忽略这条路径,我该如何解决这个问题呢?

The following path is ignored by one of your .gitignore files:
MyTest/MyTest/lib/submodules/ScreenRecorder
Use -f if you really want to add it.
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试执行的命令:

git submodule add https://github.com/kishikawakatsumi/ScreenRecorder.git MyTest/MyTest/lib/submodules/ScreenRecorder
Run Code Online (Sandbox Code Playgroud)

这是从我的git repos根目录执行的.

git git-submodules

8
推荐指数
1
解决办法
3996
查看次数

git存储库中的依赖管理(使用子模块)

我有一个相当大的项目,有很多依赖项.项目存储在git存储库中,依赖项存储在作为子模块链接的专用git存储库中.依赖项可以具有进一步的依赖性(同样,使用git子模块).

这很好用.但是,如果两个依赖项同时需要第三个依赖项,则会遇到更新问题.

依赖关系图如下所示:

[Main Repo]
  |
  |-- [ModuleA]
  |       |
  |       \-- [ModuleC]
  |
  \-- [ModuleB]
          |
          \-- [ModuleC]
Run Code Online (Sandbox Code Playgroud)

现在我更新ModuleA和ModuleB中的子模块指针.这样两个模块都是自包含的.但是,这是很多工作.

在较大的项目中,这个问题通常如何解决?我正在寻找解决此类问题的最佳实践.

谢谢!

git dependencies project-management git-submodules

8
推荐指数
1
解决办法
1764
查看次数

什么是'脏'子模块?

我ignore = dirty在.gitmodule文件中看到了.

例:

[submodule "docs/submodules/netvirt"]
    path = docs/submodules/netvirt
    url = ../netvirt
    branch = .
    ignore = dirty
Run Code Online (Sandbox Code Playgroud)

文件说明:

"脏"将忽略对子模块工作树的所有更改,并且仅考虑子模块的HEAD与超级项目中记录的提交之间的差异.

我不明白这意味着什么.有人可以用简单的语言说明这一点吗?

我理解的是,当我将子模块添加到超级项目时,它处于状态C(HE处于C),然后稍后它现在处于状态F(HE处于F).ignore=dirty只会考虑更改D,E,F(它应该做什么!)

显然,我误解了一些事情.它是什么?

git git-submodules

8
推荐指数
1
解决办法
7154
查看次数

使用来自 Gitlab-CI 的部署令牌克隆外部私有子模块

我在私有服务器 serverB 上有一个存储库 repoB,并从中获取部署令牌(用户+密码)。
\n此存储库用作我尝试配置的项目中的子模块。

\n

在这个项目中,我希望能够在 Gitlab-CI 期间初始化这个子模块。

\n

我的.gitmodules是:

\n
[submodule "repoB"]\n    path = repoB\n    url = https://serverB/groupB/repoB.git\n
Run Code Online (Sandbox Code Playgroud)\n

我的.gitlab-ci.yml:

\n
test_build:\n    variables:\n        GIT_SUBMODULE_STRATEGY: recursive\n
Run Code Online (Sandbox Code Playgroud)\n

实际上,我得到的错误如下(group:\xc2\xa0 japan7、project: nanachan、repoB: karaneko、serverB git.inpt.fr:)

\n
Updating/initializing submodules recursively...\nSynchronizing submodule url for \'karaneko\'\nCloning into \'/builds/japan7/nanachan/karaneko\'...\nfatal: could not read Username for \'https://git.inpt.fr\': No such device or address\nfatal: clone of \'https://git.inpt.fr/japan7/karaneko.git\' into submodule path \'/builds/japan7/nanachan/karenko\' failed\nFailed to clone \'karaneko\'. Retry scheduled\nCloning into \'/builds/japan7/nanachan/karaneko\'...\nfatal: could not read …
Run Code Online (Sandbox Code Playgroud)

git-submodules gitlab gitlab-ci

8
推荐指数
1
解决办法
8828
查看次数

如何从没有子模块的分支中签出带有子模块的分支

我的本地计算机上有三个分支:

  • 掌握
  • 带有子模块的功能分支
  • 无子模块的功能分支

没有子模块的分支曾经有一个子模块,我按照此 SO post中的说明删除了该子模块。我不想从master和中删除子模块feature-branch-with-submodule。

然而,现在我已经完成了feature-branch-without-submodule,我想切换到feature-branch-with-submodule。所以我执行git checkout,但收到错误:

fatal: not a git repository: src/vendor/mysubmodule/../../../../../.git/modules/src/vendor/mysubmodule
Run Code Online (Sandbox Code Playgroud)

如何修复它,以便带有子模块的分支有它,而没有子模块的分支没有,并且我可以使用 git checkout 自由地来回切换?

git git-submodules

8
推荐指数
1
解决办法
3263
查看次数

使用 Boost 作为 CMake 的 git 子模块

我想在我的 C++ 项目中使用 Boost 库(更准确地说,我对 Boost Graph Library 感兴趣)。我希望它作为 git 子模块位于我的 git 存储库中,就像它对所有其他依赖项所做的那样。

例如,如果我想启动一个具有fmt依赖项的项目作为 git 子模块,我会这样做:

mkdir my_project
cd my_project
git init .
Run Code Online (Sandbox Code Playgroud)

然后,我想fmt在标签上添加为子模块8.0.0:

mkdir deps
git submodule add https://github.com/fmtlib/fmt.git deps/fmt
cd deps/fmt
git checkout 8.0.0
Run Code Online (Sandbox Code Playgroud)

然后,我返回到项目的根文件夹:

cd ../..
Run Code Online (Sandbox Code Playgroud)

我创建以下文件:

  • main.cpp
#include <fmt/format.h>

int main() {
    fmt::print("Hello, World!\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)
  • CMakeLists.txt
cmake_minimum_required(VERSION 3.17)
project(test_boost)

add_subdirectory(deps/fmt)

add_executable(test_boost main.cpp)
target_link_libraries(test_boost fmt::fmt)
Run Code Online (Sandbox Code Playgroud)

然后,我们可以构建:

mkdir build
cd build
cmake ..
make
Run Code Online (Sandbox Code Playgroud)

二进制文件工作正常,可以打印Hello, World!,这很棒。

现在如果我想添加增强版本1.77.0 …

c++ git boost cmake git-submodules

8
推荐指数
1
解决办法
3365
查看次数

为什么 git 不再看到我的子模块中的更改?

Windows 用户在这里。我有一个带有一堆子模块的 C++ git 项目。目录结构看起来像这样:

source
  apps
    myapp1
    myapp2
  externals
    submodule1
    submodule2
    ...
    submoduleN
  packages
    mypackage1
    mypackage2
CMakeLists.txt
Makefile
...
Run Code Online (Sandbox Code Playgroud)

这些子模块是我自己的工作,我在我的项目之间共享(因此我拥有并维护它们)。

克隆这个很简单:

git clone ssh://blabla@blabla/blabla
git submodule update --init
Run Code Online (Sandbox Code Playgroud)

一切都有效一段时间。当我更改子模块中的内容并执行 操作时git status,git 会识别出这一点并显示如下内容:

C:\blabla>git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified …
Run Code Online (Sandbox Code Playgroud)

git git-submodules

8
推荐指数
1
解决办法
4342
查看次数