Git 教程

个人 Git 学习记录

Git 简介

Git 是什么

Git 是目前世界上最先进的分布式版本控制系统。
2005年,Linus为了管理Linux系统的源码,花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!

集中式和分布式版本控制系统的区别

集中式版本控制系统(CVS,SVN…),版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

image

分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。

Git 安装

在Linux上安装Git

1
2
3
4
5
$ sudo apt-get install git
$ git --version # 查看当前git的版本
$ git --help # 查看git基本命令
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

Git 创建版本库

版本库又名仓库 repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被 Git 管理起来,每个文件的修改、删除,Git 都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如 TXT 文件,网页,所有的程序代码等等,Git 也不例外。版本控制系统可以告诉你每次的改动,比如在第 5 行加了一个单词 “Linux”,在第 8 行删了一个单词 “Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从 100KB 改成了 120KB,但到底改了啥,版本控制系统不知道,也没法知道。

初始化一个仓库

1
2
3
4
$ mkdir learngit
$ cd learngit
$ git init
Initialized empty Git repository in ~/learngit/.git/

可以发现当前目录下多了一个 .git 的目录,这个目录是 Git 来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把 Git 仓库给破坏了。如果你没有看到 .git 目录,那是因为这个目录默认是隐藏的,用 ls -ah 命令就可以看见。

把文件添加到版本库

把一个文件放到Git仓库只需要两步:
learngit 目录下(子目录也行)编写一个 readme.txt 文件

1
2
Git is a version control system.
Git is free software.

第一步,用命令 git add 告诉Git,把文件添加到仓库:

1
$ git add readme.txt

执行上面的命令,没有任何显示,这就对了,Unix 的哲学是“没有消息就是好消息”,说明添加成功。
第二步,用命令git commit告诉Git,把文件提交到仓库:

1
2
3
4
$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt

简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit命令执行成功后会告诉你,1个文件被改动(我们新添加的readme.txt文件),插入了两行内容(readme.txt有两行内容)。

版本管理

我们已经成功地添加并提交了一个 readme.txt 文件,现在,是时候继续工作了,于是,我们继续修改 readme.txt 文件,改成如下内容:

1
2
Git is a distributed version control system.
Git is free software.

现在,运行 git status 命令看看结果:

1
2
3
4
5
6
7
8
9
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

git status 命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt 被修改过了,但还没有准备提交的修改。

-------------本文结束感谢您的阅读-------------
显示 Gitment 评论