1.创建版本库
(1)设置Git的配置变量。这些设置会在全局文件(.gitconfig)或系统文件(/etc/gitconfig)中做永久记录
$ git config --global user.name "Kimisme"
$ git config --global user.email Kimisme@Git.com
(2)在本用户的全局配置中,设置Git别名
$ git config --global alias.st status
$ git config --global alias.ci commit
$ git config --global alias.co checkout
$ git config --global alias.br branch
(3)在Git命令输出中开启颜色显示
$ git config --global color.ui true
(4)查看全局配置
$ git config --list –global
$ git config user.name
(5)创建一个新的工作目录,并创建版本库
$ cd path/to/my/workspace
$ mkdir demo
$ cd demo
$ git init
(6)查看工作区中隐藏的目录,.git目录就是Git版本库(又叫仓库,repository),版本库所在的目录就被称为工作区
$ ls -aF
(7)在工作区创建一个文件
$ echo "Hello." > welcome.txt
(8)将新建的文件添加到版本库
$ git add welcome.txt
(9)搜索工作区的文件内容
$ git grep "He"
(10)提交
$ git commit -m "initialized"
[master (root-commit) 7daf0ef] initialized
1 file changed, 1 insertion(+)
create mode 100644 welcome.txt
-m参数设置提交说明为“initialized”
第一行解释:此次提交是提交在名为master分支上,且是该分支的第一个提交(root-commit),提交ID为7daf0ef
第二行解释:此时提交修改了一个文件,包含一行的插入
第三行解释:此次提交创建了新文件 welcome.txt
(11)备份
$ cd ..
$ git clone demo demo-step-1
Cloning into 'demo-step-1'...
done.
2.为什么工作区根目录下有一个.git目录?
Git及其他分布式版本控制系统的一个共同特点是,版本库位于工作区的根目录下,在工作区的子目录下则没有任何其他跟踪文件或目录;
传统的集中式版本控制系统的版本库和工作区是分开的,甚至在不同的主机上;
Git这种将版本库放在工作区根目录下的设计使得所有的版本控制操作都在本地完成;
3.Git将版本库(.git目录)放在工作区目录下,那么Git的一些命令一定要在工作区根目录下执行吗?
当在Git工作区的某个子目录下执行操作的时候,会在工作区目录中依次向上递归查找.git目录,找到的.git目录就是工作区对应的版本库,.git所在的目录就是工作区的根目录,文件.git/index记录了工作区文件的状态(实际上是暂存区的状态)
(1)在工作区中建立目录/a/b/c,并进入该目录中
$ mkdir -p a/b/c
cd a/b/c
(2)显示版本库.git目录所在的目录
$ git rev-parse --git-dir
(3)显示工作区根目录
$ git rev-parse --show-toplevel
(4)相对于工作区根目录的相对目录
$ git rev-parse --show-prefix
(5)显示从当前目录(cd)后退(up)到工作区的根的深度
$ git rev-parse --show-cdup
4.传统的集中式控制系统的工作区和版本库都是相分离的,Git把版本库目录放在工作区是不是不安全?
从存储安全的角度来说,如果误删了工作区,就会连同版本库一并删除,这个风险的确很高;
Git克隆可以降低因为版本库和工作区混杂在一起而导致的版本库被破坏的风险
5.是谁完成的提交
(1)查看提交日志
$ git log --pretty=oneline
(2)删除Git全局配置文件中关于user.name和user.email的设置
$ git config --unset --global user.name
$ git config --unset --global user.email
(3)向文本中添加内容
$ echo "World" >> welcome.txt
(4)提交文本
$ git add welcome.txt
$ git commit -m "add world"
出错了!
因为没有配置user.name和user.email