标签: git-submodules

致命:远程错误:上传包:不是我们的参考

我们只在 CI 上看到一个奇怪的错误。我们有一个 git 存储库(我们称之为“OUTER”),其中包含一个子模块(“INNER”)。如果我们在开发机器上正常克隆“OUTER”并更新子模块,我们不会发现任何问题。在 CI 上,Bitrise 以奇怪的方式“克隆”存储库后,git fetch在尝试获取子模块时调用会抛出错误。

\n

这是一个示例输出。请注意,前几行模拟 Bitrise 如何“克隆”存储库。

\n
\xe2\x9e\x9c test git "init"\ngit "remote" "add" "origin" "git@github.com:COMPANY/OUTER.git"\ngit "fetch" "--jobs=10" "--no-tags" "origin" "refs/heads/master"\ngit "checkout" "master"\ngit "merge" "origin/master"\ngit "submodule" "update" "--init" "--recursive" "--jobs=10"\n\nhint: Using \'master\' as the name for the initial branch. This default branch name\nhint: is subject to change. To configure the initial branch name to use in all\nhint: of your new repositories, which will suppress this warning, call:\nhint: \nhint:   git config --global init.defaultBranch …
Run Code Online (Sandbox Code Playgroud)

git git-submodules

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

如何在 GitHub Action 中使用私有子模块 git 克隆私有存储库?

我的组织(或我的用户)内有两个私有 GitHub 存储库。其中一个包含另一个作为子模块。如何克隆另一个私有存储库及其包含的子模块?

我试过

- uses: actions/checkout@v3
  with:
    submodules: true
Run Code Online (Sandbox Code Playgroud)

但是,这失败了,子模块部分出现错误消息,我是否应该添加一些权限或其他权限?

Fetching submodules
  /usr/bin/git submodule sync
  /usr/bin/git -c protocol.version=2 submodule update --init --force --depth=1
  Submodule '.github/workflows/MYPROJECT1' (https://github.com/MYUSER/MYPROJECT1.git) registered for path '.github/workflows/MYPROJECT1'
  Cloning into '/home/runner/work/MYPROJECT2/MYPROJECT2/.github/workflows/MYPROJECT1'...
  remote: Repository not found.
  Error: fatal: repository 'https://github.com/MYUSER/MYPROJECT1.git/' not found
  Error: fatal: clone of 'https://github.com/MYUSER/MYPROJECT1.git' into submodule path '/home/runner/work/MYPROJECT2/MYPROJECT2/.github/workflows/MYPROJECT1' failed
  Failed to clone '.github/workflows/MYPROJECT1'. Retry scheduled
  ... more errors
Run Code Online (Sandbox Code Playgroud)

github git-submodules github-actions

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

在这种情况下如何使用Git处理共享代码?

我目前正在尝试将我们的版本控制切换到Git(来自CVSNT).令人惊讶的是,这不是我遇到问题的分期性或临时区域的概念.但是,我很难解决AFAICT操作(如分支,合并和标记)始终应用于存储库级别而不是文件或目录级别的问题.

我们在不同的项目中重用了很多代码.我的工作区目前看起来像这样:

/Dev
  /Libs
    /LibA
    /LibB
    /LibC
  /Project1
  /Project2
  /Project3
  /WebDev
Run Code Online (Sandbox Code Playgroud)

现在,假设Project1依赖于LibA和LibB,Project2依赖于LibB和LibC,而Project3没有lib依赖.其中一些lib后来被编译成DLL(或BPL-我们的主要开发环境是Delphi),其他只是可重用代码的集合,它们逐个文件地包含在主项目中.

WebDev包含我们(主要是静态的)公司网站的代码,该网站还包含有关Project1,2,3的信息,因此可能必须与它们一起标记.

由于我在项目之间切换很多,我通常会同时检查所有这些,在必要时将lib目录即时更新到相应的项目分支.

我将如何在Git中对此进行建模,是否有理由坚持这种工作方式?我已经阅读了关于git子模块但是到目前为止我没有看到我将如何应用这里有几个原因:

  • 据我所知,子模块总是会在各自的"超级项目"中检出.但是,我们发现使用Delphi管理(设计时)库代码的多个副本是皇家PITA,这是我们将所有库保存在单个项目树之外的公共目录下的原因之一.其他副本只能通过构建自动化进行检查,从不进行任何实际工作.

  • 我真的不希望libs与项目"独立":如果我标记或分支其中一个项目,我总是想标记或分支各自的库.当我想回到主项目的特定标记版本时,我希望libs也可以恢复到该状态.如果可能,标记/分支/签出应始终在项目及其依赖项的单个步骤中发生.

我已经尝试将所有内容放在一个Git存储库中,其中库代码主要在主分支上进行管理,并且每个"项目"都在自己的分支上,但每当我尝试合并主服务器和项目分支之间的lib更改时,它就会拉动来自不相关的libs的所有文件,这根本不是我想要的......

你们有什么想法如何最好地解决这一切?我对所有的建议都持开放态度,包括我工作树的新布局.

如果有人能指出我关于子模块的实际动手教程(或者我需要完成的任何其他技术),那也很棒.

git version-control git-submodules version-control-migration

6
推荐指数
1
解决办法
1745
查看次数

使用提交提交的Git子模块时有哪些选项?

在工作中,我们正在处理十几个Java OSGi包,每个包都有自己的git存储库.从长远来看,所有捆绑包都是相互独立的,这证明了各个存储库的合理性 - 尽管现在我们仍然经常同时修改其中的几个.

当我们进行产品发布(由所有包组成)时,会在每个包中创建一个新分支,这有点痛苦.因此我们考虑使用git-submodule来缓解疼痛(类似的事情git submodule foreach <cmd>).

因此,我们所需的设置将是一个主项目Product,以及每个包的子模块:

Project/
  BundleA/
  BundleB/
  BundleC/
Run Code Online (Sandbox Code Playgroud)

现在,我花了几个小时阅读所有关于子模块的内容,我明白如果我修改内容BundleA,我必须提交BundleA,推送,然后提交子模块更改Project并再次推送.

这听起来好像不是git-submodule设计为首先使用的方式.这样使用它是违反最佳做法的吗?或者听起来像一个替代选择的情况?

  • 裸机git-submodule用法
  • 使用现有的"git包装器":
  • 编写我自己的简单bash脚本来批量处理OSGi包

任何其他建议欢迎.

git repository git-submodules git-slave

6
推荐指数
1
解决办法
858
查看次数

在提交时忽略子模块脏状态

我有一个带子模块的存储库.对我来说,这个子模块是只读的,所以我使用submodule.Module.ignore = dirty.

这适用于'git status',但是当我提交时,整个子模块被扫描,并且在git的注释中我可以看到它很脏.

有办法避免这种情况吗?

git git-submodules

6
推荐指数
1
解决办法
1624
查看次数

Git日志不显示子模块更改

我有一个提交master,hash 6877146,它更新了一个子模块.

$ git show 6877146
commit 6877146f1781bfbd4ec3ae2a27121a606f5f688e
Author: [snip]
Date:   Wed Feb 22 16:10:20 2012 +0000

    updating potatobase

diff --git a/potatobase b/potatobase
index 5877e2c..b77ba62 160000
--- a/potatobase
+++ b/potatobase
@@ -1 +1 @@
-Subproject commit 5877e2c2d82645fa44f121884291ee48cf24584d
+Subproject commit b77ba624d6a1c5e62d434ad2d06383604aeab431
Run Code Online (Sandbox Code Playgroud)

这个提交在master分支上,我目前已检查过:

$ git branch -a --contains 6877146
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/ticket-1479-refactor-blade-json-functions
Run Code Online (Sandbox Code Playgroud)

但是,在子模块上执行git log并不会显示提交:

$ git log potatobase | grep 6877146
$
Run Code Online (Sandbox Code Playgroud)

如果我明确地检查了这个提交,它就在日志中:

$ git checkout 6877146
$ git log potatobase | grep 6877146
commit 6877146f1781bfbd4ec3ae2a27121a606f5f688e
Run Code Online (Sandbox Code Playgroud)

当我检查出master时,为什么这个提交没有显示在日志中?它已经合并为主人:

$ …
Run Code Online (Sandbox Code Playgroud)

git git-submodules

6
推荐指数
1
解决办法
1616
查看次数

在github上托管项目中使用的boost的子集

我在github上使用git进行源代码控制和托管.我们正努力让回购尽可能小.

我决定为项目添加提升,(相对于我们的要求)非常大.我已经提取了所需功能的子集.现在我对如何在git上处理这个问题感到困惑.我应该将我的boost子集添加到存储库吗?如果我将boost作为子模块添加,下载大小将会有点大(我假设,我没有测试过这个).

这通常是怎么做的?

c++ git boost github git-submodules

6
推荐指数
1
解决办法
1197
查看次数

移动包含子模块的git工作副本

最近Git的更改改变了.git使用子模块时目录的处理方式..git现在,所有内容都位于"根级别" .git目录(与包含子模块的工作副本相对应的目录)中,而不是每个子模块有一个.

然后,在每个子模块中,创建一个指向.git目录新位置的文件.

在我的项目中,我有以下.gitmodules文件:

[submodule "tests/shared-tests"]
        path = tests/shared-tests
        url = git://github.com/roboptim/roboptim-shared-tests.git
[submodule "cmake"]
        path = cmake
        url = git://github.com/jrl-umi3218/jrl-cmakemodules.git
Run Code Online (Sandbox Code Playgroud)

当我这样做时git clone --recursive,我获得:

$ cat cmake/.git
gitdir: /home/moulard/profiles/default-x86_64-linux-ubuntu-12.04.1/src/unstable/roboptim/roboptim-core/.git/modules/cmake
Run Code Online (Sandbox Code Playgroud)

我目前正在使用Git 1.8.1.5.

我的问题是:

  1. 为什么这种行为会改变?我认为这一新战略没有任何明显的好处.
  2. 我怎样才能安全地移动工作副本?(如果我移动我的工作副本,我会收到一条错误消息,告诉我损坏的gitdir的路径不再是Git存储库)

请注意,这是不一样的前一个问题移动包含子模块一个Git仓库的父目录在这个意义上,我肯定这不是一个绝对路径在我的存在相关的问题.gitmodules的文件.

git git-submodules

6
推荐指数
1
解决办法
4578
查看次数

将子项目作为常规文件夹添加到存储库

我注意到在我的目录中有两个模块是我的Git存储库的Subprojects.发生这种情况是因为我将它们全部移动到一个Git仓库并且这些模块(目录)有自己的.git目录.

当我在这些模块中更改任何内容时,我不会在主Git存储库中看到任何更改.我只会看到这个:

+Subproject commit e97ff0348e6adc697192ca4e6a367bdaeddcda6b-dirty
Run Code Online (Sandbox Code Playgroud)

等等

但我不需要那个.我只需要一个没有任何子项目的Git存储库.所以我删除了.git这些子项目中的目录.现在我在主存储库中看不到任何变化.

我试着add *和git init.但它只是看不到那些目录,即使它在存储库中.我怎样才能让Git看到那些目录,所以它会像其他模块一样跟踪它们的变化?

我的Git存储库看起来像这样:

my_project/
 .git
 dir1
 dir2
 dir3 # Let's say this is the one directory that Git does not see. So any changes I make here are not tracked at all.
 ...
 ...
Run Code Online (Sandbox Code Playgroud)

PS那些未跟踪的目录不为空.

更新 如果我重命名该目录,那么执行以下操作: git diff

我明白了:

diff --git a/dir3 b/dir3
deleted file mode 160000
index e279fc4..0000000
--- a/dir3
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit e279fc481b9706ad79b24281efdbabd55179aee8
Run Code Online (Sandbox Code Playgroud)

如果我将该目录重命名为原始名称,那么执行git diff …

git repository git-submodules

6
推荐指数
1
解决办法
2026
查看次数

Sourcetree:如何忽略子模块

Sourcetree默认情况下会提取子模块,这是CLI不做的事情(由dafault提供).如何阻止sourcetree拉动子模块?

git-submodules atlassian-sourcetree

6
推荐指数
0
解决办法
791
查看次数