说明

本篇文章是本人回顾git知识点时从《progit》一书中摘抄出来的笔记,毕竟好记性不如烂笔头嘛,不然我也不会回顾了……
另请大神绕路,不喜勿喷……

1 版本控制

版本控制即记录文件内容变化,将来可以随时回退到历史版本,控制文件的变更。
比如你编辑文档时可能会随时把整个文档或多个文档完完整整复制一份,再加上日期用以备份,这也就是版本控制了。不过这样毕竟效率不高,还容易出错。

有了版本控制这个需求,对应的软件产品就出现了:

2 git简介

2.1 why git?

传统的集中式版本控制系统比如SVN等都有一个单一的集中管理的服务器,保存所有文件的变更,而所有客户端都连到这台服务器,提交自己的更新或拉去新版本。这样一来,只有中央服务器宕机,所有的客户端都将无法提交自己的更新也无法拉去新的版本。甚至可能丢失历史记录。

像git等DVCS,客户端是把代码仓库完整地镜像下来。每一次的变更都是对仓库的一次完整备份。
常常都是本地一个仓库,远程一个仓库。

以下是progit一书中对git的描述:

  • 速度
  • 简单的设计
  • 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
  • 完全分布式
  • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

2.2 git基本思想

以下内容是来自《progit》一书中对git的总结:

  • 直接记录快照,而非差异比较

简言之,其他大部分版本控制系统正式记录文件的变更部分,待回退版本的时候再“计算”出某个历史提交的文件内容。
而git是记录整个文件内容的快照。当然,文件没有变更的时候是不会产生重复的快照的,只是用一个类似指针的东西只想之前的快照。

  • 近乎所有操作都是本地执行

就像上面提到的:“一个本地仓库,一个远程仓库”。
工作时,几乎所有操作都是对本地仓库的操作。待需要提交时再提交的远程仓库。
也就是说,大多数操作都不需要联网。

  • 保证完整性

文件内容变了,那么文件的特征码就会变,在远程传输的时候损坏或者误操作修改文件都会被记录。

2.3 文件状态

git文件状态

  • 工作区:该区域的文件是某一个具体的历史提交。是从仓库中提取出的一个版本
  • 暂存区:是一个文件,保存了下次将提交的文件列表信息
  • .git目录:所有历史版本的仓库,存储了所有的历史提交

针对于以上三个区域,文件的状态有如下三种:

  • 已提交:文件存储在.git目录中
  • 已修改:自上次提交后做了修改但还没有添加到暂存区
  • 已暂存:文件已经添加到暂存区,但还没有提交到历史记录(.git)

git工作流程

  • 在工作区中编辑文件
  • 将修改好的文件加入暂存区,待下次提交
  • 将暂存区中的文件提交到历史仓库

3 git基本配置

3.1 git配置文件

配置文件按作用域的不同可以分为三类,优先级从低到高:

  • system

系统范围的配置文件,所用用户的通用配置。

1
git config --list
  • global

只针对当前用户的配置,会覆盖system级别的配置。

位置:~/.gitconfig或~/.config/git/config

1
git config --global --list
  • local

针对于当前仓库的特殊配置

位置:${project}/.git/config

其内容可以通过如下方式查看:

1
git config --local --list
1
2
3
4
5
6
7
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true

git配置文件格式

global级别的配置文件内容举例

本人机器上配置文件位置为:C:/Users/hylexus/.gitconfig

配置文件内容如下:

1
2
3
4
5
[user]
email = hylexus@163.com
name = hylexus
[alias]
lol = log --graph --oneline --decorate --all

等号左边为键,右边为值。

其中配置项为:

  • user.email = hylexus@163.com
  • user.name = hylexus
  • alias.lol = log –graph –oneline –decorate –all

通过命令查看以验证:

1
2
3
4
$ git config --global --list
user.email=hylexus@163.com
user.name=hylexus
alias.lol=log --graph --oneline --decorate --all

3.2 配置用户信息

用户信息应该配置为针对于当前用户的,因为在每次提交的时候会使用用户信息作为修改者.。

设置

1
2
$ git config --global user.name "hylexus"
$ git config --global user.email "hylexus@163.com"

查看

1
2
3
4
$ git config --global user.name
hylexus
$ git config --global user.email
hylexus@163.com

3.3 修改默认编辑器

此处本人在windows上用命令配置sublime作为默认编辑器,但是失败了。
原因是sublime的安装路径中有个目录中带空格。

此处尝试失败

1
$ git config --global core.editor "D:/install/sublime/Sublime Text 3/sublime_text.exe"

执行之后,git并没法打开sublime,因为在配置文件中的值是去掉引号的“Sublime Text 3”路径含有空格。
配置文件长这样:

1
2
3
4
5
[user]
email = hylexus@163.com
name = hylexus
[core]
editor = D:/install/sublime/Sublime Text 3/sublime_text.exe

直接修改配置文件

修改文件C:/Users/hylexus/.gitconfig,为路径手动加上引号即可。

1
2
3
4
5
[user]
email = hylexus@163.com
name = hylexus
[core]
editor = 'D:/install/sublime/Sublime Text 3/sublime_text.exe'

参考资料

  • 《progit》