

 AWS Cloud9 不再向新客户提供。 AWS Cloud9 的现有客户可以继续正常使用这项服务。[了解详情](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Git 面板管理源代码控制
<a name="using-gitpanel"></a>

的 Git 面板扩展 AWS Cloud9 提供了对核心和高级 Git 命令的便捷用户界面访问。

本节演示如何访问关键 Git 功能来管理源代码控制。这些过程侧重于使用 **Git 面板**菜单以针对您的存储库及其内容运行 Git 命令。

![\[用于初始化和克隆 Git 存储库的界面选项\]](http://docs.aws.amazon.com/zh_cn/cloud9/latest/user-guide/images/git-panel-menu.png)


 您还可以通过在 Git 面板搜索框中开始输入名称来访问任何受支持的 Git 命令：

![\[用于初始化和克隆 Git 存储库的界面选项\]](http://docs.aws.amazon.com/zh_cn/cloud9/latest/user-guide/images/git-commands-type.png)


您还可以查看与 Git 面板界面交互时运行的实际 Git 命令。要查看命令行活动，请转至 **Git panel（Git 面板）**菜单，然后选择 **Show Git Output（显示 Git 输出）**。

![\[查看 Git 命令输出\]](http://docs.aws.amazon.com/zh_cn/cloud9/latest/user-guide/images/git-output.png)


## 初始化或克隆 Git 存储库
<a name="init-clone-repo"></a>

Git 存储库（“存储库”）包含项目从头至尾的完整历史记录。存储库包含每次将暂存文件提交至该存储库时所捕获的项目内容的所有快照。

Git 面板支持两种获取 Git 存储库的方式：
+ 将现有目录初始化为 Git 存储库。
+ 克隆现有存储库并将其复制到本地目录。

![\[用于初始化和克隆 Git 存储库的界面选项\]](http://docs.aws.amazon.com/zh_cn/cloud9/latest/user-guide/images/init-clone.png)


**注意**  
仅当您尚未将 Git 存储库添加到环境中的工作区文件夹时，用于初始化或克隆存储库的界面选项方可用。如果您已有存储库的工作目录，则 Git 面板窗口会显示工作目录和暂存区的状态。**Git panel（Git 面板）**菜单也可用于访问您可以针对存储库运行的 Git 命令。<a name="initialize-repo-proc"></a>

## 初始化或克隆存储库
<a name="initialize-repo-proc"></a>

1. 如果 Git 面板尚不可用，请依次选择 **Window（窗口）**、**Source Control（源代码管理）**，然后选择 Git 图标，以对其进行访问。
**注意**  
您还可以使用键盘快捷键 **Ctrl\$1Shift\$1G** 打开 Git 面板。

1. 选择初始化一个新的存储库或克隆一个现有的存储库。

------
#### [ Initialize a repository ]
   + 在 Git 面板中，选择 **Initialize Repository（初始化存储库）**。
   + 接下来，选择一个工作区文件夹，您的 Git 存储库将在其中进行初始化。您可以输入文件夹的路径、选择路径或在对话框中选择文件夹。
   + 如果您使用的是对话框，请选择目标文件夹并选择 **Initialize Repository（初始化存储库）**。

![\[为 Git 存储库选择工作区文件夹\]](http://docs.aws.amazon.com/zh_cn/cloud9/latest/user-guide/images/init-dialog-box.png)


   在选定的文件夹中初始化 Git 存储库后，Git 面板会将该文件夹中已有的所有文件显示为未跟踪并准备添加到 Git 暂存区。

![\[为 Git 存储库选择工作区文件夹\]](http://docs.aws.amazon.com/zh_cn/cloud9/latest/user-guide/images/untracked-changes.png)


------
#### [ Clone a repository ]
   + 在 Git 面板窗口中，选择 **Clone Repository（克隆存储库）**。
   + **接下来，输入要克隆的远程存储库（例如`https://github.com/my-own-repo/my-repo-project-name.git`，克隆托管的存储库 GitHub）的 URL，然后按 Return。**
   + 在显示的对话框中，为克隆的存储库选择工作区文件夹，然后选择 **Select Repository Location（选择存储库位置）**。

**注意**  
如果您要访问托管在外部网站上的存储库（GitHub例如），则还需要输入该网站的登录凭据才能完成该过程。

   在选定的文件夹中克隆远程存储库后，您可以运行 `git pull` 命令将本地存储库与远程存储库中的最新更改同步。有关更多信息，请参阅 [使用远程存储库](#working-with-remote-repos)。

------

## 暂存和提交文件
<a name="staging-and-commit"></a>

获取 Git 存储库后，您可以使用两步过程开始为其填充内容：

1. 将未跟踪或最近修改的内容添加到暂存区。

1. 将暂存区中的文件提交到工作目录。

**重要**  
您可能不希望将工作目录中的每个文件都提交到存储库。例如，您不太可能希望将运行时生成的文件添加到项目的存储库中。使用 Git 面板，您可以通过将文件添加到 `.gitignore` 文件中的列表，对要忽略的文件进行标记。  
要更新 `.gitignore` 中的列表，请右键单击尚未添加到暂存区的文件，然后选择 **Add File to .gitignore（将文件添加到 .gitignore）**。IDE 会打开 `.gitignore` 文件，并将选定文件的名称添加到要忽略的文件列表中。  
有关使用 `.gitignore` 中的模式匹配以排除文件类型的信息，请参阅 [git-scm.com 站点中的参考](https://git-scm.com/docs/gitignore)的相关内容。

------
#### [ Stage files ]

尚未添加到暂存区的未跟踪文件（标记为“U”）和已修改文件（标记为“M”）列在 Git 面板窗格中的 **Changes**（更改）下。

![\[git 存储库的工作区文件夹中未跟踪的内容\]](http://docs.aws.amazon.com/zh_cn/cloud9/latest/user-guide/images/git-unstaged.png)


使用 Git 面板界面，您可以将特定文件或所有未跟踪和已修改的文件添加到暂存区：
+ 特定文件：在文件上暂停，然后选择 **\$1** 将其添加到暂存区。或者，右键单击该文件并选择 **Stage Changes（暂存的更改）**。
+ 所有文件：转到 **Git panel（Git 面板）**菜单，然后选择 **Stage All Changes（暂存所有更改）**。

添加到存储库索引的文件列在 **Staged Changes（暂存的更改）**下。以前未跟踪的文件标记为“A”，以表明其已被暂存。

![\[git 存储库的工作区文件夹中的暂存内容\]](http://docs.aws.amazon.com/zh_cn/cloud9/latest/user-guide/images/staged-changes.png)


**注意**  
您还可以取消暂存特定更改或所有更改。对于单个文件，在文件上暂停，然后选择 **-**。或者，右键单击该文件，然后选择 **Unstage Changes（取消暂存更改）**。要取消暂存所有更改，请转到 **Git panel（Git 面板）**菜单，然后选择 **Unstage All Changes（取消暂存所有更改）**。

------
#### [ Commit files ]

你可以使用 Git 的 `commit` 命令将暂存文件捕获为存储库中的永久快照。使用 Git 面板界面，您可以选择要提交的文件：
+ 提交暂存区的文件：转到 **Git panel（Git 面板）**菜单，然后选择 **Commit（提交）**或 **Commit Staged（提交暂存）**。
+ 提交工作目录中的所有文件：转到 **Git panel（Git 面板）**菜单，然后选择 **Commit All（提交全部）**。（此选项使用 `git add` 将文件添加到暂存区，然后再调用 `git commit`。） 

**注意**  
您还可以在使用 Git 面板提交文件时使用 `amend` 和 `signed-off` 选项。`amend` 选项会修改最近提交的提交消息。`sign-off` 选项可以识别在 Git 日志中执行了提交的用户。  
您还可以通过转到 **Git panel（Git 面板）**菜单，然后选择 **Undo Last Commit（撤消上次提交）**以撤销提交

------

## 查看不同的文件版本
<a name="comparing-changes"></a>

您可以比较在暂存或提交后修改的文件的版本。
+ **Changes（更改）**下列出的文件：选择“M”以查看工作目录中的版本与上次暂存或提交到存储库的版本之间的差异。
+ **Staged Changes（暂存的更改）**下列出的文件：选择“M”以查看暂存区中的版本与上次提交到存储库的版本之间的差异。

选择“M”后，IDE 窗口会显示两个版本的文件之间的差异。一侧显示会在存储库中被跟踪为当前版本的版本。另一侧会显示尚未提交的修改版本。

![\[区分 git 存储库中的版本控制内容\]](http://docs.aws.amazon.com/zh_cn/cloud9/latest/user-guide/images/git-diff.png)


## 使用分支
<a name="working-with-branches"></a>

Git 允许您在独立于存储库主分支的分支中处理新功能，从而极大地促进了工作流管理。你可以在多个分支之间无缝切换，同时确保主分支中始终有 ready-to-build源代码。<a name="create-branch-proc"></a>

## 创建分支
<a name="create-branch-proc"></a>

创建分支涉及命名分支并选择其起点。

1. 在 **Git panel（Git 面板）**菜单中，选择 **Checkout to（签出到）**。或者，您可以选择显示在 Git 面板底部的当前分支的名称。  
![\[选择当前 Git 分支\]](http://docs.aws.amazon.com/zh_cn/cloud9/latest/user-guide/images/git-current-branch.png)

1. 选择用于创建新分支的选项：
   + **Create new branch（创建新分支）**：新分支从当前分支的最后一次提交开始。
   + **Create new branch from（创建新分支自）**：新分支从您在后续屏幕中选择的分支的最后一次提交开始。

1. 输入新分支的名称。

1. 如果您将特定分支指定为分支的起始点，请从列表中选择一个分支。

切换到新分支后，您可以通过查看 Git 面板的底部来检查当前分支的名称。

**注意**  
如果您正在使用远程存储库，请[将新分支发布](#publish-branch-proc)到上游远程存储库以允许其他人访问您的内容。<a name="switch-branches-proc"></a>

## 切换分支
<a name="switch-branches-proc"></a>

使用 Git 管理源代码控制的一个关键优势是，您只需切换分支即可在不同项目之间跳转。
**重要**  
如果当前分支中有尚未提交到存储库的文件，则无法切换分支。您必须首先清理您的工作目录，可通过 [committing（提交）](#staging-and-commit)或 [stashing（存储）](#stashing-work)您的工作来执行。

1. 在 Git 面板底部选择当前分支的名称。或者，转到 **Git panel（Git 面板）**，然后选择 **Checkout to（签出到）**。

1. 从显示的列表中选择一个分支。

切换后，系统会使用最近提交到选定分支的文件版本更新存储库的工作目录。<a name="merge-branch-proc"></a>

## 合并分支
<a name="merge-branch-proc"></a>

完成离散分支中功能的处理工作后，您通常希望将更改集成到主项目中。使用 Git，通过将一个分支（例如功能分支）合并到另一个分支（通常是存储库的主分支或默认分支）来促进这种集成。

1. 要选择将合并到另一个分支的分支，请转到 **Git panel（Git 面板）**菜单，然后选择 **Checkout to（签出到）**。

   或者，在 Git 面板底部选择当前分支的名称。

1. 从显示的列表中，选择要切换到的分支。

1. 在 Git 面板的 **Search（搜索）**框中，开始输入“merge”一词。

   当 **Git: Merge Branch** 显示在 **Commands（命令）**列表下时，选择它。  
![\[查找合并命令\]](http://docs.aws.amazon.com/zh_cn/cloud9/latest/user-guide/images/git-merge.png)

1. 从显示的列表中，选择要合并到目标分支的分支。

   如果合并完成时没有冲突，Git 面板界面会刷新以显示包含合并更改的目标分支。

[合并分支](#working-with-branches)时，您可能会遇到由于对相同内容所做的不兼容更改而导致的合并冲突。如果发生这种情况，系统会警告您务必在提交合并之前解决冲突。

您可以使用 IDE 的代码编辑器窗口来识别两个分支中的冲突内容，然后进行更改以解决冲突。

![\[用于解决合并冲突的 IDE 窗口\]](http://docs.aws.amazon.com/zh_cn/cloud9/latest/user-guide/images/git-merge-conflicts.png)


## 使用远程存储库
<a name="working-with-remote-repos"></a>

托管在互联网或网络上的远程存储库允许团队成员共享其向本地责任所提交的更改，从而促进了协作。通过使用上传和下载数据的 Git 命令，您可以确保“下游”（本地）存储库的内容与“上游”（远程）存储库的内容同步。<a name="publish-branch-proc"></a>

## 将分支发布到远程存储库
<a name="publish-branch-proc"></a>

为本地存储库创建分支后，该分支对您而言是私有的，并且在您将其“上游”推送到远程存储库之前，您的协作者无法使用该分支。

1. 要发布当前分支，请转到 **Git panel（Git 面板）**菜单，然后选择**Publish Branch（发布分支）**。或者，单击 Git 面板底部分支名称旁边的云符号。  
![\[将分支发布到远程存储库的选项\]](http://docs.aws.amazon.com/zh_cn/cloud9/latest/user-guide/images/publish-branch-image.png)

1. 如果需要，请输入您的登录凭证以访问远程存储库。

如果分支成功发布到远程存储库，则 Git 面板底部的分支名称旁边会显示同步符号。选择它以同步本地和远程存储库的内容。

![\[用于同步本地和远程分支的选项\]](http://docs.aws.amazon.com/zh_cn/cloud9/latest/user-guide/images/sync-branch-local-remote.png)


### 在本地和远程存储库之间推送和拉取内容
<a name="pushing-and-pulling"></a>

使用 Git 协作处理共享项目时，您通常首先将其他团队成员的最新更改从远程存储库拉取到本地存储库。在您提交对本地存储库的更改后，您可以将其推送到远程存储库，以便团队的其他成员对其进行访问。这些操作由命令 `git pull` 和 `git push` 执行。

**注意**  
在向大多数托管存储库（例如托管仓库中的存储库）推送和拉取更改时 GitHub，您需要输入登录凭据。

------
#### [ Pull changes from remote ]

通过 Git 面板界面使用 `git pull` 命令，您可以使用提交到远程存储库中分支的最新更改来更新本地存储库。

1. 在 **Git panel（Git 面板）**菜单中，选择 **Checkout to（签出到）**。

1. 在分支列表中，选择要将更改提交到其中的本地分支。

1. 接下来，转至 **Git panel（Git 面板）**菜单，然后选择 **Pull from（从中拉取）**。

1. 选择一个远程存储库，然后选择该存储库中的一个分支以从中拉取更改。

执行拉取操作后，您可以在存储库工作目录中访问从远程存储库检索的文件。修改文件后，您可以将更改推送到远程分支。

------
#### [ Push changes to remote ]

通过 Git 面板界面使用 `git push` 命令，您可以使用本地存储库中指定分支中的最新更改来更新远程存储库。

1. 在 **Git panel（Git 面板）**菜单中，选择 **Checkout to（签出到）**。

1. 在分支列表中，选择要从中推送更改的本地分支。

1. 接下来，转到 **Git panel（Git 面板）**菜单，然后选择 **Push to（推送到）**。

1. 选择一个远程存储库，然后选择该存储库中的一个分支来推送更改。

执行推送后，其他团队成员可以通过将更改下拉到他们自己的存储库本地副本来访问您的更改。

------

## 存储和检索文件
<a name="stashing-work"></a>

借助 Git 的存储功能，您无需预先提交暂存或修改的文件即可切换分支。存储功能会捕获工作目录和暂存区的当前状态，并将其保存以供日后使用。当您仍在处理未完成的内容并需要立即切换分支时，此功能非常有用。<a name="stash-work-proc"></a>

**存储工作**

1. 要存储您的工作目录的当前状态，请转到 **Git panel（Git 面板）**菜单，然后选择以下任一选项：
   + **Stash（存储）**：将工作目录中的所有修改或暂存文件都添加到存储。不会添加未跟踪的文件。
   + **Stash (include Untracked)（存储（包括未跟踪））**：将工作目录中的所有文件（包括那些尚未跟踪的文件）都添加到存储。

1. 输入可帮助您识别存储以供将来检索的可选消息。

存储后，Git 面板界面会刷新以显示已清理的工作目录。<a name="retrieve-work-proc"></a>

**检索存储**

1. 要检索存储并将其应用到您的工作目录，请转到 **Git panel（Git 面板）**菜单，然后选择以下任一选项：
   + **Apply Stash（应用存储）**：将选定的存储应用到您的工作目录，并保留存储以供日后使用。
   + **Pop Stash（弹出存储）**：将选定的存储应用到您的工作目录，并从存储堆栈中删除该存储。
**注意**  
您还可以选择应用或弹出添加到存储堆栈的最后一个存储。

1. 选择要应用于工作目录的存储。

Git 面板界面会刷新，以显示已应用存储的工作目录。