Git 和 Amazon CodeCommit 入门 - Amazon CodeCommit
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Git 和 Amazon CodeCommit 入门

如果您刚刚开始使用 Git 和 CodeCommit,本教程可帮助您学习一些简单的入门命令。如果您已熟悉 Git,可以跳过本教程并转到 CodeCommit 入门

在本教程中,您将创建一个存储库,该存储库代表 CodeCommit 存储库的本地副本,我们将该存储库称作本地存储库

创建本地存储库后,您将对其进行一些更改,然后将更改发送(推送)到 CodeCommit 存储库。

您还将模拟团队环境:两名用户各自向其本地存储库提交更改,并将他们的更改推送到 CodeCommit 存储库。然后,这两名用户将更改从 CodeCommit 存储库拉取到各自的本地存储库中,查看对方做出的更改。

您还将在 CodeCommit 存储库中创建分支和标签,并管理某些访问权限。

完成本教程后,您应已完成有关 Git 和 CodeCommit 核心概念的充分练习,可以开始在自己的项目中使用它们。

完成前提条件和设置,包括:

  • 向 IAM 用户分配权限。

  • 将 CodeCommit 设置为使用 HTTPS、SSH 或 git-remote-codecommit 连接到存储库。有关这些选择的更多信息,请参阅 对 Amazon CodeCommit 进行设置

  • 如果您想要使用命令行或终端完成所有操作,包括创建存储库,则还需要配置 Amazon CLI。

步骤 1:创建 CodeCommit 存储库

在此步骤中,您将使用 CodeCommit 控制台创建存储库。

如果您已有要使用的 CodeCommit 存储库,则可跳过该步骤。

注意

根据您的使用情况,您可能需要为创建或访问存储库付费。有关更多信息,请参阅 CodeCommit 产品信息页面上的定价

创建 CodeCommit 存储库
  1. 打开 CodeCommit 控制台:https://console.aws.amazon.com/codesuite/codecommit/home

  2. 使用区域选择器选择要在其中创建存储库的 Amazon Web Services 区域。有关更多信息,请参阅区域和 Git 连接端点

  3. 存储库页面上,选择创建存储库

  4. Create repository (创建存储库) 页面上的 Repository name (存储库名称)中,输入存储库的名称(例如,MyDemoRepo)。

    注意

    存储库名称区分大小写,且不能超过 100 个字符。有关更多信息,请参阅限制

  5. (可选)在描述中,输入描述(例如,My demonstration repository)。这可以帮助您及其他用户了解存储库的用途。

  6. (可选)选择添加标签,向您的存储库添加一个或多个存储库标签(自定义属性标签,可帮助您组织和管理您的 Amazon 资源)。有关更多信息,请参阅在 Amazon CodeCommit 中标记存储库

  7. (可选)展开其他配置,以指定是使用默认 Amazon 托管式密钥还是您自己的客户托管密钥来加密和解密此存储库中的数据。如果您选择使用自己的客户托管密钥,则必须确保该密钥在您创建存储库的 Amazon Web Services 区域可用,并且该密钥处于活跃状态。有关更多信息,请参阅Amazon Key Management Service 和 Amazon CodeCommit 存储库加密

  8. (可选)如果此存储库将包含 Java 或 Python 代码,并且您希望使用 CodeGuru Reviewer 对其进行分析,请选择启用适用于 Java 和 Python 的 Amazon CodeGuru Reviewer。CodeGuru Reviewer 使用多个机器学习模型来查找代码缺陷,并自动在拉取请求中提供改进和修复建议。有关更多信息,请参阅《Amazon CodeGuru Reviewer 用户指南》。

  9. 选择创建

注意

本教程中的剩余步骤使用 MyDemoRepo 作为 CodeCommit 存储库的名称。如果您选择其他名称,请确保在本教程中通篇使用它。

有关创建存储库 (包括如何从终端或命令行创建存储库) 的更多信息,请参阅创建存储库

步骤 2:创建本地存储库

在此步骤中,需要在本地计算机上设置一个本地存储库,以连接到您的存储库。为此,请在本地计算机上选择一个代表本地存储库的目录,然后使用 Git 在该目录中克隆并初始化一个空 CodeCommit 存储库的副本,并指定用于为您的提交添加注释的 Git 用户名和电子邮件地址。

  1. 打开 CodeCommit 控制台:https://console.aws.amazon.com/codesuite/codecommit/home

  2. 在区域选择器中,选择创建存储库的 Amazon Web Services 区域。存储库特定于 Amazon Web Services 区域。有关更多信息,请参阅区域和 Git 连接端点

  3. 从列表中找到您要连接的存储库并选择此存储库。选择 Clone URL (克隆 URL),然后选择克隆或连接到存储库时要使用的协议。此时将复制克隆 URL。

    • 如果您使用的是 IAM 用户的 Git 凭证或 Amazon CLI 附带的凭证助手,请复制 HTTPS URL。

    • 如果您在本地计算机上使用 git-remote-codecommit 命令,请复制 HTTPS (GRC) URL。

    • 如果您使用的是 IAM 用户的 SSH 公有密钥/私有密钥对,请复制 SSH URL。

    注意

    如果看到欢迎页面,而不是存储库列表,说明在您登录的 Amazon Web Services 区域中没有存储库与您的 Amazon 账户关联。要创建存储库,请参阅创建 Amazon CodeCommit 存储库。或按照Git 和 CodeCommit 入门教程中的步骤进行操作。

  4. (可选)我们建议您将本地 Git 客户端配置为使用 main 作为存储库默认分支的名称。本指南所有示例中的默认分支均使用此名称。如果您在控制台中进行首次提交,CodeCommit 也会使用此默认分支名称。运行以下命令为您的系统全局配置默认分支名称:

    git config --global init.defaultBranch main

    如果您更喜欢为所有存储库使用不同的默认分支名称,请将 main 替换为您的首选名称。本教程假定您的默认分支名称为 main

    如果您希望为不同的存储库使用不同的默认分支名称,则可以在本地 (--local) 设置此属性,而不是全局 (--global) 设置。

  5. 在终端或命令提示符处,使用 git clone 命令并提供您在步骤 3 中复制的克隆 URL 来克隆存储库。您的克隆 URL 具体取决于您使用的协议和配置。例如,如果您要在美国东部(俄亥俄州)区域中使用 HTTPS 和 Git 凭证来克隆名为 MyDemoRepo 的存储库,则运行以下命令:

    git clone https://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo

    如果您将 HTTPS 与 git-remote-codecommit 结合使用:

    git clone codecommit://MyDemoRepo my-demo-repo

    如果您正在使用 SSH:

    git clone ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo
    注意

    如果您在尝试克隆存储库时看到错误,则可能尚未完成本地计算机所需的设置。有关更多信息,请参阅对 Amazon CodeCommit 进行设置

步骤 3:创建您的第一个提交

在此步骤中,您将在本地存储库中创建第一个提交。为此,您需要在本地存储库中创建两个示例文件。使用 Git 暂存更改,然后将更改提交到您的本地存储库。

  1. 使用文本编辑器在您的目录中创建以下两个示例文本文件。将这两个文件命名为 cat.txtdog.txt

    cat.txt ------- The domestic cat (Felis catus or Felis silvestris catus) is a small, usually furry, domesticated, and carnivorous mammal.

    dog.txt ------- The domestic dog (Canis lupus familiaris) is a canid that is known as man's best friend.
  2. 运行 git config 以将占位符 your-user-nameyour-email-address 表示的用户名和电子邮件地址添加到本地存储库。这样,就可以更轻松地标识您所做的提交:

    git config --local user.name "your-user-name" git config --local user.email your-email-address
  3. 如果您在创建本地存储库时没有全局设置默认分支名称,请运行以下命令,将默认分支名称设置为 main

    git config --local init.defaultBranch main
  4. 运行 git add 暂存更改:

    git add cat.txt dog.txt
  5. 运行 git commit 提交更改:

    git commit -m "Added cat.txt and dog.txt"
    提示

    要查看刚刚创建的提交的详细信息,请运行 git log

步骤 4:推送您的第一个提交

在此步骤中,您将把提交从本地存储库推送到 CodeCommit 存储库。

运行 git push,通过 Git 用于 CodeCommit 存储库的默认远程存储库名称 (origin) 从本地存储库的默认分支 (main) 推送提交:

git push -u origin main
提示

将文件推送到 CodeCommit 存储库后,可以使用 CodeCommit 控制台查看内容。有关更多信息,请参阅浏览存储库中的文件

步骤 5:共享 CodeCommit 存储库并推送和拉取另一个提交

在此步骤中,您将与团队成员共享有关 CodeCommit 存储库的信息。团队成员利用这些信息获取本地副本,对其进行一些更改,然后将修改后的本地副本推送到 CodeCommit 存储库。然后,您将更改从 CodeCommit 存储库拉取到本地存储库。

在本教程中,您可以通过使用 Git 另外创建一个目录 (独立于您在步骤 2 中创建的目录) 来模拟其他用户。(该目录通常位于其他计算机上。) 此新目录是您的 CodeCommit 存储库的副本。您对现有目录或该新目录所做的任何更改都是独立进行的。确定对这些目录所做的更改的唯一方法是从 CodeCommit 存储库拉取。

我们将现有目录称作本地存储库,将新目录称作共享存储库 (即使它们位于同一台本地计算机上)。

在新目录中,您将获取 CodeCommit 存储库的一个单独副本。然后,添加一个新的示例文件,将更改提交到共享存储库,然后将共享存储库中的提交推送到您的 CodeCommit 存储库。

最后,将存储库中的更改拉取到本地存储库,然后浏览它以查看其他用户提交的更改。

  1. 切换到 /tmp 目录或 c:\temp 目录。

  2. 运行 git clone 在共享存储库中提取一份存储库副本:

    对于 HTTPS:

    git clone https://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo shared-demo-repo

    对于将 HTTPS 与 git-remote-codecommit 一起使用:

    git clone codecommit://MyDemoRepo shared-demo-repo

    对于 SSH:

    git clone ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo shared-demo-repo
    注意

    在 Windows 操作系统上使用 SSH 克隆存储库时,您可能需要将 SSH 密钥 ID 添加到连接字符串,如下所示:

    git clone ssh://Your-SSH-Key-ID@git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo

    有关更多信息,请参阅适用于 Windows 上的 SSH 连接

    在此命令中,MyDemoRepo 是您的 CodeCommit 存储库的名称,shared-demo-repo 是 Git 在 /tmp 目录或 c:\temp 目录中创建的目录的名称。Git 创建该目录后,会向 shared-demo-repo 目录中提取一份存储库副本。

  3. 切换到 shared-demo-repo 目录:

    (For Linux, macOS, or Unix) cd /tmp/shared-demo-repo (For Windows) cd c:\temp\shared-demo-repo
  4. 运行 git config 以添加由占位符 other-user-nameother-email-address 表示的其他用户名和电子邮件地址。这样,就可以更轻松地标识其他用户进行的提交:

    git config --local user.name "other-user-name" git config --local user.email other-email-address
  5. 使用文本编辑器在 shared-demo-repo 目录中创建以下示例文本文件。将该文件命名为 horse.txt

    horse.txt ------- The horse (Equus ferus caballus) is one of two extant subspecies of Equus ferus.
  6. 运行 git add 将更改暂存到共享存储库:

    git add horse.txt
  7. 运行 git commit 将更改提交到共享存储库:

    git commit -m "Added horse.txt"
  8. 运行 git push,通过 Git 用于 CodeCommit 存储库的默认远程存储库名称 (origin) 从本地存储库的默认分支 (main) 推送初始提交:

    git push -u origin main
  9. 切换到本地存储库并运行 git pull,将共享存储库对 CodeCommit 存储库所做的提交拉取到本地存储库。然后运行 git log 查看从共享存储库发起的提交。

步骤 6:创建并共享分支

在此步骤中,您将在本地存储库中创建一个分支,进行一些更改,然后将分支推送到 CodeCommit 存储库。然后,将该分支从 CodeCommit 存储库拉取到共享存储库。

分支允许您独立开发存储库内容的不同版本。例如,在不影响团队成员工作的情况下使用新的软件功能。当该功能稳定时,可以将分支合并到软件的更稳定的分支中。

使用 Git 创建分支,然后将其指向您的第一个提交。您可以使用 Git 将该分支推送到 CodeCommit 存储库。然后,切换到您的共享存储库,使用 Git 将新分支拉取到共享本地存储库并查看该分支。

  1. 在本地存储库中运行 git checkout,指定该分支的名称(例如 MyNewBranch)和您在本地存储库中的第一个提交的 ID。

    如果不知道提交 ID,可以运行 git log 获取它。确保提交使用的是您的用户名和电子邮件地址,而不是其他用户的用户名和电子邮件地址。这是为了模拟 main 是 CodeCommit 存储库的稳定版本,而 MyNewBranch 是用于某种新的、相对不稳定的功能的分支:

    git checkout -b MyNewBranch commit-ID
  2. 运行 git push,将新分支从本地存储库发送到 CodeCommit 存储库:

    git push origin MyNewBranch
  3. 现在,将分支提取到共享存储库并检查结果:

    1. 切换到共享存储库目录 (shared-demo-repo)。

    2. 提取新分支 (git fetch origin)。

    3. 确认已提取分支(git branch --all 显示存储库所有分支的列表)。

    4. 切换到新分支 (git checkout MyNewBranch)。

    5. 通过运行 git statusgit branch 确认您已切换到 MyNewBranch 分支。输出将显示您所在的分支。在本示例中,输出应为 MyNewBranch

    6. 查看分支中的提交列表 (git log)。

    以下是要调用的 Git 命令的列表:

    git fetch origin git branch --all git checkout MyNewBranch git branch or git status git log
  4. 切换回 main 分支,查看其提交列表。Git 命令应如下所示:

    git checkout main git log
  5. 切换到本地存储库中的 main 分支。您可以运行 git statusgit branch。输出将显示您所在的分支。在本示例中,输出应为 main。Git 命令应如下所示:

    git checkout main git branch or git status

步骤 7:创建并共享标签

在此步骤中,您将在本地存储库中创建两个标签,将标签与提交相关联,并将标签推送到 CodeCommit 存储库。然后,将更改从 CodeCommit 存储库拉取到共享存储库。

标签用于给提交 (或分支,甚至是另一个标签) 起一个易于阅读的名称。例如,如果要将提交标记为 v2.1,则可如此操作。提交、分支或标签可以关联任意数量的标签,但一个标签只能关联一个提交、分支或标签。在本教程中,将一个提交标记为 release,将另一个提交标记为 beta

您使用 Git 创建标签,将 release 标签指向您进行的第一个提交,并将 beta 标签指向其他用户进行的提交。然后,使用 Git 将标签推送到 CodeCommit 存储库。接下来,切换到您的共享存储库,使用 Git 将标签拉取到共享本地存储库并查看标签。

  1. 在本地存储库中运行 git tag,指定新标签的名称(例如 release)和您在本地存储库中的第一个提交的 ID。

    如果不知道提交 ID,可以运行 git log 获取它。确保提交使用的是您的用户名和电子邮件地址,而不是其他用户的用户名和电子邮件地址。这是为了模拟您的提交是 CodeCommit 存储库的稳定版本:

    git tag release commit-ID

    再次运行 git tag,将其他用户的提交与 beta 标签关联。这是模拟该提交用于某种新的、相对不稳定的功能的情况:

    git tag beta commit-ID
  2. 运行 git push --tags,将标签发送到 CodeCommit 存储库。

  3. 现在,将标签提取到共享存储库并检查结果:

    1. 切换到共享存储库目录 (shared-demo-repo)。

    2. 提取新标签 (git fetch origin)。

    3. 确认已提取标签(git tag 显示存储库的标签列表)。

    4. 查看有关每个标签(git log releasegit log beta)的信息。

    以下是要调用的 Git 命令的列表:

    git fetch origin git tag git log release git log beta
  4. 也请尝试在本地存储库中执行该操作:

    git log release git log beta

步骤 8:设置访问权限

在此步骤中,您将向用户授予将共享存储库与 CodeCommit 存储库同步的权限。此为可选步骤。建议以下用户执行该步骤:有兴趣了解当用户使用 Git 凭证或结合使用 SSH 密钥对和 IAM 用户来访问 CodeCommit 存储库时如何控制对 CodeCommit 存储库的访问。

注意

如果您使用的是联合访问、临时凭证或 Web 身份提供者验证(例如 IAM Identity Center),请为您的身份提供者设置用户、访问权限和权限,然后使用 git-remote-codecommit。有关更多信息,请参阅 使用 git-remote-codecommit 建立到 Amazon CodeCommit 的 HTTPS 连接的设置步骤使用轮换凭证连接到 Amazon CodeCommit 存储库

为此,您可以使用 IAM 控制台创建用户,默认情况下,该用户没有将共享存储库与 CodeCommit 存储库同步的权限。您可以运行 git pull 来验证这一点。如果新用户没有同步权限,则该命令不起作用。然后,返回到 IAM 控制台,应用允许该用户使用 git pull 的策略。随后,您可以再次运行 git pull 进行验证。

此步骤假定您具备在 Amazon Web Services 账户中创建 IAM 用户的权限。如果您不具备这些权限,则无法执行此步骤中的过程。请跳到步骤 9:清除并清理学习教程时所使用的资源。

  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

    请务必用您在设置 中使用的用户名和密码登录。

  2. 在导航窗格中选择用户,然后选择创建新用户

  3. 在第一个输入用户名称框中,输入示例用户名(例如,JaneDoe-CodeCommit)。选中为每个用户生成访问密钥框,然后选择创建

  4. 选择显示用户安全凭证。记下访问密钥 ID 和秘密访问密钥,或选择 Download Credentials

  5. 按照适用于使用 Git 凭证的 HTTPS 用户中的说明进行操作以生成并提供 IAM 用户的凭证。

    如果需要使用 SSH,请按照SSH 和 Linux、macOS 或 Unix:为 Git 和 CodeCommit 设置公有密钥和私有密钥步骤 3:为 Git 和 CodeCommit 设置公有密钥和私有密钥中的说明操作,设置用户及公钥和私钥。

  6. 运行 git pull。此时会出现下面的错误:

    对于 HTTPS:

    fatal: unable to access 'https://git-codecommit.us-east-2.amazonaws.com/v1/repos/repository-name/': The requested URL returned error: 403.

    对于 SSH:

    fatal: unable to access 'ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/repository-name/': The requested URL returned error: 403.

    出现此错误的原因是,新用户没有将共享存储库与 CodeCommit 存储库同步的权限。

  7. 返回到 IAM 控制台。在导航窗格中选择 Policies,然后选择 Create Policy。(如果 Get Started 按钮出现,选择此按钮,然后选择 Create Policy。)

  8. Create Your Own Policy 旁,选择 Select

  9. 策略名称框中,输入名称(例如 CodeCommitAccess-GettingStarted)。

  10. 策略文档框中,输入以下内容,它允许 IAM 用户从与该 IAM 用户关联的任何存储库中拉取内容:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codecommit:GitPull" ], "Resource": "*" } ] }

    提示

    如果您希望该 IAM 用户能够将提交推送到与之关联的任何存储库,请改为输入:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codecommit:GitPull", "codecommit:GitPush" ], "Resource": "*" } ] }

    有关您可以向用户授予的其他 CodeCommit 操作及资源权限的信息,请参阅 Amazon CodeCommit 的身份验证和访问控制

  11. 在导航窗格中,选择用户

  12. 选择要附加策略的示例用户名(例如,JaneDoe-CodeCommit)。

  13. 选择权限选项卡。

  14. Managed Policies 中,选择 Attach Policy

  15. 选择您刚刚创建的 CodeCommitAccess-GettingStarted 策略,然后选择 Attach Policy (附加策略)

  16. 运行 git pull。这一次,命令应能起作用,并显示 Already up-to-date 消息。

  17. 如果您使用 HTTPS,请切换到您的原始 Git 凭证;或者,如果使用 git-remote-codecommit,请切换到您的常用配置文件。有关更多信息,请参阅适用于使用 Git 凭证的 HTTPS 用户的设置使用 git-remote-codecommit 建立到 Amazon CodeCommit 的 HTTPS 连接的设置步骤中的说明。

    如果使用的是 SSH,请切换到您的原始密钥。有关更多信息,请参阅 SSH 和 Linux、macOS 或 Unix:为 Git 和 CodeCommit 设置公有密钥和私有密钥步骤 3:为 Git 和 CodeCommit 设置公有密钥和私有密钥

本教程到此结束。

步骤 9:清除

在此步骤中,您将删除在本教程中使用的 CodeCommit 存储库,以免产生存储空间使用费。

另外还需要删除您本地计算机上的本地存储库和共享存储库,删除 CodeCommit 存储库后就不需要它们了。

重要

删除该存储库后,您就无法再将其克隆到任何本地存储库或共享存储库,也无法再从任何本地存储库或共享存储库向其推送数据或从其拉取数据。并且无法撤消。

删除 CodeCommit 存储库(控制台)

  1. 打开 CodeCommit 控制台:https://console.aws.amazon.com/codesuite/codecommit/home

  2. 控制面板页面的存储库列表中,选择 MyDemoRepo

  3. 在导航窗格中,选择设置

  4. Settings 页面上的 Delete repository 中,选择 Delete repository

  5. Type the name of the repository to confirm deletion (键入存储库名称以确认删除) 旁边的框中,输入 MyDemoRepo,然后选择 Delete (删除)

删除 CodeCommit 存储库 (Amazon CLI)

运行 delete-repository 命令:

aws codecommit delete-repository --repository-name MyDemoRepo

删除本地存储库和共享存储库

对于 Linux、macOS 或 Unix:

cd /tmp rm -rf /tmp/my-demo-repo rm -rf /tmp/shared-demo-repo

对于 Windows:

cd c:\temp rd /s /q c:\temp\my-demo-repo rd /s /q c:\temp\shared-demo-repo