一、Git 简介
什么是“版本控制”? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。在 CODE CHINA 中,我们对保存着软件源代码的文件作版本控制,但实际上,你可以对任何类型的文件进行版本控制。
使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加的工作量却微乎其微。
版本控制系统发展可以分为三个阶段:
本地版本控制系统
集中式版本控制系统
分布式版本控制系统
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
二、Git安装
在 Windows 上安装
Git 官网下载对应系统的软件了,下载地址为 git-scm.com或者gitforwindows.org
无脑安装,修改安装地址,其他默认。 安装完成如图。
三、Git环境配置
好了,当你当完成了 Git 的安装后,接下来我们就需要对 Git 进行一些必要的环境配置。
通常情况下,每台计算机上只需要配置一次 Git,当 Git 程序升级时会保留配置信息。 你可以在任何时候再次通过运行 git config命令来修改它们。
git config
Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。
配置用户名和邮件地址
安装完 Git
之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git
提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改:
$ git config --global user.name "凌贤文" $ git config --global user.email lingxw@zjnu.edu.cn
再次强调,如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。
当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。
检查配置
git config --list
命令来列出所有 Git
当时能找到的配置。
通过以下命令查看所有的配置以及它们所在的文件
$ git config --list --show-origin
Git 颜色配置
$ git config --global color.ui true
让 Git
显示颜色,会让命令输出看起来更醒目
Git忽略文件配置
日常使用中,我们一般不需要从头开始编辑.gitignore文件,已经有各种现成的种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:GitCode / Gitignore · GitCode
忽略文件的原则是:
忽略操作系统自动生成的文件,比如缩略图等;
忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
让我们来看一个例子:
假设你在 Windows 下进行 Python 开发,Windows 会自动在有图片的目录下生成隐藏的缩略图文件,如果有自定义目录,目录下就会有Desktop.ini文件,因此你需要忽略 Windows 自动生成的垃圾文件:
.gitignore 文件
# Windows: Thumbs.db ehthumbs.db Desktop.ini
然后,继续忽略Python
编译产生的.pyc、.pyo、dist
等文件或目录:
.gitignore 文件
# Windows: Thumbs.db ehthumbs.db Desktop.ini # Python: *.py[cod] *.so *.egg *.egg-info dist build # My configurations: db.ini deploy_key_rsa
最后一步就是把.gitignore也提交到 Git,就完成了!当然检验.gitignore的标准是git status命令是不是说working directory clean。
有些时候,你想添加一个文件到 Git,但发现添加不了,原因是这个文件被.gitignore忽略了:
强制添加被忽略文件
$ git add App.class The following paths are ignored by one of your .gitignore files: App.class Use -f if you really want to add them.
如果你确实想添加该文件,可以用-f
强制添加到 Git
:
$ git add -f App.class
或者你发现,可能是.gitignore
写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore
命令检查:
检查忽略规则
$ git check-ignore -v App.class .gitignore:3:*.class App.class
Git会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。
还有些时候,当我们编写了规则排除了部分文件时:
# 排除所有.开头的隐藏文件: .* # 排除所有.class文件: *.class
但是我们发现.*
这个规则把.gitignore
也排除了,并且App.class
需要被添加到版本库,但是被*.class
规则排除了。
添加例外规则
这个时候,虽然可以用git add -f
强制添加进去,但我们建议你可以添加两条例外规则:
# 排除所有.开头的隐藏文件: .* # 排除所有.class文件: *.class # 不排除.gitignore和App.class: !.gitignore !App.class
把指定文件排除在.gitignore
规则外的写法就是!+文件名
,所以,只需把例外文件添加进去即可。
Git 配置别名
除了通过 配置忽略文件 来提高git commit 时的便捷性外,Git 中还有一种可以让大家在敲入 Git 命令时偷懒的办法——那就是配置 Git 别名。
配置 git status/commit/checkout/branch
比如在使用git status命令时,我们可以通过配置别名的方式将其配置为git st,这样在使用时是不是就比输入 git status简单方便很多呢?
我们只需要敲一行命令,告诉 Git,以后st就表示status:
$ git config --global alias.st status
当然还有别的命令可以简写,很多人都用co表示checkout,ci表示commit,br表示branch:
配置别名
$ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.br branch
配置完成以上别名后,以后提交就可以简写成:
$ git ci -m "sth."
配置 git reset HEAD file
再比如git reset HEAD file
命令,他可以把暂存区的修改撤销掉(unstage),重新放回工作区。既然是一个unstage
操作,就可以配置一个unstage
别名:
$ git config --global alias.unstage 'reset HEAD'
当你敲入命令:
$ git unstage test.py
实际上 Git
执行的是:
$ git reset HEAD test.py
Git 配置文件
这些自定义的Git
配置文件通常都存放在仓库的.git/config
文件中。
四、Git的使用
我们先来认识一下版本库——Repository,接下来我们所有提到的 Git 基础命令,都是基于版本库的。
版本库又名仓库,英文名 repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
在已存在目录中初始化仓库 —— git init
首先,选择一个合适的地方,创建一个空目录:
第二步,通过git init
命令把这个目录变成 Git
可以管理的仓库:
1. $ git init 2. Initialized empty Git repository in /Users/xxm/learning-git/.git/
瞬间 Git 就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),同时在当前目录下多了一个.git的目录,这个目录是 Git 来跟踪管理版本库的,如果你没有看到 .git 目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看到了。
克隆现有的仓库 —— git clone
如果你想获得一份已经存在了的 Git 仓库的拷贝,比如说,你想为某个开源项目贡献自己的一份力,这时就要用到 git clone 命令,Git 克隆的是该 Git 仓库服务器上的几乎所有数据,而不是仅仅复制完成你的工作所需要文件。
git clone
当你执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。
克隆仓库的命令是 git clone <url> 。 比如,要克隆 Git 的链接库 libgit2,可以用下面的命令:
git clone https://codechina.csdn.net/codechina/help-docs
这会在当前目录下创建一个名为 help-docs 的目录,并在这个目录下初始化一个 .git 文件夹, 从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。 如果你进入到这个新建的 help-docs 文件夹,你会发现所有的项目文件已经在里面了,准备就绪等待后续的开发和使用。
自定义本地仓库名称
当然如果你想在克隆远程仓库的时候,自定义本地仓库的名字也是可以的,你可以通过额外的参数指定新的目录名:
$ git clone https://codechina.csdn.net/codechina/help-docs mydocs
这会执行与上一条命令相同的操作,但目标目录名变为了 mydocs。
Git 支持多种数据传输协议。 上面的例子使用的是 https:// 协议,不过你也可以使用 git:// 协议或者使用 SSH 传输协议,比如 user@server:path/to/repo.git 。
编辑并添加文件
接下来,我们来尝试在已经准备好的 Git
仓库中编辑一个readme.txt
文件,内容如下:
1. Git is a version control system. 2. Git is free software.
接下来,我们可以通过2个命令将刚创建好的readme.txt
添加到Git
仓库:
第一步,用命令git add
告诉 Git
,把文件添加到仓库:
$ git add readme.txt
执行上面的命令,没有任何显示,说明添加成功。