如何将一个存储库的公共子文件夹与另一个存储库同步?

2024-02-06

我有一个软件项目foo在我公司托管的内部 GitLab 存储库上,并希望将其部分发布为开源项目baa在 GitHub 上。

假设我将公共部分放在“public”文件夹中:

foo/public

以及文件夹“private”中的私有部分:

foo/private

我怎样才能同步public包含公共 GitHub 存储库的文件夹https://github.com/user/new_repository.git ?

在我最疯狂的梦想中我会:

a)自动化管道 (gitlab-ci.yml)foo,转发/同步的每个更改public文件夹到 baa

b)允许外部用户做出贡献baa并能够以某种方式将他们的更改合并回foo.

c)作为 a) 的替代方案,可以在满足某些要求(例如新功能的导出控制)后仅不时进行同步。

我看到了 git 命令

  1. git 子模块

  2. git 子树

and the

  1. GitLab 的存储库镜像功能:

https://docs.gitlab.com/ee/user/project/repository/mirror/ https://docs.gitlab.com/ee/user/project/repository/mirror/

但我不确定它们是否适用于我的用例。

假设我想使用以下部分foo作为子模块baa...如何确保只有文件夹public是考虑而不是整个项目?

也许我的方法是错误的,我应该首先尝试将公共和私人部分分离到各个项目中。

相关问题和文章:

如何将文件夹从 git 存储库链接到另一个存储库? https://stackoverflow.com/questions/36554810/how-to-link-folder-from-a-git-repo-to-another-repo

如何使用 SSH 密钥将 GitLab 存储库镜像到 GitHub? https://stackoverflow.com/questions/76456288/how-to-mirror-a-gitlab-repository-to-github-using-ssh-keys

https://www.atlassian.com/de/git/tutorials/git-subtree https://www.atlassian.com/de/git/tutorials/git-subtree

如何 git “子树拆分”但保持完整的文件夹层次结构? https://stackoverflow.com/questions/32940679/how-do-i-git-subtree-split-but-maintain-the-full-folder-hierarchy


在评论的帮助下,我找到了如下所示的解决方案。

  • A uses submodule并且更接近于a)从问题中。

  • B uses subtree并且更接近于c)从问题来看,似乎不那么复杂。

0. 用公用文件夹的内容填充单独的存储库

将文件夹“public”的内容推送到新存储库:

cd public    
git init --initial-branch=main    
git remote add origin https://github.com/user/new_repository.git    
git add .    
git commit -m "Initial commit"     
git push -u origin main

A. 使用单独的存储库作为子模块“public”

集成子模块

  • 删除主文件夹内的公用文件夹

  • 提交主文件夹(=>应用公用文件夹的删除)

  • 添加新存储库作为子模块“public”:

    git 子模块添加 -b mainhttps://github.com/user/new_repository.git https://github.com/user/new_repository.git public

    git 子模块更新 --remote

git submodule add 命令创建一个文件 .gitmodules ,其中包含

[submodule "public"]
    path = public
    url = https://github.com/user/new_repository.git
    branch = main
  • 提交并推送主文件夹

新鲜克隆

如果其他人做了新鲜克隆主体工程中,递归的需要使用选项。否则子模块文件夹“public”的内容将为空。

提交子模块的更改

如果有人更改了子模块的内容,则需要分别提交/推送子模块和主项目。这似乎是子模块方法的一个缺点。

如果我更改子模块的文件,主项目不会将其识别为更改(提交对话框列表将为空)。一旦我使用子模块文件夹提交了更改,主项目就会识别出更改(子模块的新版本)。然后主要项目也需要提交。

TortoiseGit 的推送对话框的“Recurse submodule”选项的值为“Ondemand”:

因此,至少主模块项目和子模块项目都可以执行推送操作。 (如果有一个命令可以提交并推送两者,请告诉我。)

子模块使用的相关问题

如何“git克隆”一个存储库,包括它的子模块? https://stackoverflow.com/questions/3796927/how-do-i-git-clone-a-repo-including-its-submodules

如何在 git 子模块中“提交”更改? https://stackoverflow.com/questions/5542910/how-do-i-commit-changes-in-a-git-submodule

如何直接在当前目录中添加 git 子模块的内容,而不需要额外的项目文件夹? https://stackoverflow.com/questions/76462811/how-to-add-the-content-of-a-git-submodule-directly-in-the-curent-directory-with

git 子模块跟踪最新 https://stackoverflow.com/questions/9189575/git-submodule-tracking-latest?answertab=active#tab-top

B. 使用单独的存储库作为子树“public”

包括子树

  • 删除主文件夹内的公用文件夹

  • 提交主文件夹(=>应用公用文件夹的删除)

  • 使用 subtree 命令在本地包含存储库的文件


git subtree add --prefix public https://github.com/user/new_repository.git main --squash 
  • 推送主文件夹(提交已由subtree add命令)

新鲜克隆

  • 新克隆包括子树的所有文件。与子模块相比,不需要额外的命令或选项。

提交子树的更改

  • 子树中的更改被父/主项目识别为正常文件更改,并默认与主项目一起提交。

  • 提交到主项目时,子树的存储库不会自动更新。

  • 为了将本地更改应用到子树存储库,请使用以下显式命令:


git subtree push --prefix public https://github.com/user/new_repository.git main --squash

可以引入一个alias对于 url,使命令的整体长度变短,使用git add remote, see https://www.atlassian.com/git/tutorials/git-subtree https://www.atlassian.com/git/tutorials/git-subtree

拉取子树的变化

git subtree pull --prefix public https://github.com/user/new_repository.git main

子树相关文章

  • https://gist.github.com/SKempin/b7857a6ff6bddb05717cc17a44091202 https://gist.github.com/SKempin/b7857a6ff6bddb05717cc17a44091202

  • https://www.atlassian.com/git/tutorials/git-subtree https://www.atlassian.com/git/tutorials/git-subtree

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将一个存储库的公共子文件夹与另一个存储库同步? 的相关文章

  • 从分离的头进行 Git 推送

    我以超然的态度做出了一些改变 我想用 Git 将这些更改推送到这个独立的头 我不希望我的更改进入开发分支 当然也不想进入主分支 我正在与另一个人一起处理一个文件 分支示例 develop master HEAD detached at or
  • 如果文件已在服务器上,请避免使用 git-ftp 上传

    假设我有应用程序的本地副本 我将其推送到 github 然后使用 git ftp 将任何更改上传到我的服务器 我首先会使用 git ftp init u
  • git-svn --忽略路径

    我现在在 git svn 的 ignore paths 选项上挣扎了几个小时 试图从大型存储库中仅获取某些标签 我想在 dev 处开始获取 看起来像 gt svn ls http 192 168 0 2 svn repo corporati
  • 判断 Git 提交是否是合并/恢复提交

    我正在编写一个脚本 需要检查特定提交是否是合并 恢复提交 我想知道是否有 git 技巧 到目前为止我想到的 我绝对不想依赖这里的提交消息 是检查HASH 2看看我是否没有收到错误 是否有更好的方法 判断某个东西是否是合并很容易 这是不止一位
  • 如何预览 Git 中的隐藏内容?

    我想检查一个存储 并找出如果我将其应用于当前状态的工作树 它会发生什么变化 我知道我可以对存储进行 git diff 但这向我展示了工作树和存储之间的所有差异 而我只是想知道存储应用将改变什么 git stash show将向您显示最近存储
  • 我可以通过链接分享我的私人 GitHub 存储库吗?

    我在 GitHub 上的私人存储库中有一个 Java 应用程序 我想与没有帐户的人共享它 我在网站上没有找到任何与此相关的选项 有没有办法做到这一点 协作者只能是 GitHub 用户 无法在非 Github 用户之间共享私有存储库 您需要
  • Git 子模块:[电子邮件受保护]:权限被拒绝(公钥)。致命:无法从远程存储库读取

    我有一个问题git submodule update init remote 我收到错误 权限被拒绝和克隆失败 但我将 SSH 密钥添加到了我的 github 存储库中 我可以拉 推 git 克隆 我拥有所有需要的访问权限 我使用操作系统
  • Git - 推送到远程存储库中的远程跟踪分支

    当简单地做git push到远程存储库 其master分支得到更新 对于非裸存储库来说 这是不希望出现的情况 最近的 Git 版本显示的警告消息清楚地表明了这一点 我希望能够推送到远程存储库 并拥有其之一远程追踪分支进行更新 稍后 当我登录
  • Git:如何使外部存储库和嵌入式存储库作为通用/独立存储库工作?

    我有一个大项目 比方说A repo 其中有一个子文件夹来自B repo 当我提交时 我会遇到如下警告A repo warning adding embedded git repository extractor annotator serv
  • 受保护分支设置中的检查列表中缺少 Github 操作状态检查

    我有以下 github 操作设置 可以在创建 Pull 请求时正常触发 但它不会出现在受保护分支 主分支 的状态检查列表中 我不确定我做错了什么 name Python application on pull request branche
  • GitHub API:标记提交所属(与 git describe --tag 并行)

    我正在使用 GitHub API 进行实验octokit https github com octokit octokit rb红宝石 我的目标是能够提取提交 SHA 所属的 标签 现在我可以使用命令行轻松地执行此操作 gt git des
  • Git 命令显示我对给定远程的权限

    同事可以从远程存储库获取数据 但不能推送到远程存储库 我怀疑他对遥控器只有读权限而没有写权限 我可以通过多种方法来检查这一点 但我想不出他可以在 git 中使用的方法 是否有 git 命令可以显示给定远程存储库的权限 No Git 本身不处
  • Windows 版 GitKraken 中的文件名太长

    正如建议的Q22575737 https stackoverflow com a 22575737 6623589 我已经更新了我的注册表并设置了git config system core longpaths true在处理长路径时 问题
  • 在 git repo 中查找超过 x MB 且 HEAD 中不存在的文件

    我有一个 Git 存储库 用于存储随机的内容 主要是随机脚本 文本文件 我设计的网站等 随着时间的推移 我删除了一些大型二进制文件 通常为 1 5MB 这些文件会增加存储库的大小 而我在修订历史记录中不需要这些文件 基本上我希望能够做到 m
  • Git 无效的修订范围 Symfony2 Composer 外部包

    RuntimeException Failed to execute git log 18efcf67d236d5bbf46ac67820250dffd0474b6e 94e2146f525fa1367e15646fa273e5b34f92
  • DVCS命令的统一

    当处理多个 开源 项目时 多个版本控制系统开始出现问题 虽然它们共享共同的操作 但我经常在输入时犯错误hg add反而git add 我记得前段时间看到过一个项目 通过提供基本命令以统一的方式访问不同的源代码控制软件提交 ci add等在外
  • gitlab 中的自动发行说明[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 任何人都可以帮助我在 git lab 中自动生成发行说明 有什么方法可以执行此操作 请告诉我 谢谢 您可以使用 API 列出里程碑中的
  • git diff 在尖括号中显示 unicode 符号

    我有一个带有 unicode 符号 俄语文本 的文件 当我修复一些拼写错误时 我使用git diff color words 看看我所做的改变 如果是 unicode 西里尔文 符号 尖括号会造成一些混乱 如下所示 cat p1 cat p
  • 使用 Yarn 从 Gitlab 安装私有包

    我有一个私有 npm 包 它使用 Gitlab CI 管道发布到 Gitlab 包注册表 我想在项目中使用安装这个包yarn 遵循文档帮助我想出了以下内容 npmrc file gitlab com api v4 packages npm
  • readthedocs 中自动生成的索引文件

    我无法上传到阅读文档 http docs readthedocs io en latest 我为我的项目准备的文档 我正在尝试了解问题所在 该文档在本地构建良好make html但我无法上传 GitHub 项目是ASCII基因组 https

随机推荐

  • Eclipse 在 Ubuntu 14.04 中无法启动

    我尝试在 Ubuntu 14 04 中启动 Eclipse 时遇到问题 启动图片弹出 然后闪烁 变成白色 直到王国来临之前什么也没有发生 我尝试过 Luna Kepler 和 3 8 来自 Ubuntu 存储库 EE 和 SE 版本 两者相
  • Service Worker 可以缓存 POST 请求吗?

    我尝试在 fetch 事件的服务工作人员中缓存 POST 请求 I used cache put event request response 但返回的承诺被拒绝TypeError Invalid request method POST 当
  • 如何在打印语句中使用零填充标志精确打印两个位置

    如果想使用零垫进行此方法打印 你该怎么做 int month day public void printNumeric System out printf month day n i would like the month if it i
  • Tkinter ttk 查看自定义主题设置

    使用后ttk Style theme create name settings 可以看到该主题的设置吗 我问的原因是当我创建一个新主题并添加ttk Notebook root 对于我的代码 选项卡有圆角 这是我不想要的 这是一个例子 imp
  • 通过引用传递给构造函数

    我决定看看为成员分配引用是否会使成员成为引用 我编写了以下代码片段来测试它 有一个简单的类Wrapper与std string作为成员变量 我采取采取const string 在构造函数中并将其分配给公共成员变量 后来在main 方法我修改
  • Sublime Text 3 Windows 使用 Alt 选择列?

    Shift right click feels unintuitive to me How can I tell ST3 to allow Alt drag to do column selection like in many other
  • 为什么要重写 DTO 中的 toString 方法

    我看到大多数时候在DTO对象中 toString 方法实际上被重写了 例如 public class Person implements Serializable private String firstName private Strin
  • 使用 wc_price 过滤器挂钩向产品价格添加其他货币

    根据我原来帖子的答案使用时遇到格式不正确的数值wc priceWooCommerce 挂钩 https stackoverflow com questions 66084833 a non well formed numeric value
  • 学C要多长时间? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Fallocate 和 ftruncate 之间有什么区别

    根据我的测试 他们都可以改变文件大小 为什么他们都可以将文件变大或变短 Fallocate 和 ftruncate 和有什么区别 ftruncate是一个简单的 单一用途的函数 根据 POSIX 文档 http pubs opengroup
  • 汇编程序中的寻址

    有件事我无法消化 我正在学习一些汇编程序 现在我正在学习寻址章节 我理解用于解除引用的括号的概念 但不知怎的 当我看到它的用法时 我就是无法理解它的要点 更准确地说 我的困惑是从这里开始的 mov al L1 在这里 我假设 L1 作为示例
  • 由于事务之间的读/写依赖关系,无法序列化访问

    我最终成功地重现了序列化问题这个问题 https stackoverflow com q 21706858 274677到 SSCCE 最短的独立完整示例 我正在使用jdbc and java标签 尽管我相信这不是 Java 或 JDBC
  • 如果查询中没有这样的键,如何关闭AWS连接

    我正在使用 AWS java SDK 将文件上传到 AWS 管理控制台的存储桶上 但是 如果当我第一次尝试访问该文件时在线上没有这样的文件 我的代码将捕获异常 NoSuchKey 然后我想关闭连接 问题是我没有任何引用来关闭该连接 因为异常
  • PySpark 中内存高效的笛卡尔连接

    我有一个大型字符串 id 数据集 可以放入 Spark 集群中单个节点的内存中 问题是它消耗了单个节点的大部分内存 这些 ID 的长度约为 30 个字符 例如 ids O2LWk4MAbcrOCWo3IVM0GInelSXfcG HbDck
  • 如何从 nuxtjs 服务器中间件获取 POST 数据?

    如何从 nuxtjs 服务器中间件获取 POST 数据 到目前为止 我已经成功地为 GET 做到了这一点 但对于 POST 来说 正文不存在 req body未定义 将其添加到nuxt config js serverMiddleware
  • IPython 笔记本到幻灯片:Reveal 未定义

    我正在使用 nbconvert 从我的笔记本制作一个 Reveal js 幻灯片 具体来说 我正在运行 ipython nbconvert to slides analysis ipynb 这将创建 analysis slides html
  • 发送带有数据库的应用程序

    如果您的应用程序需要数据库并且它带有内置数据 那么发布该应用程序的最佳方式是什么 我是不是该 预先创建 SQLite 数据库并将其包含在 apk 在应用程序中包含 SQL 命令并让它创建数据库并在首次使用时插入数据 我看到的缺点是 可能的
  • 如何将所有路由重定向到 gatsby 索引

    我正在尝试创建一个只有一页来处理所有路线的 Gatsby 项目 我有这样的索引页面 const App gt return
  • 如何将作业放入詹金斯的文件夹中?

    我正在尝试使用 jenkins DSL 脚本将作业放入文件夹中 现在我创建一个 listView 并将我正在使用的代码放入我的工作中 listView MyJobsList jobs map each name it key trim co
  • 如何将一个存储库的公共子文件夹与另一个存储库同步?

    我有一个软件项目foo在我公司托管的内部 GitLab 存储库上 并希望将其部分发布为开源项目baa在 GitHub 上 假设我将公共部分放在 public 文件夹中 foo public 以及文件夹 private 中的私有部分 foo