标签: git-submodules

在git checkout-index中包含子模块

在做git checkout-index什么时,有没有办法从子模块中复制文件?

我已经检查了git checkout-index的文档,但它没有提到子模块

git git-submodules

9
推荐指数
1
解决办法
284
查看次数

cloudbuild.yaml包含不同的云构建器配置

我的项目分为gitmodules,如下所示:

/ +
  |
  +-module_1
  |  |
  |  +- cloudbuild.yaml 
  |  +- src/
  |  +-.git/
  | 
  +-module_2
  |  |
  |  +- cloudbuild.yaml 
  |  +- src/
  |  +-.git/
  | 
  +- .git/
  +- .gitmodules
  +- cloudbuild.yaml
Run Code Online (Sandbox Code Playgroud)

我正在尝试从父存储库构建子模块,但cloudbuild有一个问题,因为它不会自己获取gitmodules.因此,当我module_1/cloudbuild.yaml作为cloudbuild配置引用时,构建失败,因为该文件不存在.我正在考虑可能的解决方法,我想问下列是否可行:

  1. 引用/cloudbuild.yaml为构建配置
  2. 添加一个步骤来获取cloudbuild.yaml中的gitmodule
  3. 运行不同的cloudbuild文件

结果应该类似于:

steps:
  - name: 'gcr.io/$PROJECT_ID/git'
    args: ['submodule', 'update', '--init']
  - name: 'some kind of command that runs cloudbuild.yaml`
    args: ['module_1/cloudbuild.yaml']
Run Code Online (Sandbox Code Playgroud)

免责声明 我知道我可以将所有cloudbuild配置放在根存储库中,但我希望这些模块尽可能地自我管理

git google-app-engine git-submodules google-cloud-platform google-cloud-build

9
推荐指数
1
解决办法
572
查看次数

如何更改 git 子模块的 HEAD

该项目有一个子模块并指向一个特定的 SHA(例如 62726c )。

所以每次运行git submodule update --init子模块目录时都会显示该 SHA (62726c )。

最近我对子模块进行了更改并推送了更改 SHA( f81611) 但如上所述,子模块的 HEAD 仍然指向旧的 SHA 62726c。

git git-submodules

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

添加git子模块作为VS中现有解决方案的参考

可以说我有子模块回购:

_git/DbModel (only source code indexed. No /bin or /obj folders)
Run Code Online (Sandbox Code Playgroud)

还有两个需要DbModel作为参考库的项目:

_git/TTT
_git/TPM
Run Code Online (Sandbox Code Playgroud)

我已经通过GitBash将DbModel作为子模块添加到它们中

 git submodule add https://RepoPath/_git/DbModel
Run Code Online (Sandbox Code Playgroud)

我的本地回购现在看起来像这样:

Source\Repos\TTT\TTT.sln
Source\Repos\TTT\DbModel\DbModel.sln

Source\Repos\TPM\TPM.sln
Source\Repos\TPM\DbModel\DbModel.sln
Run Code Online (Sandbox Code Playgroud)

我的团队资源管理器显示了现在可用的两种不同的解决方案,我可以轻松切换它们.

但.也许这是一个新手问题......

我不知道如何添加DbModel解决方案作为TPM和TTT的参考!当我在VS中单击"添加引用" - >"浏览"时,我只能添加".dll,.tlb,.olb,.ocx,.exe,.manifest"作为"参考文件".

它应该如何工作?我应该每次编译子模块解决方案并添加.dll作为参考吗?我需要添加源代码.

git projects-and-solutions visual-studio git-submodules

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

什么是'脏'子模块?

我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
查看次数

如何为“类似 boost”的多组件库编写 cmake 模块?

我目前正在编写一个 C++ 库,它有几个“子库”,例如 boost 库。

让我们将库命名为“TestLib”和子库“Base”和“Ext”,其中 Base 包含基本内容,不依赖于任何其他子库。然而,Ext 依赖于某些 Base 类。

每个“子库”都应该编译成一个单独的 .a 或 .so 文件,但它们都应该共享一个命名空间(TestLib)。现在我的目标是编写干净的 cmake 脚本以实现这一目标。

最后,我希望能够在 cmake 中做这样的事情:

find_package(TestLib 0.1 REQUIRED COMPONENTS Base Ext)
Run Code Online (Sandbox Code Playgroud)

或者

target_link_libraries(someapplication
PUBLIC
    TestLib::Base
)
Run Code Online (Sandbox Code Playgroud)

我将每个“子库”放在一个单独的 git 存储库中,并将它们作为子模块添加到一个新存储库中,该存储库只有一个 CMakeLists.txt,它只在每个存储库上调用 add_subdirectory。

我实现的大部分 cmake 东西,都是从https://pabloariasal.github.io/ 上的这个很棒的教程中获得的

并且 Base 部分按预期工作(这并不奇怪,因为它不依赖于其他任何东西)。

但是我的问题来自于 Ext 部分。为了编译它,我必须链接到 Base 库,这应该不会太难,并且经过一些试验和错误,我确信我会让它工作。

但我想以正确的方式做到这一点。

我的方法是

find_package(TestLib COMPONENTS Base)
Run Code Online (Sandbox Code Playgroud)

在 TestLib.Ext 的 CMakeLists.txt 中。但这无法找到,因为它没有 TestLibConfig.cmake。

这是有道理的,但我不知道在这个文件中放什么。

我试图提供一些准确描述我的问题的代码,但由于在这里发布太多了,我为此创建了一个 github:

https://github.com/PowerSupplyTopologies/TestLib

这应该包含所有相关的代码。

这对你们中的一些人来说可能是微不足道的,但我敢打赌有更多的人可以从这种方法中受益。

预先感谢您的任何想法。

编辑:

Base的CMakeLists.txt中的库创建是:

set(TARGET_NAME testlibbase)

add_library(${TARGET_NAME}
    src/ClassA.cpp
    src/ClassB.cpp
)

#Add an alias …
Run Code Online (Sandbox Code Playgroud)

c++ cmake libraries git-submodules cmake-modules

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

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

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

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

没有子模块的分支曾经有一个子模块,我按照此 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
查看次数