前言
这篇文章主要写的是 Git 工具的使用,以及我在工作中使用 Git 工具时的心得。
其实关于 Git 工具的使用,网上的教程已经一抓一大把了,比较出名的有廖老师的Git教程、阮一峰的Git教程 等都是非常不错的资源。但是我为什么自己还是要写一点什么呢?因为作为一个程序员来说,别人总结的终究是别人的,只有自己总结的自己的心得,才是自己的,而且好记性不如烂笔头。这点在我工作一段时间后感触颇深。
一、 git 的安装
Windows下安装Git
最早 Git 是在 Linux 上开发的,很长一段时间内,Git 也只能在 Linux 和 Unix 系统上跑。不过,慢慢地有人把它移植到了 Windows 上。现在,Git 可以在 Linux、Unix、Mac 和 Windows 这几大平台上正常运行了。由于开发机大多数情况都是 windows,所以我先讲解windows下的git的安装及使用。
1. 软件下载
按照自己的实际情况下载对应的版本,如果是 32 位的计算机就下载 32 位的,如果是 64 位的计算机,就下载 64 位的版本。
2. 软件安装
下载了 git for windows 一般情况下 git 的安装是非常的简单的,基本上什么都不用管,直接下一步下一步就行了,这里不再做过多的描述。
3. 安装验证
安装完成后在桌面或者在文件管理的任意地方鼠标点击右键如果出现如下所示:
则代表安装成功了。 还可以在 cmd 命令行输入git --version
如果有显示版本号,代表安装成功。
Linux 上面的安装
这里以 centOS 7 为例
安装以及搭建 Git 服务器
切换到root 用户,联网的情况下,如果还没有下载安装包,执行以下命令
[root@LAB ~]# yum install -y git
自动下载最新的安装包以及下载相关依赖,这个是懒汉式做法。
搭建Git服务器
如果已经下载了安装包的话也可以使用以下命令安装必要的依赖。这种是比较老的做法,目前基本使用方式一就好了。
# 1. 安装依赖
[root@LAB ~]# yum -y install curl-devel expat-devel openssl-devel zlib-devel
[root@LAB ~]# yum -y install gcc gcc-c++ perl-ExtUtils-MakeMaker
# 2. 安装 Git 服务器
#使用rz 上传git-2.13.3.tar.gz
[root@LAB ~]# tar -zxvf git-2.13.3.tar.gz
[root@LAB ~]# cd git-2.13.3
# 编译与安装
[root@LAB ~]# ./configure
[root@LAB ~]# make
[root@LAB ~]# make install
# 查看git版本 出现版本号,安装成功
[root@LAB ~]# git --version
# 添加用户
[root@LAB ~]# useradd git
# 设置密码,输入两次密码,密码为git
[root@LAB ~]# passwd git
# 初始化git空仓库
[root@LAB ~]# git init --bare /home/git/mytest.git
# 授予git用户为 /home/git目录及子目录的拥有者
[root@LAB ~]# chown -R git:git /home/git
私有git服务器搭建完成后就可以像连接github一样连接使用了,但是我们的git服务器并没有配置密钥登录,所以每次连接时需要输入密码,添加远程库:
$ git remote add mytest ssh://git@192.168.12.131/home/git/mytest.git
同步本地库到远程库:
$ git push -u mytest master
二 、Git基本设置与常用命令
用户基本设置
Git 安装成功后,我们得设置一下才能够使用。不管是 windows 还是Linux 的设置命令都是一样的:这是设置全局的属性,也是必须设置的属性。
$ git config --global user.name [用户名]
$ git config --global user.email [邮箱]
SSH密钥生成
Git 支持的协议有四种,最常用的就是 SSH 协议和 HTTPS 协议。SSH 协议使用传输数据块,安全,使用也比较简单。使用SSH 协议需要生成密钥对。
SSH是英文Secure Shell的简写形式。通过使用SSH,它可以把所有传输的数据进行加密,这样可以防止DNS欺骗和IP欺骗。
最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
在windows下我们可以使用 Git Bash.exe来生成密钥,可以通过右键菜单打开Git Bash
参考 GitHub 给出的 SSH 生成方式
实际上手:git bash 执行命令,生成公钥和私钥
命令: ssh-keygen -t rsa -b 4096 -C "leicong@foxmail.com"
执行完这条命令后,默认回车回车回车就行了。
执行命令完成后,在window本地用户.ssh目录C:\Users\用户名.ssh下面生成如下名称的公钥和私钥:
在 GitHub 上设置公钥
这样第一次建立连接的时候可能需要再确认一下,下一次的时候就好了。
git常用命令
这里是对一些 git 常用命令的总结。[]
里面的是需要根据情况输入的值。
git命令 | git 命令的含义 |
---|---|
cd [路径] |
转到路径下 |
git help -a |
列出git能使用的命令 |
git |
调用出git的帮助 |
git status |
查看git暂存区状态 |
git statud -sb |
用简短的方式查看git暂存区状态 |
git log |
查看本仓库的日志 |
git log [-5] |
查看最近的5条日志 |
git log [文件名] |
只看这个文件提交的历史 |
git log --grep [messages] |
根据messages来过滤查看的信息 |
git config --global user.name [用户名] |
修改全局配置的用户名字 |
git config --global user.email [邮箱名字] |
修改全局配置的用户email |
git config -l |
显示所有git config 的子命令 |
git remote -v |
查看远程仓库remote状态 |
git blame [文件名] |
查看文件的所有提交信息 |
git blame -L [开始行号,结束行号] |
从开始行行号查询到结束行号 |
git clean -f |
删除未被版本追踪的文件 |
git clean -n |
列出所有未被版本追踪的文件 |
git clean -x -f |
删除所有未被版本追踪的文件,包括被.gitignore忽略的文件 |
touch [文件名] |
创建一个新文件 |
git add [文件名] |
把文件加入暂存区,文件名. 代表所有文件 |
git add -p [文件名] |
一个文件多次提交 |
git rm [文件名] |
删除文件,文件在暂存区 |
rm [文件名] |
直接删除文件,不在暂存区 |
cat [a] |
查看a文件内容 |
echo [文字信息] >> [文件名A] |
在A里面增加了文字信息 |
git mv [a] [b] |
重命名 , 把a改为b |
git mv [a] ./demos/ |
把a文件移动到demos文件夹 |
mkdir [文件名] |
创建文件夹 |
git commit -m "message" |
提交暂存区的版本 |
git commit -a -m "message" |
git中已经有之前的版本了 |
git commit -am "message" |
同上,只是简化了代码 |
git show HEAD |
HEAD相当于指针,目前指向的是当前提交,如果要看上一条提交就在HEAD后面加^或~1 |
git show [哈希值] |
根据哈希值显示提交内容 |
Git解决换行符提示的问题
因为Linux和Windows和mac的换行符不一样所以会出现换行符警告提示。
输入命令
git config --global core.safecrlf false
就解决了这个问题
三、 .gitignore
文件
.gitignore 版本忽略文件
.gitignore 是一个纯文本文件,里面存放忽略被版本控制的文件
每行代表忽略一个文件,或一类文件,
注释: #
所有的文字都可以算注释
直接 vim .gitignore
如果想把 .gitignore 忽略的文件加入暂存区,可以 git add -f [文件名]
可以不用自己编写自己的 .gitignore, github 也为我们编写了一些特定的可以直接使用的 .gitignore 文件
.gitignore语法
# 忽略所有 .a 文件
*.a
# 但否定忽略 lib.a, 尽管已经在前面忽略了所有 .a 文件
!lib.a
# 忽略 build/ 文件夹下的所有文件
/build/
# 忽略 /doc/notes.txt, 不包括 doc/server/arch.txt
/doc/*.txt
# 忽略所有的 .pdf 文件 在 doc/ directory 下的
doc/**/*.pdf
四、git-commit提交的时候的一些注意事项
git commit 提交的时候的一些建议和原则
每个提交要保证适当的颗粒度、相关性和独立性
- 以一个小功能、小改进或一个 bug fix 为单位
- 对应的 unit test 程序在同一个 commit
- 无相关的修改不在同一个commit
- 语法错误的半成品程序不能 commit
git commit 时候message的书写建议和规范
- 使用格式化的message有什么好处?
- 帮助我们快速浏览,提供更多的信息
- 可以很方便的查找某一类信息
- 可以很方便的提取出change log
- 如何去写规范化的message
docs(文件名): fix grammar
<body>
<foot> 可以用closeed # 关闭issues
angular规范, angular是Google公司推出的一个框架,目前开源社区最广泛的规范。
<type>(<scope>):<subject>
// 空一行
<body>
// 空一行
<footer>
第一行是必须要有的,其他的不是必须的。type 类型如下:
- feat:新功能(feature)
- fix:修补bug
- docs:文档(documentation)
- style:格式(不影响代码运行)
- refactor:重构(既不是新增功能,也不是修改 bug 的改动)
- test: 增加测试
- chore:构建过程或辅助工具的变动