小猪用Git一年多后的总结精华
标签: Git
描述性文字:
接触Git到现在已有一年多了,对Git使用也是日渐精进,虽说不上很熟络,但也算
入门,决定年前总结下,所以有了此文。Git博大精深,还有很多的东西需要学习,
比如自己搭建Git版本控制系统,一些便利工具的使用啊,一些疑难杂症解决方案
等等,当然这就是下一篇的事了。本文讲述的是Git基础的一些东西,没有Git大法
那个系列那么通熟易懂,但是还是对关键性的知识点进行了浅析,相信看完本文
你的Git使用会更进一步,谢谢~
在线版(排版更佳,不定期更新):https://www.zybuluo.com/coder-pig/note/581320
安装配置与文档
1.下载安装
- Windows系统:到 Git For Windows 或 git-for-windows.github.io下载,傻瓜式下一步。
- Linux系统:到 Download for Linux and Unix 下载,如果是Ubuntu的话,直接Terminal键入:
sudo apt-get install git 安装。 - Mac系统:到 Installing on Mac 下载。
2.文档教程相关
- Pro Git(官方):https://git-scm.com/book/zh/v2
- Pro Git中文版(oschina):http://git.oschina.net/progit/index.html
- 廖雪峰的Git教程:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
- 猴子都看得懂的Git入门:http://www.backlogtool.com/git-guide/cn/
- Git Community Book 中文版:http://gitbook.liuhui998.com/index.html
- .gitignore 文件模板:https://github.com/github/gitignore
- git log –pretty 输出格式定制:https://git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History
概念
1.Git的四个组成部分
2.文件的几个状态
按大类划分,分为两种状态:Tracked(已跟踪)和Untracked(未跟踪),
依据是:该文件是否已加入版本控制?
流程简述:
假设某个项目已加入版本控制系统
- 1.新建一个文件,该文件处于 Untracked 状态;
- 2.通过git add命令添加到缓存区,此时文件处于Tracked状态又或者说
此时这个文件已经被版本控制系统所跟踪,而且他处于Staged(暂存)状态;- 3.通过git commit命令把暂存区的文件提交提交到本地仓库,此时文件
处于Unmodified(未修改)状态;- 4.此时如果去编辑这个文件,文件又会变成Modified(修改)状态;
3.Git与SVN版本版本控制存储差异
Git关心的是:文件整体是否发生变化,而SVN关心的是:文件内容的具体差异!
SVN每次提交记录的是:哪些文件进行了修改,以及修改了哪些行的哪些内容
如图:版本2中记录的是文件A和C的变化,而版本3中记录文件C的变化,以此类推;
而Git中,并不保存这些前后变化的差异数据,而是保证整个缓存区中的所有文件,
又叫快照,有变化的文件保存,没变化的文件不保存,而是对上一次的保存的快照
做一个链接!因为这种不同的保存方式,Git切换分支的速度比SVN快很多!
4.每次Commit时仓库中的数据结构
分为四个对象:
blob对象:存放文件数据;
tree对象:目录,内容为blob对象的指针或其他tree对象的指针
commit对象:快照,包含指向前一次提交对象的指针,commit相关的信
通过索引找到文件快照。
tag对象:一种特殊的commit对象,一般对某次重要的commit加TAG,以示重要(方便找)
本地操作命令
1.相关配置【git config】
区分global 和 local,前者代表 全局设置,就是设置了在整个系统中,
所有的带Git版本管理的项目都是这样的配置;后者代表 本地设置 即在某个项目
中独立的设置,后者优先级高于前者。比如全局设置的用户名是”Coder-pig”,本地
设置的是”Jay”,commit的时候author就是Jay而不是Coder-pig。
除了通过命令行修改,还可以直接修改对应文件:
全局配置文件:etc/gitconfig
本地配置文件:当前仓库/.git/config
# 安装完Git后第一件要做的事,设置用户信息(global可换成local在单独项目生效):
git config --global user.name "用户名" # 设置用户名
git config --global user.email "用户邮箱" #设置邮箱
git config --global user.name # 查看用户名是否配置成功
git config --global user.email # 查看邮箱是否配置
# 其他查看配置相关
git config --global --list # 查看全局设置相关参数列表
git config --local --list # 查看本地设置相关参数列表
git config --system --list # 查看系统配置参数列表
git config --list # 查看所有Git的配置(全局+本地+系统)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
2.获取帮助【git help】
git help 命令 # 如:git help init
- 1
- 1
3.创建本地仓库【git init】
git init 仓库名 # 创建一个新的带Git仓库的项目
git init # 为已存在的项目生成一个Git仓库
- 1
- 2
- 1
- 2
4.添加文件到暂存区/文件跟踪标记【git add】
可以使用git add 文件名,将工作空间的文件添加到暂存区,或批量添加文件
git add 文件名 # 将工作区的某个文件添加到暂存区
git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件
git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件
git add . # 将当前工作区的所有文件都加入暂存区
git add -i # 进入交互界面模式,按需添加文件到缓存区
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
附:交互界面模式示例
上图流程:
1.先在GitForTest的文件夹里创建了两个文件
2.键入git add -i,进入后,键入4,选择添加untracked的文件
3.他给我们列出了untracked的文件,然后我们根据序号来添加文件
4.输入?会弹出相关提示,然后直接回车,结束选择!
5.然后再次输入git add -i,输入4,可以看到已不存在untacked的文件了!
5.让Git不Tracked特定文件【.gitignore文件配置】
将未tracked的文件添加到缓存区后,Git就会开始跟踪这个文件了!
对于一些比如:自动生成的文件,日志,临时编译文件等,就
没必要进行跟踪了,这个时候可以编写.gitignore文件,在里面
把不需要跟踪的文件或文件夹都写上,git就不会对这些文件进行跟踪!
另外.gitignore文件与.git文件夹在同级目录下!
如果不想自己写,可以直接到:https://github.com/github/gitignore 复制粘贴!
也可以自行编写,支持简化了的正则表达式(规范与示例模板摘自:Git王者超神之路)
- * : 匹配零个或多个任意字符
- [abc]:只匹配括号内中的任意一个字符
- [0-9]:- 代表范围,匹配0-9之间的任何字符
- ?:匹配任意一个字符
- *:匹配任意的中间目录,例如a/*/z可以匹配:a/z,a/b/z,a/b/c/z等
示例模板:
# 忽略所有以 .c结尾的文件
*.c
# 但是 stream.c 会被git追踪
!stream.c
# 只忽略当前文件夹下的TODO文件, 不包括其他文件夹下的TODO例如: subdir/TODO
/TODO
# 忽略所有在build文件夹下的文件
build/
# 忽略 doc/notes.txt, 但不包括多层下.txt例如: doc/server/arch.txt
doc/*.txt
# 忽略所有在doc目录下的.pdf文件
doc/**/*.pdf
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
6.将暂存区内容提交到本地仓库【git commit】
git commit -m "提交说明" # 将暂存区内容提交到本地仓库
git commit -a -m "提交说明" # 跳过缓存区操作,直接把工作区内容提交到本地仓库
- 1
- 2
- 1 <