在 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 存储库中推送子树 的相关文章

随机推荐

  • 在静态 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