# 仓库与远程
本章节将详细介绍仓库与远程相关的功能,包括添加远程、克隆仓库、推送、拉取和同步等功能。
# 什么是远程仓库
远程仓库是指托管在另一台服务器上的 Git 仓库,例如 GitHub、Azure DevOps 或 GitLab。远程仓库通过提供一个中央位置,使团队成员能够共享他们的工作,从而实现协作。当您克隆一个仓库时,Git 会自动创建一个名为 origin 的远程仓库,它指向原始仓库。如果您需要与不同的服务器或仓库交互,您可以使用多个远程仓库。与远程仓库的交互涉及三个主要操作:
抓取(Fetch):从远程下载提交,但不更改您的工作文件。这让您可以查看其他人做了什么,而无需将他们的更改合并到您的工作中;
拉取(Pull):从远程下载提交并将它们合并到您的当前分支。这是一个包含抓取和合并的操作;
推送(Push):将您的本地提交上传到远程,以便其他人可以访问您的更改。(当您推送时,Git 需要知道将您的提交发送到哪个远程。默认情况下,Git 使用为您的当前分支配置的上游分支。如果没有设置上游,Syslab 会提示您发布分支并设置上游)。
# 添加远程
如果您想要添加远程仓库,可以按照以下步骤进行:
打开源代码管理(Ctrl+Shift+G),单击右上角的视图和更多操作,选择远程,右侧二级菜单中选择添加远程存储库...,输入远程 URL 或者选择仓库源;

选择从 GitHub 添加远程存储库后,输入远程名称;

添加成功后,您的仓库有一个额外的远程,您可以从中拉取或推送。

# 克隆仓库
克隆会在您的机器上创建远程仓库的本地副本。克隆的仓库包含远程仓库的所有分支、提交和历史记录。默认情况下,Git 会配置一个名为 origin 的远程仓库,指向您克隆的 URL。如果您想要克隆操作,可以按照以下步骤进行:
当您的资源管理器中没有已打开的文件夹时,打开源代码管理(Ctrl+Shift+G),选择克隆仓库或者打开命令面板(Ctrl+Shift+P),输入 Git:Clone;

输入仓库 URL(例如,https://github.com/microsoft/PowerToys),如果您是从 GitHub 克隆,还可以登录您的 GitHub 账户,从您的仓库列表中克隆。本示例中通过 GitHub 账户克隆;

选择电脑上的一个父文件夹来保存项目;

在 Syslab 中选择打开已克隆的仓库。

# 推送、拉取和同步
推送、拉取和同步是保持本地工作与远程仓库同步的核心操作。
# 推送提交
推送会将您的本地提交上传到远程仓库。要推送提交,可以按照以下步骤进行:
本地先提交您的所有更改;
打开源代码管理(Ctrl+Shift+G),单击右上角的视图和更多操作,选择推送;

如果您想要推送到指定的远程,打开源代码管理(Ctrl+Shift+G),单击右上角的视图和更多操作,选择拉取,推送,右侧二级菜单中选择推送到...,弹出的远程仓库列表中选择您要推送提交的远程仓库;

推送提交成功后,您的提交就已上传到远程分支。其他团队成员现在可以拉取您的更改。
# 拉取提交
拉取会从远程仓库拉取下载提交并将其合并到您的本地分支。要拉取提交,可以按照以下步骤进行:
打开源代码管理(Ctrl+Shift+G),单击右上角的视图和更多操作,选择拉取;

如果您想要拉取自指定的远程,打开源代码管理(Ctrl+Shift+G),单击右上角的视图和更多操作,选择拉取,推送,右侧二级菜单中选择拉取自...,弹出的远程仓库列表中选择您要拉取的远程仓库;

Syslab 会下载并合并远程提交,如果您的本地更改与远程提交存在冲突,可以参考分支与解决合并冲突章节来处理它们。
# 抓取提交
如果您想从远程仓库获取下载的提交,但不将它们合并到本地分支,仅用于您在集成它们之前审查传入的更改,可以使用抓取提交。想要抓取提交,可以按照以下步骤进行:
打开源代码管理(Ctrl+Shift+G),单击右上角的视图和更多操作,选择抓取;

抓取后,您可以在合并到 Pull 之前在源代码图中查看传入的提交。
# 使用 rebase 拉取
不同于直接合并远程更改,您还可以在远程更改之上变基本地提交。要 rebase 拉取,可以按照以下步骤进行:
打开源代码管理(Ctrl+Shift+G),单击右上角的视图和更多操作,选择拉取,推送,右侧二级菜单中选择拉取(变基);

Syslab 先应用远程提交,然后在上面重放本地提交,rebase 会创建一个线性的历史记录,没有合并提交记录。
# 同步更改
同步操作结合了 pull 和 push 操作,它首先从远程拉取更改,然后推送您的本地提交。要同步更改,有以下两种方式:
打开源代码管理(Ctrl+Shift+G),选择同步更改;

单击状态栏的同步图标。状态栏的同步指示器显示了您需要推送(↑)和拉取(↓)的提交数量。例如, ↑2 ↓1 表示您有 2 个提交需要推送和 1 个提交需要拉取。
