AWS CodeCommit
用户指南 (API 版本 2015-04-13)

Git 与 AWS CodeCommit 教程

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

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

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

您还可以模拟团队环境:两名用户相互独立地向其 本地存储库 提交更改,并将他们的更改推送到 CodeCommit 存储库。然后,用户将更改从 CodeCommit 存储库 提取到各自的 本地存储库 中,查看另一名用户做出的更改。

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

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

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

  • 向 IAM 用户分配权限。

  • 在您用来完成本教程的本地计算机上为 HTTPS 或 SSH 连接设置凭证管理。

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

步骤 1:创建 CodeCommit 存储库

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

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

注意

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

创建 CodeCommit 存储库

  1. 通过以下网址打开 CodeCommit 控制台:https://console.aws.amazon.com/codesuite/codecommit/home

  2. 在区域选择器中,选择要创建存储库的 AWS 区域。有关更多信息,请参阅区域和 Git 连接终端节点

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

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

    注意

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

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

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

  7. 选择 Create

注意

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

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

步骤 2:创建本地存储库

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

  1. 通过以下网址打开 CodeCommit 控制台:https://console.aws.amazon.com/codesuite/codecommit/home

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

  3. Dashboard 页面上,选择要共享的存储库的名称。

  4. Code 页面上,选择 Clone URL,然后选择您希望用户使用的协议。

  5. 复制显示的 URL 作为您的用户在连接您的 CodeCommit 存储库时将使用的连接协议。

  6. 向您的用户发送连接信息以及任何其他说明,如安装 AWS CLI、对配置文件进行设置或安装 Git 的说明。请务必附上连接协议的配置信息 (例如,对于 HTTPS,配置 Git 的凭证辅助程序)。

步骤 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 add 暂存更改:

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

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

    提示

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

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

在此步骤中,需要将 本地存储库 中的提交推送到 CodeCommit 存储库。

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

git push -u origin master

提示

将文件推送到 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

    对于 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 代表的其他用户名和电子邮件地址(例如,John Doejohndoe@example.com)。这可以更轻松地标识其他用户的提交:

    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) 的默认远程名称从 本地存储库 的默认分支 (master) 推送初始提交:

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

步骤 6:创建和共享分支

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

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

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

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

    如果不知道提交 ID,可以运行 git log 获取它。确保提交使用的是您的用户名和电子邮件地址,而不是其他用户的用户名和电子邮件地址。这是为了模拟 master 是 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. 切换回 master 分支,查看其提交列表。Git 命令应如下所示:

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

    git checkout master 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 存储库同步的权限。此为可选步骤。建议有兴趣了解如何控制对 CodeCommit 存储库的访问权限的用户完成此步骤。

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

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

  1. 登录 AWS 管理控制台 并通过以下网址打开 IAM 控制台 https://console.aws.amazon.com/iam/

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

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

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

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

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

    如果需要使用 SSH,请按照SSH 和 Linux, macOS, or Unix:为 Git 和 CodeCommit 设置公有密钥和私有密钥SSH 和 Windows:为 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. 创建您自己的策略旁,选择选择

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

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

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

    提示

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

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

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

  11. 在导航窗格中,选择 Users

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

  13. 选择 Permissions 选项卡。

  14. Managed Policies 中,选择 Attach Policy

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

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

  17. 如果使用的是 HTTPS,请切换到您的原始凭证。有关更多信息,请参阅步骤 3:设置凭证辅助程序步骤 3:设置凭证辅助程序中的说明。

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

本教程到此结束。

第 9 步:清除

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

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

重要

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

删除 CodeCommit 存储库 (控制台)

  1. 通过以下网址打开 CodeCommit 控制台:https://console.aws.amazon.com/codesuite/codecommit/home

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

  3. 在导航窗格中,选择 Settings

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

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

删除 CodeCommit 存储库 (AWS CLI)

运行 delete-repository 命令:

aws codecommit delete-repository --repository-name MyDemoRepo

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

对于 Linux, macOS, or 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