标签: git-submodules

用Git移动子模块

有没有办法移动超级项目中的子模块而不先删除它们并重新添加它们?

git move git-submodules

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

为什么hg总是提交一个git子模块,即使它没有改变?

我有一个hg存储库,带有一个hg子存储库,它有一些git子模块.(我知道这听起来很疯狂,但它正在使用谷歌代码中的svn repos,github中的libs和bitbucket中的模块.我正在使用由一群人自由提供的代码,我是谁来抱怨他们的决定版本控制 - 我想要的是代码,我很感激.

关于这种情况的一点"树":

+ hg repo
  + hg subrepo
    + git submodules
Run Code Online (Sandbox Code Playgroud)

当我更改hg子存储库中的文件并提交时,它会提交所有git子模块,即使它们没有被更改.我已经运行了hg status,它没有显示任何关于git子模块的信息,但如果我提交:

committing subrepository SUBREPO
Run Code Online (Sandbox Code Playgroud)

如果我只使用一个带有一堆git子模块的hg主回购,那就不会有问题了.当我在第一个hg存储库中进行更改时,问题依赖于:现在,当我提交时,它会在hg存储库和hg子存储库中提交,因为它总是提交git子模块.所以现在,我有一个评论,设计只在第一个hg存储库,并在hg子存储库中的相同注释.

对于我committing subrepository SUBREPO使用git子模块在hg repository/subrepository上进行的每次提交,我如何避免这种干扰?这是一个错误吗?这是一个git设计(也许git存储库总是至少改变一个"状态"文件或类似的东西,总是在拉动后改变?我没有太多的git经验...)

git version-control mercurial git-submodules

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

添加/删除git子模块的麻烦

我正在尝试将git子模块添加到我的项目中,特别是ShareKit.我的项目是一个git repo,当我尝试输入时

git submodule add git://github.com/ShareKit/ShareKit.git Submodules/ShareKit
Run Code Online (Sandbox Code Playgroud)

进入终端我得到一个错误,说子模块已经存在.我想我刚刚在这个项目中添加了它,并最终没有使用它并且不正确地从项目目录中删除它(最有可能删除子模块文件夹).所以我尝试着做

git rm --cached Submodules/ShareKit
Run Code Online (Sandbox Code Playgroud)

根据如何删除子模块?,现在当我尝试使用第一段代码再次添加子模块时,我得到了这个:

A git directory for 'Submodules/ShareKit' is found locally with remote(s):
origin  git://github.com/ShareKit/ShareKit.git
If you want to reuse this local git directory instead of cloning again from
git://github.com/ShareKit/ShareKit.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.
Run Code Online (Sandbox Code Playgroud)

而且我不确定该怎么做.我对git很新,我需要在我的项目中得到这个 - 有没有办法只是擦除项目中的所有git并从头开始?我只是用一个新项目做到这一点,但除此之外它已经非常完整,从头开始并将所有内容复制完毕将非常耗时.我让ShareKit在测试应用程序中工作,安装正确,有什么理由我不能将该文件夹中的所有ShareKit文件复制到我需要的文件夹中吗?

编辑:我试过了

git submodule deinit Submodules/ShareKit
Run Code Online (Sandbox Code Playgroud)

这给了我这个错误:

error: …
Run Code Online (Sandbox Code Playgroud)

git git-submodules

9
推荐指数
2
解决办法
6787
查看次数

使用 '--depth' 选项浅更新 git 子模块

git submodule update已支持--depth此答案中所述的选项。

但是我们仍然无法轻松确定深度值,这可能会使 git 无法找到子模块的预期修订版。

浅层更新子模块是否有真正的解决方案?

git git-submodules

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

是否有Prolog的包管理器?

我想知道与其他程序员共享Prolog代码/库的最佳实践(以及多个项目之间的自己).我自己也在使用SWI-Prolog,但也对其他Prolog如何解决这个问题感兴趣.

相比之下,Java有Maven + JAR,Python有EasyInstall + PythonEggs,其他语言可能还有很多其他语言.但Prolog还有吗?

SWI-Prolog包

在SWI-Prolog中有Packs,由模块支持library(prolog_pack).这些的缺点是:

  1. 您必须为每个包创建存档文件或Git存储库.说我想创建10包.现在我需要创建10个Git存储库.我有时会编辑影响多个文件,可能驻留在多个包/ repos中,要求我为单个(多文件)编辑提交几个Git存储库.
  2. 为了创建一个包,你必须手工挑选一些"属于一起"的文件.有时候我发现文件X属于包A和包B.现在我需要在存储库A和B中维护文件X的副本,或者我需要创建另一个包C只包含X和导入C到A和B.
  3. 包在公共网站上发布.我的大部分图书馆对我来说都很有趣.其中一些对我与之合作的特定人员很有意思,只有少数人准备好进行更广泛/公开的传播.
  4. 包维护者必须指定包间依赖关系.对于复杂的图书馆等级,对我来说似乎是不必要的工作.我已经非常严格地使用Prolog模块,并且只想使用Prolog模块导入的层次结构作为依赖图.

Git子模块

另一种我直到现在使用过的方法是Git子模块.通过将一个存储库导入另一个存储库来实现库之间的依赖关系.这与SWI-Prolog包有一些相同的缺点:

  1. 每个库的Git存储库,因此需要维护大量存储库.
  2. 维护者必须明智地选择每个repo的文件,并且必须指定需要哪些Git子模块包含.
  3. 更新现有库非常困难.我发现(困难的方法)我交给代码的大多数人都无法成功更新具有许多错综复杂的相互依赖的子模块导入的Git存储库.(我非常尊重偶尔使用子模块的Git大师并且总是把它做对,但是大多数非程序员和我工作的很多程序员都觉得它太难了.)

我的理想方法

我个人对完美的Prolog代码共享方法的偏好是:

  1. 您传播的库的数量和您拥有的Git存储库的数量是独立的.具体来说,我可以有一个相当大的存储库,其中的一部分以不同的方式传播.如果有人喜欢(重新)使用我的Prolog模块和DCG帮助器谓词,那么我可以简单地向该人传播该单个文件(加上潜在的依赖关系).
  2. 您不必亲自挑选和手动复制单个文件,而是让算法遍历模块导入的层次结构以提取(显然)属于一起的文件.首次运行程序时会下载文件.这些文件可能都属于同一个Git存储库或多个存储库,算法根本不关心存储库和库之间或存储库和文件之间的映射.
  3. 代码的维护者能够决定一个库是公开发布还是发布给有限的一组人(或者只限于包括维护者在内的有限组).
  4. 文件之间的模块导入层次结构是依赖关系跟踪所需的全部内容.

以上暗示我理想的库共享方法是基于文件的,而不是基于包的.如果Prolog模块A使用Prolog模块B并且加载了A,则从本地文件(如果存在)加载B或从存储库下载B. 我不确定基于文件的方法在其他语言中有多常见.前面提到的Maven + JAR和EasyInstall + PythonEggs都是基于包的.

我对其他Prolog程序员使用和思考这个主题非常感兴趣!

module package-managers prolog swi-prolog git-submodules

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

如何将git仓库中的目录镜像到另一个git仓库?

我有一个目录/amp中RepoA和RepoB(与/放大器的内容填充最初).我想将/ampRepoA中的任何更改镜像 到RepoB.

可能吗 ?

PS:RepoA包含许多其他目录.我只想镜像/ amp dir.而RepoB只会有/ amp内容而不是其他内容.

git github git-submodules git-subtree

9
推荐指数
2
解决办法
1254
查看次数

Conda 将一个 environment.yml 导入另一个

考虑将具有依赖项的 Python 子模块导入具有自身依赖项的项目的情况。假设子模块有它的environment.yml文件,而项目本身有一个environment.yml文件。

有没有办法创建一个包含这两个环境规范的环境,如果是这样,您将如何进行?(或者是否有更好/更优选的方法来处理这种情况?)

python git-submodules conda

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

如何将子模块中的更改提交到我的主项目存储库?

首先,我有一个主项目和一个子模块。

我想做的是:

  1. 修改子模块的代码
  2. 提交到主项目git存储库
    • 让主项目可以跟踪更改
  3. 更改不会提交到子模块的 git 存储库
    • 事实上我无权推动承诺
    • 但我仍然可以从中提取最新的提交

我想跟踪并更新子模块到主项目的更改;同时,我还可以从子模块刷新。

有没有更简单的方法来实现这一目标?

git github git-submodules

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

运行 git submodule add 命令时获取“请确保 .gitmodules 文件在工作树中”

我是 git 新手,目前正在考虑从 mercurial 移植一些大型项目。我们有一个根项目,它只包含对所有外部项目(git 中的子模块)的引用。我正在尝试在 git 中重新创建它。

我已经将一个项目 (foo) 导入到 gitib 中。我创建了一个新的空项目(root)并将其克隆到本地。我想使用添加 Foo 作为子模块

git submodule add https://github.com/.../foo.git
Run Code Online (Sandbox Code Playgroud)

来自 /c/Work/GitHub/root (master)

但我不断收到“请确保 .gitmodules 文件在工作树中”。

查看文档,此命令的第一次运行应创建 .gitmodules 文件,但即使我手动创建它也会收到此错误。在谷歌上寻找这个错误只会返回带有错误的源文件,但没有解释为什么我会得到它。我认为这只是我对 git 的了解不足。

我做错了什么?

编辑:我也试过。

mkdir test
cd test
git init
git submodule add https://github.com/.../foo.git
Run Code Online (Sandbox Code Playgroud)

我犯了同样的错误。

git git-submodules

9
推荐指数
2
解决办法
6662
查看次数

从 azure pipeline 检出 git 子模块

我目前正在开发一条天蓝色的管道。在我的主 github 存储库(存储库 A)中,我添加了另一个 github 存储库作为子模块。(回购协议B)

我的目标是使用以下 YAML 在管道开始处签出子模块:

stages:
- stage: checkout
  jobs:
  - job: checkout
    steps:
      - checkout: self
        submodules: true
        persistCredentials: true
Run Code Online (Sandbox Code Playgroud)

然后尝试签出子模块,但以以下错误结束:

Cloning into '/home/vsts/work/1/s/devops-scripting'...
fatal: could not read Username for 'https://github.com': terminal prompts disabled
fatal: clone of 'https://github.com/sourcerepo/devops-scripting.git' into submodule path '/home/vsts/work/1/s/devops-scripting' failed
Run Code Online (Sandbox Code Playgroud)

这似乎是使用不正确的用户/密码的问题 - 如果我推动我可以简单地使用提供的用户/密码参数,但这似乎不适用于签出。

如何通过天蓝色管道更新子模块?

git azure git-submodules azure-pipelines

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