在 git 存储库中推送子树

2023-12-29

我对 Git 还很陌生:我来自 SVN,在那里我发现了非常强大的 :external 功能。在 Git 中我没有找到类似的东西:

  • 子模块非常适合添加并不总是需要的项目模块。它们必须在存储库克隆后初始化,并且不能仅包含原始项目的子目录。
  • subtrees对于添加库确实很有用(它们还允许包含子目录),但是推动它们确实很痛苦。

所以场景是这样的:我有一个项目,我想在其中包含一些库。我希望能够更改所有这些库并将它们推送到自己的存储库中。此外,其中一些库是较大项目的子目录(例如,如果项目还包含演示或自述文件,我不会在我的项目中包含这些目录)。

我怎样才能做到这一点?

我试过了:

  • http://progit.org/book/ch6-7.html http://progit.org/book/ch6-7.html + http://posterous.timocracy.com/git-sub-tree-merging-back-to-the-subtree-for http://posterous.timocracy.com/git-sub-tree-merging-back-to-the-subtree-for(不允许仅合并子目录,否则我无法看到它);
  • http://www.tipstank.com/2011/02/21/git-subtree-notes-and-workflows/ http://www.tipstank.com/2011/02/21/git-subtree-notes-and-workflows/(同上,不处理子目录包含);
  • http://psionides.eu/2010/02/04/sharing-code- Between-projects-with-git-subtree/ http://psionides.eu/2010/02/04/sharing-code-between-projects-with-git-subtree/(看不到任何关于推送的内容);
  • http://h2ik.co/2011/03/having-fun-with-git-subtree/ http://h2ik.co/2011/03/having-fun-with-git-subtree/(看不到任何有关推送的信息)

好吧,如果你已经达到了这一点,感谢你的耐心,现在我想尝试一些其他的东西,因为现在我的结论是:“Git 中不允许子树推送”ç_ç


评论中的几点评论:

  • git 子模块与 svn external 不同 https://stackoverflow.com/questions/3131912/why-are-git-submodules-incompatible-with-svn-externals/3132221#3132221
  • 对子模块所做的任何修改可以推送到自己的远程仓库 https://stackoverflow.com/questions/1979167/git-submodule-update/1979194#1979194.
  • "规划 git 迁移的存储库布局 https://stackoverflow.com/questions/9394286/planning-repository-layout-for-git-migration/9395375#9395375” 说明您不能总是直接使用子模块,因为目录结构并不完全符合您的需要。

所以我建议:

  • 加载(git checkout)父存储库及其所有子模块
  • 在其他地方创建正确的结构,并使用到子模块(或子模块的子目录)的符号链接来实现您所需要的。
  • 定期返回父存储库中的 git,以检测任何更改(从 Git 外部创建的其他目录结构完成),以便提交并推送所有子模块修改,然后提交并推送父存储库。

git 结帐

parent repo
  +
  +--> main project
    +
    +-> mainDir1
    +-> mainDir2
  +--> lib1
    +
    +-> lib1Dir1
    +-> lib1Dir2
  +--> lib2
    +
    +-> lib2Dir1
    +-> lib2Dir2

以及你自己的项目目录结构(例如)

  +--> main project (symlink to ../parent/main project)
    +
    +-> mainDir1
    +-> mainDir2
    +-> lib1Dir1    (symlink to ../parent/lib1/lib1Dir1)
    +-> lib1Dir2    (symlink to ../parent/lib1/lib1Dir2)
    +-> lib2Dir2    (symlink to ../parent/lib1/lib2Dir2)

(注意没有lib2Dir1(例如)因为在你的实际项目中你不需要它)

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

在 git 存储库中推送子树 的相关文章

  • git subtree pull -P 不管 总是合并冲突

    问题 即使我没有进行任何更改 每次尝试拉入子树时 我都会遇到合并冲突 我在做什么 In 子树仓库 Make some changes git commit am Changes made git push origin master In
  • DVCS命令的统一

    当处理多个 开源 项目时 多个版本控制系统开始出现问题 虽然它们共享共同的操作 但我经常在输入时犯错误hg add反而git add 我记得前段时间看到过一个项目 通过提供基本命令以统一的方式访问不同的源代码控制软件提交 ci add等在外
  • 重新打包存储库对于大型二进制文件有用吗?

    我正在尝试将大量历史记录从 Perforce 转换为 Git 并且一个文件夹 现在是 git 分支 包含大量大型二进制文件 我的问题是运行时内存不足git gc aggressive 我的主要问题是重新打包存储库是否可能对大型二进制文件产生
  • 推送时发生 Git 错误 - update_ref 失败

    当我尝试推送本地提交时遇到问题 这可能是在 Android Studio 崩溃时发生的 这是错误 update ref 引用 refs remotes origin master 失败 无法锁定 ref refs remotes origi
  • IntelliJ:查看本地和 git 提交/分支之间所有已更改文件的差异

    使用 IntelliJ 的 diff 查看器是检查代码的一种非常好的方法 因为您可以使用 IntelliJ 代码编辑器的所有功能 重构 完成等 在本地版本中进行更改 不幸的是 我还没有弄清楚当你在 IntelliJ 中进行代码审查时如何做最
  • 如何解决 VSTS 中拉取请求中的合并冲突?

    我已经创建了拉取请求 我进入了这个 批准 按钮不执行任何操作 并且 完成 被禁用 如何解决拉取请求中的冲突 Update 微软刚刚添加了基于浏览器的合并 这可能会让你摆脱小冲突的困境 并提供自 Sprint 150 起改进了不同场景的可视化
  • git diff - 只显示哪些目录发生了变化

    有没有办法只列出已更改的目录 如果我在 git root 的话 project 我更改的文件是 project subtool file1 project subtool file2 project subtool3 file1 我只是想
  • 为什么我无法创建/签出该分支?

    我正在尝试创建本地 Git 分支 但它不起作用 以下是我正在使用的命令 tablet edit11 git checkout b edit 11 Switched to a new branch edit 11 tablet edit11
  • 有没有办法让 git flow 显示它在幕后执行的命令?

    有什么方法可以让 git flow 提前告诉我当我执行 flow 命令时它将执行的确切 git 命令吗 或者告诉我它是东吗 我只能看到输出和摘要吗 你可以使用Git的GIT TRACE 环境变量 http git scm com docs
  • Git:发送电子邮件而不提交

    我有一个项目 我做了更改 并想使用 git send email 功能将它们发送给另一个用户 我发现它可以通过发送补丁来工作 由git format patch每次提交 是否可以只发送diff的 我不想先提交 然后发送补丁 是否有gitfo
  • Ansible bitbucket 克隆存储库配置 ssh 错误

    我之前发布过这个问题 但那里的答案不再有效 总之 当使用 Ansible 配置我的 vagrant box 时 在尝试使用 ssh 克隆我的 bitbucket 私有存储库时 我遇到了一个神秘的错误 该错误指出 权限被拒绝 公钥 然而 如果
  • VS 2015 + Bower:在防火墙后面不起作用

    Problem 在 Visual Studio 2015 中 使用 Bower 我的包在防火墙后面时恢复失败 并出现类似以下内容的错误 ECMDERR 无法执行 git ls remote tags heads git github com
  • 在 Windows 7 上的 Sourcetree 中比较 Word docx 文件

    我一直在尝试获取在 Windows 7 上的 Sourcetree 中工作的 Word docx 文件的文本差异 我已按照此处的说明进行操作将 Microsoft Word 与 git 结合使用 http blog martinfenner
  • 无法从 Sourcetree 拉取 Git 远程存储库

    我生成了 ssh 密钥并配置了我的 git 和 SourceTree 我可以 git pull 并从 Git bash 执行其他操作 注意 我在 bashrc 中添加了以下内容以使其正常工作 eval ssh agent ssh add 然
  • Git 将一个分支合并到所有其他分支中

    我知道这个问题已经在这里被问过 https stackoverflow com questions 2329716 merging changes from master into all branches using git https
  • 当当前分支上有未提交的更改时签出另一个分支

    大多数时候 当我尝试签出另一个现有分支时 如果我在当前分支上有一些未提交的更改 Git 会不允许我这样做 所以我必须首先提交或隐藏这些更改 然而 有时 Git 确实允许我在不提交或存储这些更改的情况下签出另一个分支 并且它会将这些更改携带到
  • 如何使用 Git 跟踪目录而不是文件?

    我最近开始使用 Git 但只有一件事遇到了麻烦 如何在不跟踪目录内容的情况下跟踪目录 例如 我正在开发的网站允许上传 我想跟踪上传目录 以便在分支等时创建它 但显然不是其中的文件 在开发分支中的测试文件或主控中的真实文件 在我的 gitig
  • Git 2.2.x 无缘无故更新旧包文件的时间戳

    Git 2 2 0 和 2 2 1 似乎修改了旧的时间戳 git objects pack pack pack偶尔会无缘无故地文件 它只是改变时间戳 内容是相同的 调试这一点很困难 因为它似乎很少进行更改 我在 2 2 0 之前的任何 Gi
  • 为什么 Git 无法将文件更改与修改后的父级/主控合并?

    我有一个文件 里面只有一行 我创建一个分支并向同一文件添加第二行 保存并提交到分支 我切换回主人 并向文件中添加不同的第二行 保存并提交给master 现在总共有 3 条独特的线路 如果我现在尝试将分支合并回主分支 则会遇到合并冲突 为什么
  • 使当前提交成为 Git 存储库中唯一(初始)提交?

    我目前有一个本地 Git 存储库 我将其推送到 Github 存储库 本地存储库有约 10 次提交 Github 存储库是其同步副本 我想要做的是从本地 Git 存储库中删除所有版本历史记录 以便存储库的当前内容显示为唯一提交 因此存储库中

随机推荐

  • 在静态 HTML 页面中进行 JQuery 搜索,并突出显示找到的单词

    我一直在尝试使用 JQuery 在静态 HTML 页面中进行简单的搜索 我不得不提的是 这只是我第一次使用 JQuery 我正在尝试更改页面中找到的单词的背景 这是我迄今为止尝试过的 myJavascript js document rea
  • 是否有任何主要的 C++ 实现实际上将“NULL”定义为“nullptr”?

    从 C 11 开始 标准允许宏NULL要么是一个值为零的整数文字 要么是类型的纯右值std nullptr t 任何决定更改其定义的标准库供应商NULL从一个整数到nullptr很可能会导致依赖 C 11 之前代码的客户端崩溃 是否有任何主
  • Tensorflow 张量重塑并用零填充

    有没有办法重塑张量并用零填充任何溢出 我知道 ndarray reshape 会这样做 但据我了解 将 Tensor 转换为 ndarray 需要在 GPU 和 CPU 之间进行翻转 Tensorflow 的 reshape 文档说 Ten
  • Clock_gettime() 仍然不是单调的 - 替代方案?

    正如众所周知的那样 参见 例如 这个老问题 https stackoverflow com questions 3657289 linux clock gettimeclock monotonic strange non monotonic
  • jQuery 可拖动输入元素

    我正在尝试使用 jQuery UI 使表单元素可拖动 例如 按钮 复选框 文本字段等 到目前为止我还没有运气 您有什么想法如何实现这一目标吗 也许晚了 3 年 但您可以调度事件并使用以下代码片段来实现更预期的行为 演示 jsFiddle h
  • 关于“Greasemonkey 入门”教程的建议 [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Java中根据第一个迭代变量对嵌套循环元素进行分组

    我有 2 个列表 第一个用于句子 第一个用于关键字 这个想法是检查句子是否有关键字 并将它们按顺序放入每个句子的列表中 如果这已经提前复制在这里 我很抱歉 List
  • Ransack:如何使用现有范围?

    将 Rails 2 应用程序转换为 Rails 3 我必须更换 gem搜索逻辑 https github com binarylogic searchlogic 现在 使用 Rails 3 2 8 和 gemRansack https gi
  • 来自另一个属性的属性占位符位置

    我需要从程序运行之前我不知道的位置将一些属性加载到 Spring 上下文中 所以我想如果我有一个没有位置的 PropertyPlaceholderConfigurer 它会读入my location从系统属性中 然后我可以在上下文中使用该位
  • 无需外星人即可将 rpm 转换为 deb?

    如何在不使用alien的情况下将rpm转换为deb 我无法在 ubuntu 19 中安装 Alien 它给出了无法找到包的错误 您可以使用如下命令将 rpm 转换为 deb 包 sudo apt get install ruby ruby
  • Windows Azure http 重定向的最佳实践

    我有一个天蓝色的网站 名为 http myapp cloudapp net 当然 这个网址有点难看 所以我设置 CNAME http blog smarx com posts custom domain names in windows a
  • 如何在 `aws-cli ec2` 命令中使用通配符?

    我有一些 EC2 实例 我想使用ec2 describe instances命令用于根据标签的特定值获取实例列表 该表显示了我的用例 Instance Value key Purpose Outcome InstanceA Going Fi
  • Node.js 中的 addListener(event,listener) 和 on(event,listener) 方法有什么区别?

    在这里我无法理解这两种方法之间的基本区别是什么 var events require events var eventEmitter new events EventEmitter var listner1 function listner
  • Java JNI:内存分配/分区

    使用JNI时 JNI二进制文件是使用自己的内存 还是使用分配给JVM的部分内存 Details 当您指定 Xmx1024m作为 JVM 选项 JVM 是否将所有 1024 mb 内存分配给 Java 对象 它是否将其中的一部分用于 Java
  • T-SQL 使用变量从视图中选择速度要慢得多

    我有一个在 where 子句中指定值时运行速度快 SELECT FROM vwPayments WHERE AccountId 8155 但是当该值是变量时运行缓慢 3s DECLARE AccountId BIGINT 8155 SELE
  • Qt:Quazip 的简单示例

    我构建了 quazip 库 我需要一个简单的示例来演示如何解压缩 zip 文件 例如 Quazip zipFile QFile test zip zipFile unzip quazip 中显示的测试有点令人困惑 我花了很短的时间来寻找示例
  • 如何在 Maven 中使用或滥用工件分类器?

    我们目前正在尝试将一个用 ant 构建的非常 非常 大的项目移植到 maven 同时也迁移到 svn 在重塑项目结构以最适合 Maven 范式时正在探索所有可能性 现在更具体地说 我遇到了分类器 并且想知道如何利用它们来发挥我的优势 同时避
  • 为什么“git status”显示二进制文件已修改,而文件模式却相同

    我将一些二进制文件添加到 Ubuntu 14 04 Linux 上的 git 存储库中 将这些文件推送到 GitHub 远程 然后将它们拉到 OS X El Capitan 和 Windows 10 上的现有克隆中 git status在
  • 如何在 Jupyter / iPython Notebook 中循环多个单元格[重复]

    这个问题在这里已经有答案了 我有一个 Jupyter Notebook 里面有几百行代码 分布在大约 30 个单元格中 如果我想循环中间的 10 个单元格 例如使用 For 循环 该怎么做 这是否可能 或者您是否需要将循环中的所有代码合并到
  • 在 git 存储库中推送子树

    我对 Git 还很陌生 我来自 SVN 在那里我发现了非常强大的 external 功能 在 Git 中我没有找到类似的东西 子模块非常适合添加并不总是需要的项目模块 它们必须在存储库克隆后初始化 并且不能仅包含原始项目的子目录 subtr