创建Git仓库

Git init

在对 Git 仓库进行 commit 或执行任何其他操作之前,需要一个实际存在的仓库。要使用 Git 新建一个仓库,我们将使用 git init 命令。

init 子命令是"initialize"(初始化)的简称,这个命令很有用,因为它将进行所有仓库初始设置。稍后我们将了解它的作用。

所需的命令

注意!我们将在这节课使用以下终端命令:

  • ls - 用来列出文件和目录
  • mkdir - 用来新建目录
  • cd - 用来更改目录
  • rm - 用来删除文件和目录

如果你不知道如何使用它们,请参阅我们的 Linux 命令行基础 课程!

我们还会涉及的一个概念是当前目录,即你的 shell 正在查看的目录。使用 cd 可以更改工作目录,使用 ls(单独使用)会列出工作目录下的文件。如果你忘记 shell 的当前工作目录,可以使用 pwd 命令(表示 print working directory 输出工作目录)输出该目录的名称。

创建课程目录

我们将为本课程新建一个项目。因为我们都是专业人士,因此我们希望我们的项目具有条理性。如果你已经在计算机上有一个放置所有项目的文件夹,则可以继续这么做。我会将所有的工作文件存储在目录 udacity-git-course 下。

如果你想跟着我一起操作:

  • 创建一个目录,叫做 udacity-git-course

  • 在该目录中,创建另一个目录,叫做 new-git-project

  • 使用 cd 命令移到 new-git-project 目录下

如果你和我一样喜欢复制粘贴,则在终端上运行以下命令:- mkdir -p udacity-git-course/new-git-project && cd $_(在运行此命令前,确保使用 cd 命令转到你想将这些文件存储到的位置。例如,如果你想将文件存储到桌面上,则使用 cd 转到桌面,然后再运行该命令。)

git init
很棒!我们已经准备好,并且可以开始使用 git init 命令了!

这是最简单的命令之一。你只需在终端上运行 git init。就这么多内容,立即试试吧!

.git 目录内容

我们将查看 .git 目录…对这门课程来说,该目录并不重要,因此不用记住任何内容,你可以在此处深入了解 Git 背后的工作原理。

下面简要概述了 .git 目录下的各项内容:

  • config 文件 - 存储了所有与项目有关的配置设置。

摘自于 Git Book - 英 | 中文点此处

Git 会查看 Git 目录下你当前所使用仓库对应的配置文件(.git/config)中的配置值。这些值仅适用于当前仓库。

例如,假设你将 Git 全局配置为使用你的个人电子邮箱。如果你想针对某个项目使用你的工作邮箱,则此项更改会被添加到该文件中。

  • description 文件 - 此文件仅用于 GitWeb 程序,因此可以忽略

  • hooks 目录 - 我们会在此处放置客户端或服务器端脚本,以便用来连接到 Git 的不同生命周期事件

  • info 目录 - 包含全局排除文件

  • objects 目录 - 此目录将存储我们提交的所有 commit

  • refs 目录 - 此目录存储了指向 commit 的指针(通常是“分支”和“标签”)

注意,除了 hooks 目录,你应该不会对这里的其他内容有太多的困扰。hooks 目录可以用来连接到 Git 工作流的不同部分或事件,但是在这门课程中,我们不会对此作过多介绍。

深入研究

git init 小结

使用 git init 命令可以在当前目录下创建新的空仓库。

$ git init

运行此命令可以创建隐藏 .git 目录。此 .git 目录是仓库的核心/存储中心。它存储了所有的配置文件和目录,以及所有的 commit。

实用链接

为何要克隆?

首先,什么是克隆?

制作完全相同的副本

制作完全相同的副本有什么意义,这与 Git 和版本控制有何关系?

你为何要创建一个完全相同的副本?当我在创建新的 Web 项目时,我会执行以下步骤:

...每次新建一个项目,我都执行这些步骤!其实花费了很多精力,我不想不断重复执行同一步骤,因此我最后一次执行了上述列出的所有步骤,并为我自己创建了一个起始项目。现在,当我新建项目时,我只需制作一个与起始项目完全相同的副本!

在 Git 上进行克隆的方法是调用我们将在终端上运行的命令 git clone,然后传入要克隆的 Git 仓库的路径(通常是 URL)。

想要尝试克隆一个现有的项目?我们来看看如何使用 Git 的 clone 命令!

验证终端位置

提示:在克隆任何内容之前,确保命令行工具已定位于正确的目录下。克隆项目会新建一个目录,并将克隆的 Git 仓库放在其中。问题是无法创建嵌套的 Git 仓库。因此,确保终端的当前工作目录没有位于 Git 仓库中。如果当前工作目录没有在 shell 的提示符中显示,输入 pwd 输出工作目录。

克隆 blog 仓库

准备好了?我们开始克隆吧!

输入命令 git clone,然后输入你要克隆的 Git 仓库的路径。我们将在这门课程中一直使用的项目位于以下 URL 上:https://github.com/udacity/course-git-blog-project 。因此,使用该 URL 克隆 Blog 项目的完整命令是:

$ git clone https://github.com/udacity/course-git-blog-project

温馨提醒: 复制上述代码时,记得去掉 $

git clone 输出结果的简要说明
我们简要地介绍下 git clone 显示的输出结果。

第一行是"Cloning into 'course-git-blog-project'…"。Git 正在创建一个目录(名称与我们要克隆的项目一样),并将仓库放在其中…很酷!

其余输出结果基本都是验证信息——也就是统计远程仓库的项目数,然后压缩并接收这些项目,并解压。

克隆项目并使用不同的名称
你刚刚克隆了本课程的 blog 项目。很棒!

你在终端中运行的命令是:

$ git clone https://github.com/udacity/course-git-blog-project
...它创建了一个叫做 course-git-blog-project 的目录

如果你想使用除默认名外的其他名称呢?没问题,只需运行上述命令并在 Finder/Windows Explorer 中手动重命名或在终端上使用 mv 重命名即可。但是步骤还是太多了!我们希望一次性地克隆项目并使用不同的名称,如何实现呢?

不在 Git 仓库中?

警告:当你第一次使用 Git 时,经常会忽略一个非常重要的步骤。在使用 git clone 命令克隆仓库时,它会为仓库新建一个目录...你已经知道这一点。但是,它不会改变 shell 的工作目录。它会在当前工作目录下创建新的仓库,意味着当前工作目录依然不在这个新的 Git 仓库里!确保使用 cd 命令切换到新的仓库中。

注意,根据终端的提示符进行判断,如果你位于 Git 仓库目录下,提示符将包含一个用小括号括起来的名称。

查看项目

你已经将项目克隆到计算机上,并使用 cd 转移到该项目中。是不是该在浏览器中查看下该项目的外观了?

在你喜欢的浏览器中打开 index.html 文件。

git clone 小结

git clone 命令用于创建一个与现有仓库完全相同的副本。

$ git clone <path-to-repository-to-clone>

该命令:

  • 会获取现有仓库的路径

  • 默认地将创建一个与被克隆的仓库名称相同的目录

  • 可以提供第二个参数,作为该目录的名称

  • 将在现有工作目录下创建一个新的仓库

实用链接

状态更新

到目前为止,我们已经有了两个 Git 仓库:

  • 使用 git init 命令创建的空仓库
  • 使用 git clone 命令克隆的仓库

如何查找关于这些仓库的任何信息?Git 在管理着它们,但是如何了解 Git 知道多少关于这些仓库的信息?要了解仓库的状况,我们需要使用 git status 命令。知道 Git 仓库的状况非常重要,因此让我们进入下节内容:判断仓库的状态。

在命令行中使用 Git 可能会有点挑战,因为它有点类似于黑箱 - 维基百科 - 英 | 黑箱理论 - 百度百科 - 中。如何判断你是否需要运行某些 Git 命令? Git 是否已经准备好运行某个命令? 如果我运行了一个命令,但我认为它并未被执行,我该如何进行验证呢? git status 命令可以回答所有这些问题!

$ git status

git status 是了解 Git 的核心所在。它将告诉我们 Git 正在考虑什么,以及 Git 所看到的我们仓库的状态。当你第一次使用 Git 时,你应该一直都要使用 git status 命令!说真的,你应该习惯于运行任何其他命令之后,都运行下该命令。这样可以帮助你了解 Git 的工作原理,并避免你对文件 / 仓库状态做出不正确的推论。

git status 说明
正如你在上面的 GIF 中所看到的,在 course-git-blog-project 项目中运行 git status 将产生以下输出结果:

On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

输出结果告诉了我们两条信息:

  1. On branch master – 这部分告诉我们 Git 位于 master 分支上。你已在术语表中获取了对分支的介绍,那么这是"master"分支(也就是默认分支)。我们将在第 5 节课深入了解分支。

  2. Your branch is up-to-date with 'origin/master'. – 因为我们使用 git clone 从另一台计算机上复制了此仓库,因此这部分告诉我们项目是否与所复制的仓库保持同步状态。我们不会在其他计算机上处理该项目,因此这一行可以忽略。

  3. nothing to commit, working directory clean – 表示没有任何待定的更改。

可以将这一输出结果看作“休息状态(resting state)”(这并不是官方解释,只是我喜欢这么理解!)。因为没有新的文件、没有对文件作出更改、暂存区没有任何需要 commit 的内容……没有更改或操作,因此我喜欢将其称为休息状态。

这就是在已经具有 commit 的仓库中运行 git status 之后的状态。我们切换到 new-git-project 项目,看看 git status 输出结果是什么。

💡 Git v2.14 版本的改变 💡

在 Git version 2.14 版本中,在一个空目录中运行 git status 命令的结果中,将 "Inital commit"(初始提交)的用词,改为更清晰明了的 "No commits yet"(尚未有任何提交),所以输出将会是:

On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

新仓库中的 git status 说明

这是在 new-git-project 项目中运行 git status 后的输出结果:

$ git status
On branch master

Initial commit

nothing to commit (create/copy files and use "git add" to track)

澄清一下,我尚未在我的项目中提交任何 commit。如果你提交了 commit,那么你的输出结果应该看起来和 course-git-blog-project 项目中的完全一样。

如果你将此结果与 course-git-blog-project 项目的 git status 输出结果进行对比,你会发现它们很相似。不同之处在于这个输出结果包含 Initial commit。这有点让人困惑,因为此仓库中尚无任何 commit!我们还未学习如何进行 commit,但是当我们进行学习时,我们将能够提交初始 commit。

想要提前了解下下节课的内容,同时证明此仓库尚无任何 commit?我就知道你想试试!试着运行命令 git log,并查看其输出结果:

$ git log
fatal: your current branch 'master' does not have any commits yet

看起来有点可怕。“Fatal(致命)”?幸运的是,这仅仅意味着 Git 程序正在退出,因为它没有任何需要完成的任务。Git 将此情况视为错误,但这并不是一个问题。因为我们知道自己尚未在此仓库中提交任何 commit。

从输出结果可以清晰地看出没有任何 commit!

我们刚刚简单地了解了 git status 命令。git status 的输出结果将有所不同,具体取决于文件是否被添加/删除/修改、暂存索引的情况,以及仓库的状态。我们将在整个课程中持续使用 git status 命令,因此请熟练掌握该命令!

git status 小结

git status 命令将显示仓库的当前状态。

$ git status

我一直在强调这个命令非常的重要,因为这是你第一次使用 Git。该命令将:

  • 告诉我们已在工作目录中被创建但 Git 尚未开始跟踪的新文件

  • Git 正在跟踪的已修改文件

  • 以及我们将在这门课程的后续阶段学习的很多其他信息 ;-)。

拓展链接

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,999评论 4 368
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,102评论 1 302
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,709评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,439评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,846评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,881评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,062评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,783评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,517评论 1 248
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,762评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,241评论 1 264
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,568评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,236评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,145评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,941评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,965评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,802评论 2 275

推荐阅读更多精彩内容

  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 15,765评论 5 147
  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 3,870评论 0 11
  • Git使用教程:https://blog.csdn.net/tgbus18990140382/article/de...
    SkTj阅读 2,720评论 1 11
  • Git常用语法 [TOC] Git简介 描述 ​ Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,...
    君惜丶阅读 3,446评论 0 13
  • 功夫大师说
    墨馨凡阅读 149评论 0 0