问题标签 [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.
git - 使用 git subrepos 进行功能分支
我有一个使用 git subrepo 的项目:https ://github.com/ingydotnet/git-subrepo我正在尝试弄清楚如何将功能分支实现为开发工作流程。
这是我到目前为止所拥有的:
- 在 monorepo 中创建一个分支
- 在 monorepo 中进行更改
- 为您的分支发出拉取请求到 master
- 将拉取请求合并到 master 后,运行
git subrepo push --all
以将提交也推送到各自的 repos
这听起来对吗?在任何时候我都不必使用git subrepo branch
,或者git subrepo commit
我觉得这个工作流程实际上并不是使用 git subrepos 进行功能分支的预期工作流程。如果我建议的工作流程是正确的,那么 subrepo 分支和提交命令的实际目的是什么?
git - 使用特定的 subrepo 分支创建顶级 repo 分支
拥有一个由一个顶级仓库和多个子仓库组成的 git 基础架构。然后我们有一个 Jenkins 基础设施,它需要一个特定的 top-repo-branch 在其上执行管道。
现在,我已将代码提交并推送到其中一个子存储库中的自定义分支。
自然地,我想用我的自定义代码测试 jenkins 管道,而不是先合并到 master 中或先开发。
因此,我如何创建一个包含所有存储库(通常是开发)中的默认分支的顶级存储库分支,除了我处理过的一个存储库,它应该在哪里签出我的自定义分支?
git - 如何从主 git 存储库中删除未跟踪的目录树(子模块/子存储库)?
对于我的生活,我似乎无法从主 git 存储库中“删除”未跟踪的子模块/目录。我尝试了各种语法,但我不断收到“pathspec”错误,指出不匹配,即使该文件夹位于普通站点中。我将它添加到了.gitignore
,它还没有被添加或提交到主存储库,但是Untracked files:
当我运行时它一直显示为红色git status
,我无法摆脱它。git clean -n
也没有显示任何内容。
关于我在这里做错了什么的任何线索?
需要明确的是:我不想删除子回购,我只想完全单独跟踪子回购并让主回购完全忽略它,就好像它不存在一样。
谢谢。
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 页面上供开发人员使用。
git - 如何从超级项目回购中挑选到子文件夹回购?
将子文件夹拆分到新存储库后,您仍然可以将原始存储库用作新存储库的远程和cherry-pick
修剪提交。
我能想到的唯一选择是filter-branch
第二次,将其作为第二个遥控器推送,然后cherry-pick
从第二个遥控器推送到新的存储库。
我不知道这是反向子模块还是反向子树。
git - 不分离头的git子模块替换
我的情况:我有大量用于各种任务的计算机。我有大量的库,每个库都有自己的 git repo。
我的愿望:我希望能够在任何计算机上修改其中一个库,执行 git commit/push;然后转到另一台计算机,执行git pull
,并更新所有库。然后我修改其中一个库,提交/推送,当我拿到下一台计算机时,一切正常。
我目前的尝试:我有一个顶级 git 项目,它将所有其他库 repos 合并为子模块。这包括一个 .gitmodules 文件,该文件通过使用指定每个模块的工作分支
我已经update = merge
为每个模块设置了。我已经submodule.recurse
设置为 true,所以git pull
在顶层对每个模块做一些事情。
它是如何被打破的: 头变得分离。我编写了一个脚本来解析.gitmodules
文件并执行checkout
每个模块的相应分支。我然后commit
和push
顶部模块。每当我修改东西并尝试拉动时,例如在另一台机器上,头部就会分离。如果我在开始修改之前没有注意到头部已分离,我必须在提交更改之前仔细整理残骸。
在过去的十年里,实际上有 3.6k 的关于 git 分离头的堆栈溢出问题,而且大多数似乎来自子模块功能。我还没有经历所有这些,但我尝试过的没有奏效。
我忘记了为什么我拒绝了git-subtree
,但git-subrepo
一年多没有接触过,有 153 个问题和 25 个拉取请求待处理,所以我认为它已经死了。
有没有人对此有有效的解决方案?
@vonC 接受的答案看起来不错。
我可能可以稍微简化一下,但是我的顶级项目的自述文件现在说:
推荐结帐:
从存储库更新
如果头部脱落,请使用
添加模块
在以下示例中名为newmodule
working on path的模块。develop
如果子模块在默认master
分支上,您仍然需要配置该分支。
如果将子模块切换到不同的分支,则必须在顶层重新配置
并推送子模块和顶级项目。
在不同的工作目录(例如在不同的机器上),您必须