博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Git权威指南》读书笔记 第四章 git初始化
阅读量:6846 次
发布时间:2019-06-26

本文共 4117 字,大约阅读时间需要 13 分钟。

hot3.png

学习和记笔记从第四章开始,前面有点冗长,暂时略过,有时间再看。

4.1 创建版本库及第一次提交

查看git版本:

git --version

首先设置Git的配置变量。这些设置会保存在用户主目录下的.gitconfig文件或etc/gitconfig文件中。

1、配置当前用户和邮件地址,这些信息将在版本库提交时用到。

git config --global user.name "ivanjz93"git config --global user.email "ivanjz93@163.com"

2、设置别名

这样可以简化子命令,例如git ci 相当于git commit。

如果有系统管理员权限,并希望注册的别名被所有用户使用:

sudo git config --system alias.st statussudo git config --system alias.ci commit

只在本用户的全局配置中添加Git别名:

git config --global alias.co checkoutgit config --global alias.br branch

3、在Git命令输出中开启颜色显示

git config --global color.ui true

4、版本库的初始化

建立一个DEMO版本库。

在当前目录下面git自动创建demo目录并完成初始化:

git init demo

或者手动创建目录并进入目录,调用初始化命令完成初始化:

mkdir democd demogit init

git init命令在工作区创建了隐藏目录.git。这个目录就是Git版本库(又叫仓库,repository)。

版本库所在目录被称为工作区。

在工作区创建一个文件:

echo "Hello." > welcome.txt

将新建的文件添加到版本库:

git add welcome.txt

执行提交操作:

git commit -m "initialized."

在提交过程中必须输入提交说明,如果未在命令行提供提交说明,Git会自动打开一个编辑器,要求在其中输入提交说明,输入完毕保存并退出后会执行提交操作。

提交后的输出:

  • 第一行说明此次提交在名为master的分支上,且是该分支的第一次提交(root-commit),并显示提交ID和提交说明;
  • 第二行说明此次提交修改了一个文件,包含一行的插入;
  • 第三行说明此次提交创建了新文件welcome.txt。

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目录所在的位置:
  • git rev-parse --git-dir~/demo/.git
  • 显示工作区根目录:
  • git rev-parse --show-toplevel~/demo
  • 相对于工作区根目录的相对目录:
  • git rev-parse --show-prefixa/b/c/
  • 从当前目录后退到工作区的根的深度:
  • git rev-parse --show-odup../../../

Git克隆可以降低因为版本库和工作区混在在一起而导致的版本库被破坏的风险。可以通过克隆操作在本机另外的磁盘/目录中建立Git克隆,并在工作区有新的提交时,手动或自动的执行向克隆版本库的推送(git push)操作。还可以实现在其他机器上建立克隆。对于使用Git做版本控制的团队,每个人都是一个备份,因此团队开发中的Git版本库更安全。

4.3 git config命令和Git配置文件

Git的配置文件有三个,分别是版本库级别的配置文件、全局配置文件和系统级配置文件。其中版本库级别的配置文件优先级最高,全局配置文件次之,系统级配置文件优先级最低。

  • 版本库的配置文件是 工作区目录/.git/config,使用下面的命令可进入编辑:
  • git config -e
  • 全局配置文件是~/.gitconfig,使用下面的命令编辑:
  • git config -e --global
  • 系统级配置文件时/etc/gitconfig(windows系统里是/mingw32/etc/gitconfig),使用下面的命令编辑:
  • git config -e --system

Git配置文件采用的是INI文件格式,例如

[core]        repositoryformatversion = 0        filemode = false        bare = false        logallrefupdates = true        symlinks = false        ignorecase = true

可使用git config命令修改和查看配置:

  • 使用git config <section>.<key>可查看属性的值;
  • 使用git config <section>.<key> <value>可修改属性的值;

例如

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.namegit config user.email

然后进行提交。命令中使用了--allow-empty参数,因为提交时如果没有对工作区进行修改,Git默认将不会进行提交,使用--allow-empty参数运行进行空白提交:

git commit --allow-empty -m "who does commit?"

输出结果如下:

[master 76491e8] who does commit? Committer: jiangzhi 
Your name and email address were configured automatically basedon 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.comAfter 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.5、能够随意修改用户信息是否不安全

分布式版本控制系统中每个人都是自己版本库的主人,很难也没有必要进行身份认证。通常在团队协作时会设置一个共享版本库,向共享版本库传送新提交时会进行用户身份认证并检查授权。一旦用户通过身份认证,一般不会对提交中包含的提交者ID做进一步检查。

4.6 命令别名

命名命令别名时还可以指定参数,例如:

git config --global alias.ci "commit -s"

-s参数会在提交说明中自动添加上包含提交者姓名和邮件地址的签名标识,类似于Signed-off-by: UserName <email>。

4.7 备份本章的工作区

git clone demo demo-step-1

 

转载于:https://my.oschina.net/u/2453016/blog/712090

你可能感兴趣的文章
Swoft 图片上传与处理
查看>>
BluetoothClass详解
查看>>
Centos 7安装Python3.6
查看>>
Django 学习笔记
查看>>
20172303 2017-2018-2 《程序设计与数据结构》实验三报告
查看>>
CSS自定义文件上传按钮
查看>>
排序算法概览(二)
查看>>
document对象获取例子
查看>>
java模拟http的get和post请求
查看>>
kubectl error: The connection to the server localhost:8080 was refused
查看>>
[POI2012]Squarks
查看>>
Code Signal_练习题_All Longest Strings
查看>>
(转)Redis
查看>>
ARTS打卡计划第三周-Review
查看>>
delphi 知道excel选中的单元格的行号
查看>>
Vue.js中data,props和computed数据
查看>>
软件不能用Surface Pro触控笔 微软这有解决办法
查看>>
contentsize ,ios 7和 ios7之前的 有点差别,
查看>>
Tomcat
查看>>
try catch 怎么写?
查看>>