问题标签 [git-subrepo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
505 浏览

git - 使用 git subrepos 进行功能分支

我有一个使用 git subrepo 的项目:https ://github.com/ingydotnet/git-subrepo我正在尝试弄清楚如何将功能分支实现为开发工作流程。

这是我到目前为止所拥有的:

  1. 在 monorepo 中创建一个分支
  2. 在 monorepo 中进行更改
  3. 为您的分支发出拉取请求到 master
  4. 将拉取请求合并到 master 后,运行git subrepo push --all以将提交也推送到各自的 repos

这听起来对吗?在任何时候我都不必使用git subrepo branch,或者git subrepo commit我觉得这个工作流程实际上并不是使用 git subrepos 进行功能分支的预期工作流程。如果我建议的工作流程是正确的,那么 subrepo 分支和提交命令的实际目的是什么?

0 投票
1 回答
56 浏览

git - 使用特定的 subrepo 分支创建顶级 repo 分支

拥有一个由一个顶级仓库和多个子仓库组成的 git 基础架构。然后我们有一个 Jenkins 基础设施,它需要一个特定的 top-repo-branch 在其上执行管道。

现在,我已将代码提交并推送到其中一个子存储库中的自定义分支。

自然地,我想用我的自定义代码测试 jenkins 管道,而不是先合并到 master 中或先开发。

因此,我如何创建一个包含所有存储库(通常是开发)中的默认分支的顶级存储库分支,除了我处理过的一个存储库,它应该在哪里签出我的自定义分支?

0 投票
1 回答
58 浏览

git - 如何从主 git 存储库中删除未跟踪的目录树(子模块/子存储库)?

对于我的生活,我似乎无法从主 git 存储库中“删除”未跟踪的子模块/目录。我尝试了各种语法,但我不断收到“pathspec”错误,指出不匹配,即使该文件夹位于普通站点中。我将它添加到了.gitignore,它还没有被添加或提交到主存储库,但是Untracked files:当我运行时它一直显示为红色git status,我无法摆脱它。git clean -n也没有显示任何内容。

关于我在这里做错了什么的任何线索?

需要明确的是:不想删除子回购,我只想完全单独跟踪子回购并让主回购完全忽略它,就好像它不存在一样。

谢谢。

0 投票
0 回答
1909 浏览

git - 开始使用 git-subrepo

我一直在使用git subtree一段时间,但最近遇到了git subrepo并想切换。我承认这个项目仍处于早期阶段,但评论表明它已经足够稳定,可以生产大约几年。

我无法开始使用,我不确定这是不兼容问题、设置不当还是其他原因。我希望这里的人有他们可以分享的经验。

首先,我运行的是 Windows 10 和 Git 版本 2.23.0.windows.1。文档表明我应该很好。我克隆了 repo,然后在 Git 中成功运行了一些命令

然后我sub_a通过my_project从. 这个 subrepo 有预期的文件和git-subrepo 添加的文件。git subrepo clone <path_to_sub_a>my_project.gitrepo

现在,如果我sub_a从内部进行更改my_project并尝试推动更改,我会遇到问题。

另外,如果我对 GitHub 上的 repo 进行上游更改sub_a并尝试将其拉到my_project,我会收到类似的错误。

或者用调试

如果我们无法在此处解决问题,我也会将其作为问题发布在 GitHub 页面上供开发人员使用。

0 投票
1 回答
73 浏览

git - 如何从超级项目回购中挑选到子文件夹回购?

将子文件夹拆分到新存储库后,您仍然可以将原始存储库用作新存储库的远程和cherry-pick修剪提交。

我能想到的唯一选择是filter-branch第二次,将其作为第二个遥控器推送,然后cherry-pick从第二个遥控器推送到新的存储库。

我不知道这是反向子模块还是反向子树。

0 投票
1 回答
48 浏览

git - 不分离头的git子模块替换

我的情况:我有大量用于各种任务的计算机。我有大量的库,每个库都有自己的 git repo。

我的愿望:我希望能够在任何计算机上修改其中一个库,执行 git commit/push;然后转到另一台计算机,执行git pull,并更新所有库。然后我修改其中一个库,提交/推送,当我拿到下一台计算机时,一切正常。

我目前的尝试:我有一个顶级 git 项目,它将所有其他库 repos 合并为子模块。这包括一个 .gitmodules 文件,该文件通过使用指定每个模块的工作分支

我已经update = merge为每个模块设置了。我已经submodule.recurse设置为 true,所以git pull在顶层对每个模块做一些事情。

它是如何被打破的: 头变得分离。我编写了一个脚本来解析.gitmodules文件并执行checkout每个模块的相应分支。我然后commitpush顶部模块。每当我修改东西并尝试拉动时,例如在另一台机器上,头部就会分离。如果我在开始修改之前没有注意到头部已分离,我必须在提交更改之前仔细整理残骸。

在过去的十年里,实际上有 3.6k 的关于 git 分离头的堆栈溢出问题,而且大多数似乎来自子模块功能。我还没有经历所有这些,但我尝试过的没有奏效。

我忘记了为什么我拒绝了git-subtree,但git-subrepo一年多没有接触过,有 153 个问题和 25 个拉取请求待处理,所以我认为它已经死了。

有没有人对此有有效的解决方案?


@vonC 接受的答案看起来不错。

我可能可以稍微简化一下,但是我的顶级项目的自述文件现在说:

推荐结帐:

从存储库更新

如果头部脱落,请使用

添加模块

在以下示例中名为newmoduleworking on path的模块。develop

如果子模块在默认master分支上,您仍然需要配置该分支。

如果将子模块切换到不同的分支,则必须在顶层重新配置

并推送子模块和顶级项目。

在不同的工作目录(例如在不同的机器上),您必须