从另一个 Git 存储库引用一个 Git 存储库
介绍
在大型组织中,您可能拥有数十甚至数百个 Git 存储库。这些存储库可能具有通用配置和脚本,或者您可能正在处理 C++ 项目,需要从源代码编译多个存储库。如何在不到处复制粘贴文件的情况下实现这一点?
在本指南中,您将了解git 子树作为此问题的解决方案。您将设置一个存储库并执行一些常见操作。本指南假定您对 git 命令行和 GitHub 有基本的了解。如果您需要复习一下,可以观看GitHub 入门。
注意: GitHub 正在将其默认分支名称从master更改为main。本指南将使用术语master分支,因为它是撰写本文时的当前默认分支名称。您可以通过阅读GitHub 关于重命名默认分支的官方文档了解有关此更改的更多信息。
点文件示例用例
在几年的时间里,你可能会发现自己在几十台不同的电脑上工作。你可以创建一个 Git 存储库,将设置文件保存在其中,以使设置在各种机器上保持一致。这些设置通常保存在以点为前缀的文件中,例如.vimrc、.bashrc等。因此,按照惯例,此设置存储库名为点文件。随着点文件项目的进展,你可能想要使用其他人创建的脚本和配置。你可以在点文件中使用git subtrees引用这些存储库,从而利用开源社区并回馈社区。
一个常见的用例是将作为 GitHub 存储库发布的 VIM 插件嵌入到您的点文件存储库中。
设置存储库
要以这种方式开始使用git 子树,首先创建一个点文件存储库。
cd ~
mkdir dotfiles
cd dotfiles
git init
touch readme.md
git add . && git commit -m "initial commit"
请注意,这些是 bash 命令。如果你使用的是 Windows,则可以在git bash中执行它们。
您已经创建了一个带有空白自述文件的点文件存储库。
使用 Git Subtree 添加 VIM 插件
在您的dotfiles项目中,创建一个文件夹vim/pack/github/来存储您的插件。此文件夹结构很重要,以便 VIM 能够自动检测并运行插件。您将把其他 git 存储库的内容放在此文件夹中。
为此,运行git subtree add命令。
git subtree add --prefix vim/pack/github/vim-sensible git@github.com:tpope/vim-sensible.git master --squash
此命令将Tim Pope 的 VIM-sensible的主分支嵌入到您的点文件中。另请注意,您使用了--squash标志来压缩历史记录。您可以多次运行此命令以嵌入多个存储库。
更新你的 VIM 插件
对于一个或多个子树,您可能想要更新到特定分支或 git 标记。您可以通过运行git subtree pull命令来执行此操作。
git subtree pull --prefix vim/pack/github/vim-sensible/ git@github.com:tpope/vim-sensible.git master --squash
这会创建一个新的提交,并将所有更改压缩到点文件存储库顶部。
将更改贡献回嵌套存储库
作为一名优秀的开源公民,当您发现并修复错误时,您会希望与社区分享您的修复。git subtree使这变得简单,因为您不需要单独签出该嵌套存储库。为此,您将执行以下步骤:
- 在 GitHub 上Fork 嵌套存储库,例如vim-sensible 。
- 提交点文件存储库中的更改。
- 运行以下命令来推送至你的 fork。
git subtree push --prefix vim/pack/github/vim-sensible/ git@github.com:chinwobble/vim-sensible.git issue-xxx
- 在嵌套存储库上创建拉取请求
- 将远程的最新内容拉入你的点文件中。
请注意,推送时,您将远程更改为您自己的 fork,并且您正在推送到新分支,在上面的示例中,它是issue-xxxx。如果您正在处理 GitHub 问题,您可能希望使用问题编号作为分支名称。
结论
git subtree是将一个存储库嵌套在另一个存储库中的好选择。它不需要用户学习额外的命令来访问嵌套存储库。您可以通过阅读关于 Git 子树合并来了解有关此功能的更多信息。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~