Git命令(init/clone/status)
之前文章讲述了版本控制系统的一些常用术语,在计算机上安装Git,并为 Git 做了一些初始化配置(比如名字和电子邮件),接下来介绍 使用 git init
创建 Git 仓库,使用 git clone
复制现有仓库并使用 git status
来确定仓库的状态。
创建仓库
在对 Git 仓库进行 commit 或执行任何其他操作之前,需要一个实际存在的仓库
。要使用 Git 新建一个仓库,我们将使用 git init
命令。
需要使用的终端命令:
-
ls
,列出文件和目录 -
mkdir
,新建目录 -
cd
,更改目录 -
rm
,删除文件和目录
更多命令及使用可以查看 Linux 命令行基础 课程。
git init
命令会在当前目录下初始化生成一个空的 Git 仓库。 初始化 Git 跟踪所有内容会用到的所有必要文件和目录。所有这些文件都存储在叫做 .git
(注意开头有个 .,表示在 Mac/Linux 上,它将是一个隐藏目录
)的目录下,我们可以通过 shift+command+.
快捷键显示隐藏的目录。这个 .git 目录是一个库
!Git 会将所有 commit 记录在这里,并跟踪所有内容!
zhanghuabin-mac:~ zhanghuabin$ mkdir -p udacity-git-course/new-git-project && cd $_
zhanghuabin-mac:new-git-project zhanghuabin$ pwd
/Users/zhanghuabin/udacity-git-course/new-git-project
zhanghuabin-mac:new-git-project zhanghuabin$ git init
Initialized empty Git repository in /Users/zhanghuabin/udacity-git-course/new-git-project/.git/
注意,请勿直接修改 .git 目录下的任何文件
。这是仓库的核心。如果你更改了文件名或文件内容,Git 可能就无法跟踪你保存在仓库中的文件,你可能会丢失很多内容!可以查看这些文件,但是请勿编辑或删除这些文件。
-
config -
存储了所有与项目有关的配置设置
。例如,假设你将 Git 全局配置为使用你的个人电子邮箱。如果你想针对某个项目使用你的工作邮箱,则此项更改会被添加到该文件中。 - description - 此文件仅用于 GitWeb 程序,因此可以忽略。
- hooks - 我们会在此处放置客户端或服务器端脚本,以便用来连接到 Git 的不同生命周期事件。
- info - 包含全局排除文件。
-
objects - 此目录将
存储我们提交的所有 commit
。 -
refs - 此目录
存储了指向 commit 的指针
(通常是“分支”和“标签”)
更多 Git 内部原理-底层命令和高层命令请查看 链接,自定义 Git - Git Hooks 链接。
使用 git init 命令可以在当前目录下创建新的空仓库
。运行此命令可以创建隐藏 .git 目录。此 .git 目录是仓库的核心/存储中心。它存储了所有的配置文件和目录,以及所有的 commit。
相关链接:
克隆现有仓库
在 Git 上进行克隆的方法是调用我们将在终端上运行的命令 git clone
,然后传入要克隆的 Git 仓库的路径(通常是 URL)。
注意,在克隆任何内容之前,确保命令行工具已定位于正确的目录下。克隆项目会新建一个目录,并将克隆的 Git 仓库放在其中
。问题是无法创建嵌套的 Git 仓库。因此,确保终端的当前工作目录没有位于 Git 仓库中
。如果当前工作目录没有在 shell 的提示符中显示,输入 pwd
输出工作目录。
zhanghuabin-mac:new-git-project zhanghuabin$ pwd
/Users/zhanghuabin/udacity-git-course/new-git-project
zhanghuabin-mac:new-git-project zhanghuabin$ cd ..
zhanghuabin-mac:udacity-git-course zhanghuabin$ git clone https://github.com/udacity/course-git-blog-project
Cloning into 'course-git-blog-project'...
remote: Counting objects: 131, done.
remote: Total 131 (delta 0), reused 0 (delta 0), pack-reused 131
Receiving objects: 100% (131/131), 2.04 MiB | 195.00 KiB/s, done.
Resolving deltas: 100% (58/58), done.
Checking connectivity... done.
git clone
命令被用于将 blog 项目仓库复制到当前目录的 course-git-blog-project
文件夹中。
Cloning into 'course-git-blog-project'...
,Git 正在创建一个目录(名称与我们要克隆的项目一样),并将仓库放在其中…
其余输出结果基本都是验证信息——也就是统计远程仓库的项目数,然后压缩并接收这些项目,并解压。
$ git clone https://github.com/udacity/course-git-blog-project blog-project
这将执行与上一个命令相同的操作,不过在本地创建的仓库名字变为 blog-project
。我们只需直接在命令行上提供名称,而不是在克隆时让 Git 创建一个名称相同的目录。更多信息请参阅 git clone 文档。
注意,当你第一次使用 Git 时,经常会忽略一个非常重要的步骤。在使用 git clone 命令克隆仓库时,它会为仓库新建一个目录…你已经知道这一点。但是,它不会改变 shell 的工作目录。它会在当前工作目录下创建新的仓库,意味着当前工作目录依然不在这个新的 Git 仓库里!确保使用 cd 命令切换到新的仓库中。
git clone
命令用于创建一个与现有仓库完全相同的副本。
$ git clone <path-to-repository-to-clone>
该命令:
- 会获取现有仓库的路径
- 默认地将创建一个与被克隆的仓库名称相同的目录
- 可以提供第二个参数,作为该目录的名称
- 将在现有工作目录下创建一个新的仓库
判断仓库状态
git status
是了解 Git 的核心所在。它将告诉我们 Git 正在考虑什么,以及 Git 所看到的我们仓库的状态。当你第一次使用 Git 时,你应该一直都要使用 git status 命令!说真的,你应该习惯于运行任何其他命令之后,都运行下该命令。这样可以帮助你了解 Git 的工作原理,并避免你对文件 / 仓库状态做出不正确的推论。
zhanghuabin-mac:course-git-blog-project zhanghuabin$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
输出结果告诉了我们两条信息:
-
On branch master
– 这部分告诉我们 Git 位于 master 分支(也就是默认分支)上。 -
Your branch is up-to-date with 'origin/master'
. – 因为我们使用 git clone 从另一台计算机上复制了此仓库,因此这部分告诉我们项目是否与所复制的仓库保持同步状态。我们不会在其他计算机上处理该项目,因此这一行可以忽略。 -
nothing to commit, working directory clean
– 表示没有任何待定的更改。
可以将这一输出结果看作 休息状态
(resting state),因为没有新的文件、没有对文件作出更改、暂存区没有任何需要 commit 的内容……没有更改或操作。
新仓库中的 git status
(也就是新建目录后,在空目录中执行完 git init
命令后):
$ git status
On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)
如果你将此结果与 course-git-blog-project 项目的 git status
输出结果进行对比,你会发现它们很相似。不同之处在于这个输出结果包含 Initial commit
。
$ git log
fatal: your current branch 'master' does not have any commits yet
知道自己尚未在此仓库中提交任何 commit。
git status
命令将显示仓库的当前状态。
- 告诉我们已在工作目录中被创建但 Git 尚未开始跟踪的新文件
- Git 正在跟踪的已修改文件
- 以及我们将在这门课程的后续阶段学习的很多其他信息 ;-)。
推荐阅读
-
git clone命令
-
成功解决使用git clone命令克隆文件出现error: RPC failed; curl 18 transfer closed with outstanding read data remaini
-
Git命令(init/clone/status)
-
网站运维:git工具-常用命令(2):git clone 克隆版本库、git diff 差异比较、git rm 删除文件
-
git clone命令
-
win10 git bash here执行命令git status -s中文目录/文件乱码解决方案
-
成功解决使用git clone命令克隆文件出现error: RPC failed; curl 18 transfer closed with outstanding read data remaini