如何将 git 子树与现有 git 子存储库一起使用?

2023-12-10

我有一个parent_repo and a sub_repo在其中,像这样:

.\parent
.\parent\parent_file.html
.\parent\.gitignore
.\parent\lib\sub_repo
.\parent\lib\sub_repo\sub_file.html
.\parent\lib\sub_repo\.gitignore

在我知道之前subtree or submodule,我对这两个存储库都使用 git。但当人们看到parent_repo,他们看不到sub_repo的代码。

enter image description here

建议我应该使用subtree or submodule. 远程GitHub中的灰色图标是什么意思

那我该怎么办呢?为了使sub_repo代码可在parent_repo?


我查看了子模块和子树的文档。看起来子树比子模块更好。但教程不是很说明(https://medium.com/@v/git-subtrees-a-tutorial-6ff568381844#.aztjizd8g).

I run git subtree add —-prefix=lib/sub_repo my-subtree master,并且它报告前缀lib/sub_repo已经存在。

有没有更简单的例子可供我参考?


首先我们来解释一下子树和子模块的主要区别是什么:

它们都用于在现有存储库中创建另一个存储库。主要区别在于 gitsubmodule是独立的自包含存储库,同时subtree将日期存储在父(原始)存储库中。


Now let's dig in and explain in more details:

有没有更简单的例子可供我参考?

Submodule is a 独立的git 项目,以便代码将被检出到新建文件夹在根文件夹下,它不是主分支的一部分。

您的根文件夹将包含一个子模块文件,您必须init && update它存在于你制作的每一个克隆中。

# Add the desired submodule to your code base
git submodule add <url>

您必须运行两个命令:

git submodule init 

初始化您的本地配置文件,以及

git submodule update 

从该项目中获取所有数据并检查超级项目中列出的相应提交:

所以完整的脚本是这样的:

git submodule add <url>
git submodule init
git submodule update

您只需位于根文件夹中,然后添加子模块文件夹即可。

git submodule add <url>

现在,当您克隆项目时,您只需初始化并更新子模块

git submodule init
git submodule update

Git 1.8.2 提供了一个新选项 --remote

git submodule update --remote --merge

将从每个子模块的上游获取最新更改,将它们合并,并检查子模块的最新版本。

enter image description here


git subtree

Git 子树允许您将任何存储库插入为另一个存储库的子目录

非常类似于submodule但主要区别在于代码的管理位置。在子模块中,内容放置在单独的存储库中并在那里进行管理,这允许您将其克隆到许多其他存储库。

subtree将内容作为根项目的一部分进行管理,而不是在单独的项目中进行管理。

您无需写下如何设置它并了解如何使用它,您只需阅读这篇优秀的文章即可解释这一切。

https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/

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

如何将 git 子树与现有 git 子存储库一起使用? 的相关文章

  • gitk 无法在 macOS 10.14 (Mojave) 上启动

    当我尝试在 macOS Mojave 10 14 4 上运行 gitk 时 出现以下错误 Error in startup script file System Library ScriptingDefinitions CocoaStand
  • Git:需要递归地'git rm'所有bin和obj文件夹的内容

    有人不小心将所有 bin 和 obj 文件夹提交到我们的存储库 大约有 40 个这样的文件夹 我想做一个git rm r在所有这些文件夹上 有命令可以执行此操作吗 有备份 find type d name bin exec git rm r
  • GitHub 恢复或重置? [复制]

    这个问题在这里已经有答案了 正如您在图片中看到的 我正在功能 forum kolo 3 中工作 我决定完成该功能并将其合并到开发中 但没有将更改推送到远程开发 因此它只是本地更改 然后我意识到这是一个坏主意 现在我想删除这个合并 就像它从未
  • 如何欺骗 git-svn 来识别使用 svn 进行的合并?

    我们有一个 SVN 设置 具有稳定的主干和不稳定的开发分支 开发工作 大部分 在分支上完成 然后在部署之前合并到主干 我使用 git svn 作为我的 SVN 客户端 我从unstable到trunk的合并过程如下 git svn fetc
  • “git push heroku master”仍然要求身份验证

    我已经执行了 heroku login 但是当我尝试推送时 仍然要求我进行身份验证 git push heroku master Username for https git heroku com
  • git:如何在多台电脑之间正确共享本地副本

    我拉了一些公共存储库 在这里和那里做了一些更改 我将它们提交给我的本地副本 我经常从远程获取公共存储库中的更改 有时 我会处理来自不同 PC 的本地副本 并且需要在 PC 之间移动整个源代码 以便它们共享完全相同的更改 有几次我搞砸了复制并
  • git fsck 结合 --lost-found 和 --unreachable

    我发现了很多有趣的帖子git fsck 所以我想对它们进行一些实验 首先我在这个问题之前阅读的资料来源 如何通过关键字在 GIT 存储库中找到无法访问的提交哈希 https stackoverflow com questions 31388
  • 如何进行永久本地提交或更改

    我已经更改了我的项目的文件 配置文件 我希望此更改仅是本地的 因此从准备提交的更改列表中消失 有什么简单的方法可以做到这一点吗 请注意 配置文件定期存储在存储库中 一种方法是 git update index assume unchange
  • 从 Jenkins Pipeline 捕获 shell 脚本输出

    我正在尝试提取 git 分支并在 Jenkinsfile 中提交信息 如下所示 def commit sh returnStdout true script git rev parse HEAD trim def branch sh ret
  • 如何撤消成功的“gitcherry-pick”?

    在本地仓库中 我刚刚执行了git cherry pick SHA没有任何冲突或问题 然后我意识到我不想做我刚才所做的事情 我还没有把这个推到任何地方 我怎样才能去掉这个樱桃镐 我想知道是否有办法做到这一点 当我有其他本地更改时 当我没有其他
  • p4 命令行相当于“git log -p”?

    我经常使用git log p
  • Git Svn 的问题,为什么为什么我永远不能 dcommit?

    我有一个 git svn 存储库 git svn clone http myrepo myrepo 我不想在master工作 git checkout b development 黑客了一段时间 git checkout master gi
  • 如何恢复已删除的文件

    在 GIT 工作仓库中 我使用命令 rm rf 而不是 git rm 删除了几个文件 当我尝试从服务器 裸仓库 拉取 获取时 文件不可见 我怎样才能把这些文件找回来 恢复到之前的提交 这将重置为上次提交的状态 git reset hard
  • 如何将 git 存储库中的现有目录设为 git 子模块

    我对 git submodules 很困惑 基本上我的问题是我无法让 git 理解这一点 main project submodule是一个子模块 我对 git 子模块有很好的经验 in my 点文件存储库 https github com
  • 在 CentOS 6.4 上将 git 升级到最新版本时遇到问题

    我有带有 git 1 7 1 的 Centos 虚拟机 我想升级到最新版本的git 但是 当我尝试使用 yum 进行升级时 它表示无需执行任何操作 并且不会升级版本 以下是 yum 命令的输出 yum install git Loaded
  • git:切换分支而不分离头

    我在 github 上有一个存储库 其中有一个主分支 master 和一个用于一些实验工作的分支 我做了一些提交并推送到实验分支 一切都很好 现在 在另一台机器上 我尝试克隆我的存储库 git clone存储库 然后切换到实验分支 git
  • wagon-git 和 Gradle

    这个不错的小工具承诺帮助我将工件上传到私人 Bitbucket 存储库 http synergian github io wagon git bitbucket html http synergian github io wagon git
  • git:更改样式(空白)而不更改所有权/责任?

    我们有一个庞大的 古老的代码库 需要大量的清理 我们一直都有编码标准 每个人都试图遵循它们 但它们没有得到执行 因此随着时间的推移 出现了很多违规行为 其中许多只是空格问题 例如使用制表符而不是空格 或者使用制表符代替空格 不应有任何空格
  • 如何在 Windows 上更新 GIT_SSH 环境变量

    我正在使用 TortoiseGit 并且刚刚将 Windows 版 Git 从旧版本升级到 2 7 2 在此过程中 位置ssh exe已移至C Program Files x86 Git bin ssh exe to C Program F
  • SmartGIT 不要求 ssh 密钥

    切换到新计算机后 我必须再次安装 Windows 版 SmartGIT 现在尝试克隆我的 fedorahosted org repository 密钥存储在 C User myusername ssh SmartGIT 附带了全新安装 并且

随机推荐