本节所讲内容均涉及到 远端版本库
。
版本库
的概念在《TortoiseGit 入门指南02:创建和克隆仓库》中提到过,它是工作目录下面的一个名为 .git
的隐藏目录,我们每一次提交、每一个分支都会保存在版本库中。这个版本库就在我们电脑上的某个文件夹内,所以也称为 本地版本库
。
远端版本库
通常是放在托管平台上的版本库,通过这种方式,可以备份代码、随时随地获取代码、与其他人员协同工作等。常见的托管平台有 Github
(国内访问速度受限)和 gitee
(国内托管平台,访问速度快)。
本地版本库
与 远端版本库
之间的交互主要涉及到 克隆
、拉取
、抓取
、推送
这几个操作。其中 克隆
已经在《TortoiseGit 入门指南02:创建和克隆仓库》中讲过,这里不再赘述,重点关注:
推送
(push):向远端版本库同步数据拉取
(pull)和抓取
(fetch):从远端版本库同步数据
它们的关系用一张图表示为:
图中出现的概念,如工作区
、版本库
、 提交
等,在之前的文章中均有提及,这些基本概念需要读者理解,这是用好 Git 的基础。
1 云托管平台设置
以 Gitee
托管平台为例。
1.1 注册 Gitee
在官网注册,点击这里。
1.2 创建SSH秘钥(key)
在任意位置单击鼠标右键,在弹出的右键菜单中单击 Git Bash Here
,打开 Git 命令行界面。
在 git 命令行界面中输入:
ssh-keygen -t rsa -C "email"
email
是你设置 Git 时用到的电子邮箱,邮箱要在双引号内。
此时,C:\Users\用户名.ssh目录下会生成两个文件:id_rsa
和 id_rsa.pub
,把 id_rsa.pub
文件中的内容复制下来。
1.3 设置远程仓库 SSH 秘钥
打开你的 Gitee 主页,点击账户设置 - 安全设置 - SSH 公钥,把刚才复制的 ssh 秘钥粘贴到公钥输入框中。
1.4 创建远端仓库
这里创建一个名为 demo
的测试仓库。新的仓库什么也没有,我们先复制这个仓库的 SHH 地址。
2 推送
使用推送(Push)将本地更改同步到远端版本库。
在仓库中右击鼠标 - TortoiseGit - Push...
打开推送对话框:
2.1 推送源(Ref)
-
Local
:源分支,该分支将被推送到远端版本库。 -
Remote
:远端版本库分支名,远端版本库可能有多个分支,比如master
分支用于稳定版本,平时开发在develop
分支上进行,当推送的时候,需要指定推送到哪个分支上。注:如果不填写远端版本库分支名,则推送到远程仓库的默认分支,将哪个分支设置为默认分支可以在远端版本库修改。
这就意味着,如果用master分支存储稳定版本,则不要将它设置为默认分支,以免将开发版本错误的推送到master分支上。
2.2 推送目的地(Destination)
Remote
:选择一个已配置的远端版本库。如果还没有配置过,点击Manage
,在弹出的设置页面中配置一个远端版本库,如下图所示。在URL
处填写刚刚复制的远端版本库 SSH 地址,点击“确定”按钮,完成与远端版本库的关联。
Arbitrary URL
:也可以使用远端版本库的 URL
远端版本库应该是一个裸仓库。
2.3 选项(Options)
-
Force: May discard known changes
:强制推送,可能丢失已知更改,会使用--force-with-lease
选项,可以防止丢失远程仓库其他人的未知更改。需小心使用,一旦使用此选项,表明本地仓库与远程仓库出现了冲突,建议先拉取代码,在本地解决冲突后再进行推送。 -
Force: May discard unknown changes
:强制推送,可能丢失未知更改,会使用--force
选项,可能导致远程仓库其他人的更改丢失,需要慎重使用。一旦使用此选项,表明本地仓库与远程仓库出现了冲突,建议先拉取代码,在本地解决冲突后再进行推送。 -
Include Tags
:将本地标签推送到远端版本库。默认情况下,推送内容时不包含标签的,如果要将标签推送到远端版本库,需要手动勾选此选项。 -
Set upstream/track remote branch
:跟踪远程分支。跟踪远程分支意味着将本地分支与远程分支关联起来。比如远程有三个分支 master、develop 和 feature,其中 develop 分支作为默认分支,但有一段时间我们需要在 feature 分支上开发一个新功能,在这期间所有的更改都要推送到 feature 分支,解决方法是每次推送时,都在推送对话框的 Remote 处手动填写
feature
。这样很不方便,我们可以在推送到 feature 分支时,勾选Set upstream/track remote branch
选项,这样就将本地分支与远程 feature 分支之间建立了关联,下次再推送的时候,TortoiseGit 会自动帮我们填写feature
,就不必担心不小心将更改推送到默认的 develop 分支上去。
3 拉取和抓取
拉取(pull)和抓取(fetch)都是从远端版本库中获取更改的方法,区别在于:抓取只将数据下载到你的本地版本库,它不会自动合并或修改你当前的工作区;拉取不仅将数据下载到你的本地版本库,还会自动合并到当前版本库并更新当前工作区。
在仓库中右击鼠标 - TortoiseGit - Pull...
打开拉取对话框;
在仓库中右击鼠标 - TortoiseGit - Fetch...
打开抓取对话框。
这里以拉取对话框为例(抓取对话框与之相似)。
-
Tags复选框
:有三种状态,选中表示下载所有Tag和分支、未选中表示不下载Tag、部分选中表示使用默认设置。 -
Prune复选框
:有三种状态,选中表示删除远程上不再存在的远程跟踪分支、未选中表示不删除、部分选中表示使用默认设置。Tags复选框
和Prune复选框
的默认设置可以在TortoiseGit - Settings - Git - Remote
中设置:
读后有收获,资助博主养娃 - 千金难买知识,但可以买好多奶粉 (〃‘▽’〃)