本节所讲内容均涉及到 远端版本库。
版本库 的概念在《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中设置:

读后有收获,资助博主养娃 - 千金难买知识,但可以买好多奶粉 (〃‘▽’〃)




















