Close

了解 Bitbucket Cloud 的 Git

目标

通过这个以空间为主题的教程学习 Git 的基础知识。

任务简介

您的任务是通过完成教程并跟踪团队的所有空间站来学习 Git。本教程中介绍的命令:

  • git clone、git config、git add、git status、git commit、git push、git pull、git branch、git checkout 和 git merge

时间

30 分钟

观众

您不熟悉 Git 和 Bitbucket Cloud


创建 Git 代码库


作为我们新的 Bitbucket 空间站管理员,您需要保持井井有条。当您为空间站制作文件时,需要将它们保存在一个地方,并与队友共享,无论他们在宇宙的哪个地方。对于 Bitbucket,这意味着将所有内容添加到存储库中。我们来创建一个!

关于存储库的一些有趣事实

  • 无论您正在处理一个文件还是多个文件,您都可以访问本地存储库中的所有文件。
  • 如果您有 Bitbucket 帐户公共存储库的 URL,则可以在没有 Bitbucket 帐户的情况下查看该存储库。
  • 每个存储库都属于一个用户帐户或一个团队。如果是用户帐户,则该用户拥有存储库。+ 如果是团队,则该团队拥有存储库。
  • 存储库负责人是唯一可以删除存储库的人。如果存储库属于团队,则管理员可以删除该存储库。
  • 一个代码项目可以由跨多个帐户的多个存储库组成,但也可以是来自单个帐户的单个存储库。
  • 每个存储库都有 2 GB 的大小限制,但我们建议您的存储库不超过 1 GB。
Git 徽标
相关资料

Git 命令

Bitbucket 徽标
查看解决方案

设置代码库

步骤 1. 创建代码库

最初,您在 Bitbucket 中创建的存储库是空的,不包含任何代码。没关系,因为您马上就要开始添加一些文件。这个 Bitbucket 存储库将成为您的文件的中心存储库,这表示如果您授予其他人权限,他们就可以访问该存储库。创建存储库后,您需要将版本复制到本地系统,这样您就可以从一个代码存储库对其进行更新,然后将这些变更转移到另一个代码存储库。

中央 git 存储库到本地 git 存储库

执行以下操作来创建您的存储库:

1. 在 Bitbucket 中,单击全局侧边栏中的 + 图标,然后选择存储库

从 Bitbucket 侧边导航栏中选择存储库

Bitbucket 将显示创建新的存储库页面。花一些时间查看对话框中的内容。除存储库类型外,您在此页面上输入的任何内容都可以在以后更改。

在 Bitbucket 中创建一个新的存储库配置窗口

2. 在名称字段中输入 BitbucketStationLocations。Bitbucket 将在存储库的 URL 中使用此名称。例如,如果用户 the_best 有一个名为 awesome_repo 的存储库,该存储库的 URL 是 https://bitbucket.org/the_best/awesome_repo

3. 对于访问级别保持这是一个私有存储库框处于选中状态。私有存储库只对您和具有访问权限的人可见。如果取消选中此框,每个人都可以看到您的存储库。

4. 选择 Git 作为存储库类型。请记住,单击创建存储库后无法变更存储库类型。

5. 单击创建存储库。Bitbucket 将创建您的存储库,并显示它的概述页面。

步骤 2. 探索新代码库

花些时间了解一下您刚刚创建的存储库。您应处于存储库的概述页面:

Bitbucket 中的存储库概述屏幕

单击全局侧边栏中的 +,可以进行针对存储库的常见操作。单击导航侧边栏中的项目,查看每个项目背后的内容,包括用于更新存储库详细信息的设置和其他设置。要查看可用于浏览这些项目的快捷方式,请按键盘上的 ? 键。

当您单击侧边栏中的提交选项时,您会发现没有提交,因为您没有为存储库创建任何内容。您的存储库是私有的,并且您还没有邀请任何人访问该存储库,因此目前能够创建或编辑存储库内容的人只有您,您是该存储库的负责人。

复制 Git 代码库并添加文件


现在您有了一个地方可以添加和共享空间站文件,那么您需要通过一种方法从本地系统获取它。要进行设置,需要将 Bitbucket 代码库复制到您的系统。Git 将复制代码库称为“克隆”代码库。克隆代码库时,您会在 Bitbucket 服务器(Git 将其视为起源服务器)和本地系统之间创建一个连接。

Bitbucket 服务器“源头”到“本地系统”

步骤 1. 将代码库克隆到本地系统

从桌面打开浏览器和终端窗口,打开终端窗口后,执行以下操作:

1. 导航到您的主页 (~) 目录

 $ cd ~

随着您更多地使用 Bitbucket,您可能会用到多个存储库。因此,最好创建一个包含所有这些存储库的目录。

2. 创建一个目录来包含您的存储库。

 $ mkdir repos

3. 在终端中,将要使用的目录更新到新的代码存储库目录。

 $ cd ~/repos

4. 在 Bitbucket 中,转到您的 BitbucketStationLocations 存储库。

5. 单击全局侧边栏中的 + 图标,然后选择克隆此存储库

Bitbucket 显示一个弹出式克隆对话框。默认情况下,克隆对话框将协议设置为 HTTPSSSH,具体取决于您的设置。就本教程而言,请勿变更您的默认协议。

在 Bitbucket 中克隆存储库

6. 复制突出显示的克隆命令。

7. 在终端窗口中,粘贴从 Bitbucket 复制的命令,然后按返回

8. 根据终端的要求输入您的 Bitbucket 密码。如果您通过链接到 Google 创建了帐户,请使用该帐户的密码。

  • 如果您遇到 Windows 密码错误
    • 在某些版本的 Microsoft Windows 操作系统和 Git 中,您可能会看到与以下示例类似的错误。

      Windows 克隆密码错误示例
$ git clone

https://emmap1@bitbucket.org/emmap1/bitbucketstationlocations.git 

Cloning into 'bitbucketspacestation'...

fatal: could not read

Password for 'https://emmap1@bitbucket.org': No such file or directory
  • 如果出现此错误,请在命令行中输入以下内容:
  $ git config --global core.askpass
  • 然后返回步骤 4 并重复克隆流程。bash 代理现在应该提示您输入密码。您只需这样做一次即可。

此时,您的终端窗口应该如下所示:

$ cd ~/repos

$ git clone https://emmap1@bitbucket.org/emmap1/bitbucketstationlocations.git
Cloning into 'bitbucketstationlocations'...
Password
warning: You appear to have cloned an empty repository.
  • 您已经知道您的存储库是空的对吧?请记住,您尚未向其中添加任何源文件。

9. 列出您的代码存储库目录的内容,您应该会在里面看到自己的 bitbucketstationlocations 目录。

$ ls

恭喜!您已将存储库克隆到本地系统。

第 2 步. 将文件添加到本地存储库并将其放在 Bitbucket 上

有了本地系统上的存储库,是时候开始工作了。您要开始跟踪所有空间站的位置。为此,我们来创建一个有关您所有位置的文件。

1. 转到终端窗口,导航到本地存储库的顶层。

 $ cd ~/repos/bitbucketstationlocations/

2. 在终端窗口中输入以下行以创建包含内容的新文件。

$ echo "Earth's Moon" >> locations.txt

如果命令行不返回任何内容,则表示您正确创建了文件!

3. 获取本地存储库的状态。通过 git status 命令,您可以知道自己的项目与 Bitbucket 存储库相比的进展情况。

此时,Git 知道您创建了一个新文件,您会看到如下所示的内容:

$ git status 
 On branch main
 Initial commit
 Untracked files:
   (use "git add <file>..." to include in what will be committed)
     locations.txt
 nothing added to commit but untracked files present (use "git add" to track)

该文件未被跟踪,这意味着 Git 看到的文件不是先前提交的一部分。状态输出还显示了下一步:添加文件。

4. 让 Git 追踪您的新 locations.txt 文件(使用 git add 命令)。就像创建文件时一样,当您正确输入时,git add 不会返回任何内容。

$ git add locations.txt

git add 命令将工作目录中的变更移动到 Git 暂存区域。在将一组变更提交到正式历史记录之前,您可以在暂存区域准备一组变更的快照。

暂存区域的工作目录

5. 检查文件状态。

 $ git status 
 On branch main
 Initial commit
 Changes to be committed:
   (use "git rm --cached <file>..." to unstage)
     new file: locations.txt

现在您可以看到新文件已添加(暂存),准备就绪后可以提交。git status 命令显示工作目录和暂存快照的状态。

6. 发出带有提交消息的 git commit 命令,如下一行所示。-m 表示随后显示提交消息。

$ git commit -m 'Initial commit' 
 [main (root-commit) fedc3d3] Initial commit
  1 file changed, 1 insertion(+)
  create mode 100644 locations.txt

git commit 拍摄暂存快照并将其提交到项目历史记录中。与 git add 结合使用,此流程为所有 Git 用户定义了基本工作流程。

提交历史记录的暂存区域

到目前为止,您所做的一切都在本地系统中,对您的 Bitbucket 存储库是不可见的,直到您推送这些变更为止。

  • 进一步了解 Git 和远程存储库
    • Git 与远程存储库(在您的例子中,Bitbucket 是远程存储库)通信的能力是每个基于 Git 的协作工作流程的基础。
    • Git 的协作模式为每个开发人员提供自己的存储库副本,以及自己的本地历史记录和分支结构。用户通常需要共享一系列提交,而不是一个变更集。Git 允许您在存储库之间共享整个分支,而不是将工作副本中的变更集提交到中央存储库。
三个存储库,它们彼此之间有双头箭头
  • 您可以管理与其他存储库的连接,并通过将分支“推送”到其他存储库来发布本地历史记录。您可以看到其他人通过将分支“拉”入您的本地存储库做了什么。

7. 回到您的本地终端窗口,使用 git push origin main 将您提交的变更发送到 Bitbucket。此命令指定您要推送到源头(Bitbucket 服务器)上的主分支(Bitbucket 上的分支)。

您应该会看到类似于以下响应的内容:

 $ git push origin main 
 Counting objects: 3, done.
 Writing objects: 100% (3/3), 253 bytes | 0 bytes/s, done.
 Total 3 (delta 0), reused 0 (delta 0) To https://emmap1@bitbucket.org/emmap1/bitbucketstationlocations.git
  * [new branch] main -> main
 Branch main set up to track remote branch main from origin.

您的提交现在在远程存储库 (origin) 上。

本地系统到 Bitbucket 服务器“源头”

8. 转到您在 Bitbucket 中的 BitbucketStationLocations 存储库。

9. 如果您单击侧边栏中的提交,您将看到您在存储库中的单个提交。Bitbucket 将您刚才的所有操作组合到该提交中并显示给您。可以看到,作者列显示了您在配置 Git 全局文件 (~/.gitconfig) 时使用的值。
如果您在侧边栏中单击“源”,则会看到您的存储库中只有一个源文件,即您刚刚添加的 locations.txt 文件。

Bitbucket 中的 Git 提交源

还记得第一次创建存储库时的样子吗?现在看起来可能有点不一样了。

从 Bitbucket Cloud 上的 Git 代码库中拉取更改


接下来,在空间站管理员活动清单上,您需要一个包含有关您的位置的更多详细信息的文件。由于您目前没有很多位置,可以直接从 Bitbucket 添加。

步骤 1. 在 Bitbucket 中创建文件

要添加您的新位置文件,请执行以下操作:

1. 在您的 BitbucketStationLocations 存储库中,单击,打开源目录。注意,您的目录中只有一个文件 locations.txt

Bitbucket 中的 BitbucketStationSupplies 屏幕

A. “源”页面:单击此链接打开页面。
B. 分支选择:选择您要查看的分支。
C. 更多选项按钮:单击以打开包含更多选项(例如“添加文件”)的菜单。
D. 源文件区域:查看 Bitbucket 中的文件目录。

2. 在页面中,单击右上角的更多选项按钮,然后从菜单中选择添加文件。只有您已经向存储库中添加了至少一个文件时,更多选项按钮才显示。

这时将打开用来创建新文件的页面,如下图所示。

在 Bitbucket 中创建文件

A. 新文件的分支:如果您要向其他分支添加文件,更改此选项。B. 新文件区域:在这里为您的新文件添加内容。

3. 在文件名字段中输入 stationlocations

4. 从语法模式列表中选择 HTML

5. 将以下 HTML 代码添加到文本框中:

 <p>Bitbucket has the following space stations:</p>
 <p>
     <b>Earth's Moon</b><br>
     Headquarters
 </p>

6. 单击提交提交消息字段将显示消息:stationlocations created online with Bitbucket

7. 单击消息字段下面的提交

现在,您在 Bitbucket 中有一个新文件!您将看到包含提交详细信息的页面,在该页面中您可以看到您刚刚进行的变更:

Bitbucket 中包含提交详情的页面

如果您要查看目前为止已经做出的提交的列表,单击侧边栏中的提交

步骤 2. 从远程代码库拉取变更

现在我们需要把这个新文件放到您的本地存储库中。过程很简单,基本上就是让 locations.txt 文件进入 Bitbucket 的推送过程的反向过程。

要将文件拉取到本地存储库中,请执行以下操作:

1. 打开终端窗口,导航到本地存储库的顶层。

 $ cd ~/repos/bitbucketstationlocations/

2. 输入 git pull--all 命令,从 Bitbucket 中提取所有变更。(在更复杂的分支工作流程中,拉取和合并所有变更可能不合适。)根据要求输入您的 Bitbucket 密码。您的终端应如下所示

$ git pull --all
 Fetching origin
 remote: Counting objects: 3, done.
 remote: Compressing objects: 100% (3/3), done.
 remote: Total 3 (delta 0), reused 0 (delta 0)
 Unpacking objects: 100% (3/3), done.
 From https://bitbucket.org/emmap1/bitbucketstationlocations
    fe5a280..fcbeeb0 main -> origin/main
 Updating fe5a280..fcbeeb0
 Fast-forward
  stationlocations | 5 ++++++++++++++
  1 file changed, 5 insertions(+)
  create mode 100644 stationlocations

git pull 命令使用单个命令将远程存储库 (Bitbucket) 中的文件合并到本地存储库中。

Bitbucket 服务器“源头”到本地系统

3. 导航到本地系统上的存储库文件夹,您将看到刚才添加的文件。

非常好!添加了关于空间站位置的两个文件后,您已经在 Bitbucket 和本地系统之间执行了基本的 Git 工作流程(克隆、添加、提交、推送和拉取)。

使用 Git 分支合并文件


作为空间站管理员承担一定的责任。有时您需要锁定信息,尤其是在绘制太阳系中的新位置时。学习分支将允许您更新文件,并且仅在准备就绪时才共享信息。

当您以团队形式工作时,分支是最强大的。您可以通过自己的分支处理您负责的项目部分,从 Bitbucket 拉取更新,然后将您的所有工作成果合并到主分支中。我们的文档中详细介绍了为何您需要使用分支。

分支代表您的存储库的一个独立开发线路。可以把它想象成一个全新的工作目录、暂存区域和项目历史。创建任何新分支之前,都会自动从主分支开始。举一个直观的例子,下图显示了主分支和另一个分支进行了错误修复更新。

带有错误修复的分支和主分支

第 1 步. 创建分支并进行变更

创建一个分支,您可以在其中添加尚未准备好提交的空间站未来计划。当您准备好让所有人知道这些计划时,您可以将变更合并到您的 Bitbucket 存储库中,然后删除不再需要的分支。

重要的是要明白,分支只是指向提交的指针。当您创建分支时,Git 只需创建一个新指针,它不会创建全新的一组文件或文件夹。开始之前,您的存储库如下所示:

四个相连的点,最右边的标记为“main”

要创建分支,请执行以下操作:

1. 转到终端窗口,使用以下命令导航到本地存储库的顶层:

cd ~/repos/bitbucketstationlocations/

2. 从终端窗口创建分支。

$ git branch future-plans

这个命令会创建一个分支,但不会将您切换到那个分支,所以您的存储库看起来像这样:

四个相连的点,最右边的标记为“main”和“Future-plans”

存储库历史记录保持不变。您得到的只是一个指向当前分支的新指针。要开始开发新分支,您必须签出您想要使用的分支。

3. 签出您刚刚创建的新分支,开始使用。

$ git checkout future-plans 
Switched to branch 'future-plans'

git checkout命令与 git 分支齐头并进。因为您正在创建一个分支来处理新内容,所以每次您使用 git branch 创建一个新分支时,如果要使用,都要确保将其签出(使用 git checkout)。现在您已经签出了新分支,您的 Git 工作流程看起来像这样:

未来计划从主分支中分支出来

4. 在本地系统上搜索 bitbucketstationlocations 文件夹并将其打开。您会发现,由于有了新分支,目录中没有多余的文件或文件夹。

5. 使用文本编辑器打开 stationlocations 文件。

6. 通过添加其他站点位置对文件进行变更:

<p>Bitbucket has the following space stations:</p>
<p>
   <b>Earth's Moon</b><br>
   Headquarters
</p>
<p>
   <b>Mars</b><br>
   Recreation Department
</p>

7. 保存并关闭该文件。

8. 在终端窗口中输入 git status。您应能看到类似下面这样的内容:

$ git status 
On branch future-plans
Changes not staged for commit:
 (use "git add <file>..." to update what will be committed)
 (use "git checkout -- <file>..." to discard changes in working directory)
   modified: stationlocations
no changes added to commit (use "git add" and/or "git commit -a")

注意到 On branch future-plans 行了吗?如果您之前输入了 git status,则该行在主分支上,因为您只有一个主分支。在暂存或提交变更之前,请务必检查此行,以确保要添加变更的分支已签出。

9. 暂存您的文件。

$ git add stationlocations

10. 在终端窗口中输入 git commit 命令,如下所示:

$ git commit stationlocations -m 'making a change in a branch' 
[future-plans e3b7732] making a change in a branch
1 file changed, 4 insertions(+)

有了最近的提交,您的存储库看起来像这样:

未来计划提交至主分支

现在是时候将您刚才所做的变更合并回分支了。

步骤 2. 合并分支:快进式合并

您的空间站正在成长,现在该是火星位置开幕式了。现在,您的未来计划已正在实现,您可以将未来计划分支合并到本地系统的主分支中。

由于您只创建了一个分支并做了一个变更,因此请使用快进分支方法进行合并。您可以进行快进合并,因为您有一条从当前分支尖端到目标分支的线性路径。不是“实际上”合并分支,Git 要整合历史记录,所要做的就是将当前分支的尖端向上移动(即“快进”)到目标分支的尖端。这有效地合并了历史记录,因为所有可从目标分支访问的提交现在都可以通过当前分支获得。

未来计划和主分支合并

这种分支工作流程对于变更较小的短期主题分支很常见,而对于运行时间较长的功能则不常见。

要完成快进合并,请执行以下操作:

1. 转到终端窗口,导航到本地存储库的顶层。

 $ cd ~/repos/bitbucketstationlocations/

2. 输入 git status 命令以确保您已提交所有变更,并找出您签出了哪个分支。

$ git status 
On branch future-plans
nothing to commit, working directory clean

3. 切换到分支。

$ git checkout main 
Switched to branch 'main'
Your branch is up-to-date with 'origin/main'.

4. 将未来计划分支的变更合并到分支中。它会类似于下方的内容:

$ git merge future-plans 
Updating fcbeeb0..e3b7732
Fast-forward
stationlocations | 4 ++++
1 file changed, 4 insertions(+)

您基本上已经将分支的指针向前移动到了当前分支的头部,您的存储库看起来就像上面的快进合并。

5. 因为您不打算再使用未来计划,所以您可以删除分支。

$ git branch -d future-plans 
Deleted branch future-plans (was e3b7732).

当您删除未来计划时,您仍然可以使用提交 ID 从主分支访问该分支。例如,如果您想撤销从未来计划中添加的变更,请使用刚才收到的提交 ID 返回该分支。

6. 输入 git status 以查看合并结果,该结果显示您的本地存储库比远程存储库领先一个。它会类似于下方的内容:

$ git status 
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
 (use "git push" to publish your local commits)
nothing to commit, working directory clean

以下是您到目前为止所做的事情:

  • 创建了一个分支并签出
  • 在新分支中进行了变更
  • 已将变更提交到新分支
  • 将变更集成回主分支中
  • 删除了您不再使用的分支。

接下来,我们需要将所有这些工作推送回您的远程存储库 Bitbucket。

步骤 3. 将变更推送到 Bitbucket

您想让其他人都能看到新空间站的位置。为此,您可以将本地存储库的当前状态推送到 Bitbucket。

此图显示了当您的本地存储库有中央存储库没有的变更并将这些变更推送到 Bitbucket 时会发生什么。

更改会反映在本地和主存储库中

以下是将变更推送到远程存储库的方法:

1. 在终端窗口的存储库目录中,输入 git push origin main 来推送变更。它会类似于下方的内容:

$ git push origin main
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 401 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://emmap1@bitbucket.org/emmap1/bitbucketstationlocations.git
  fcbeeb0..e3b7732 main -> main

2. 单击 Bitbucket 存储库的概览页面,您会看到您的推送显示在最近的活动信息流中。

3. 单击提交,您可以看到本地系统中的该项提交。请注意,该变更具有与您本地系统上相同的提交 ID。

Bitbucket 中的最近提交活动流

您还可以看到,提交列表左边的那一行有一条直接的路径,没有显示任何分支。这是因为未来计划分支从未与远程存储库交互,只与我们创建和提交的变更进行过交互。

4. 单击分支,注意该页面也没有该分支的记录。

5. 单击,然后单击 stationlocations 文件。您可以看到文件最后的变更具有您刚刚推送的提交 ID。

6. 单击文件历史记录列表查看为此文件提交的变更,类似下图所示。

Bitbucket 中的文件历史记录列表

您已大功告成!

不确定您能否记住刚才学到的所有 Git 命令?没问题。将我们的基本 Git 命令页面添加为书签,以便在需要时可以参考该页面。


分享此文章

推荐阅读

将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。

人们通过满是工具的墙进行协作

Bitbucket 博客

Devops 示意图

DevOps 学习路径

与 Atlassian 专家一起进行 Den 功能演示

Bitbucket Cloud 与 Atlassian Open DevOps 如何协同工作

注册以获取我们的 DevOps 新闻资讯

Thank you for signing up