学习和记笔记从第四章开始,前面有点冗长,暂时略过,有时间再看。git
4.1 建立版本库及第一次提交windows
查看git版本:安全
git --version
首先设置Git的配置变量。这些设置会保存在用户主目录下的.gitconfig文件或etc/gitconfig文件中。编辑器
一、配置当前用户和邮件地址,这些信息将在版本库提交时用到。分布式
git config --global user.name "ivanjz93" git config --global user.email "ivanjz93@163.com"
二、设置别名ide
这样能够简化子命令,例如git ci 至关于git commit。学习
若是有系统管理员权限,并但愿注册的别名被全部用户使用:ui
sudo git config --system alias.st status sudo git config --system alias.ci commit
只在本用户的全局配置中添加Git别名:this
git config --global alias.co checkout git config --global alias.br branch
三、在Git命令输出中开启颜色显示spa
git config --global color.ui true
四、版本库的初始化
创建一个DEMO版本库。
在当前目录下面git自动建立demo目录并完成初始化:
git init demo
或者手动建立目录并进入目录,调用初始化命令完成初始化:
mkdir demo cd demo git init
git init命令在工做区建立了隐藏目录.git。这个目录就是Git版本库(又叫仓库,repository)。
版本库所在目录被称为工做区。
在工做区建立一个文件:
echo "Hello." > welcome.txt
将新建的文件添加到版本库:
git add welcome.txt
执行提交操做:
git commit -m "initialized."
在提交过程当中必须输入提交说明,若是未在命令行提供提交说明,Git会自动打开一个编辑器,要求在其中输入提交说明,输入完毕保存并退出后会执行提交操做。
提交后的输出:
4.2 工做区根目录下的.git目录
Git版本库位于工做区根目录下的.git目录,且仅此一处,在工做区的子目录下没有任何其余跟踪文件或目录。
做者在文中提到:“Git没有CVS和Subverion中存在的安全泄露问题”。我不理解,由于版本信息都放在.git目录中,同样能够泄露?或者是我没有理解CVS版本库、Subversion版本库的内容和Git版本库的内容有什么本质的区别。
Git提供了一条git grep命令来更好的搜索工做区的文件内容:
git grep "Hello"
当在Git工做区的某个子目录下执行操做的时候,会在工做区目录中一次向上递归查找.git目录,找到的.git目录就是工做区对象的版本库,.git所在的目录就是工做区的根目录,文件.git/index记录了工做区文件的状态(其实是暂存区的状态)。
在非Git工做区执行git命令时会由于找不到.git目录而报错。
想要获取Git版本库的位置或工做区的根目录等信息,可使用git rev-parse命令,假设当前目录在工做区的a/b/c目录:
git rev-parse --git-dir ~/demo/.git
git rev-parse --show-toplevel ~/demo
git rev-parse --show-prefix a/b/c/
git rev-parse --show-odup ../../../
Git克隆能够下降由于版本库和工做区混在在一块儿而致使的版本库被破坏的风险。能够经过克隆操做在本机另外的磁盘/目录中创建Git克隆,并在工做区有新的提交时,手动或自动的执行向克隆版本库的推送(git push)操做。还能够实如今其余机器上创建克隆。对于使用Git作版本控制的团队,每一个人都是一个备份,所以团队开发中的Git版本库更安全。
4.3 git config命令和Git配置文件
Git的配置文件有三个,分别是版本库级别的配置文件、全局配置文件和系统级配置文件。其中版本库级别的配置文件优先级最高,全局配置文件次之,系统级配置文件优先级最低。
git config -e
git config -e --global
git config -e --system
Git配置文件采用的是INI文件格式,例如
[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true
可以使用git config命令修改和查看配置:
例如
git config core.bare 返回 false
git config a.b something
会在.git/config文件中添加
[a] b = something
git config命令能够操做任何INI文件,例如向配置文件test.int中添加配置项:
GIT_CONFIG=test.init git config a.b.c.d "Hello World"
从test.ini中读取配置:
GIT_CONFIG=test.ini git config a.b.c.d
4.4 提交者的信息
删除全局配置信息:
git config --unset --global user.name git config --unset --global user.email
这样用户名和邮件信息被清空了。使用git config命令查看配置项,没有信息:
git config user.name git config user.email
而后进行提交。命令中使用了--allow-empty参数,由于提交时若是没有对工做区进行修改,Git默认将不会进行提交,使用--allow-empty参数运行进行空白提交:
git commit --allow-empty -m "who does commit?"
输出结果以下:
[master 76491e8] who does commit? Committer: jiangzhi <jiangzhi> Your name and email address were configured automatically based on your username and hostname. Please check that they are accurate. You can suppress this message by setting them explicitly: git config --global user.name "Your Name" git config --global user.email you@example.com After doing this, you may fix the identity used for this commit with: git commit --amend --reset-author
Git详细的告诉咱们如何设置必须的配置变量。查看提交信息:
git log --pretty=fuller
在从新设置完用户名和email后可使用下面的命令修改最近一次的提交:
git commit --amend --allow-empty --reset-author
参数--amend是对刚刚的提交进行修补,参数--reset-author的含义是将Author的ID同步修改,不然只会印象提交者(Commmit)的ID。此参数也会重置AuthorDate信息。
4.五、可以随意修改用户信息是否不安全
分布式版本控制系统中每一个人都是本身版本库的主人,很难也没有必要进行身份认证。一般在团队协做时会设置一个共享版本库,向共享版本库传送新提交时会进行用户身份认证并检查受权。一旦用户经过身份认证,通常不会对提交中包含的提交者ID作进一步检查。
4.6 命令别名
命名命令别名时还能够指定参数,例如:
git config --global alias.ci "commit -s"
-s参数会在提交说明中自动添加上包含提交者姓名和邮件地址的签名标识,相似于Signed-off-by: UserName <email@address>。
4.7 备份本章的工做区
git clone demo demo-step-1