Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大项目。Git是Linus Torvalds为帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Git与常用的版本控制工具CVS、Subversion等不同,它采用分布式版本库的方式,不必服务器端软件支持。

Git常用命令速查表

表图如下:

基于CentOS7安装Git服务

主机规划如下:

名称 主机规划 内存 安装软件 系统
gitServer 10.0.0.11 4G yum -y install git Centos7.6 1810
gitClient 10.0.0.12 4G yum -y install git Centos7.6 1810
gitClient 10.0.0.13 64G Git+XShell Windows10 64

安装服务

1
2
3
yum install -y git
[root@gitServer ~]# git --version
git version 1.8.3.1

Step 2 创建一个git用户组和用户,用来运行git服务

1
2
3
4
5
6
7
8
9
#查看git用户是否存在
[root@gitServerhome]#id git
id: git: no such user #提示git用户不存在
groupadd git #创建用户
useradd git -g git
#方法一设置git用户的密码
passwd git
#方法二也可以设置密码
echo git:123456|chpasswd

Step3 创建代码仓库git的拥有者

1
2
3
4
5
6
7
8
9
#进入home目录
cd /home
#现有仓库导出为裸仓库——即一个不包含当前工作目录的仓库
git init --bar project.git
#把仓库所属用户改为git
#-R : 处理指定目录以及其子目录下的所有文件
#将目前目录下的所有文件与子目录的拥有者皆设为 git 群体的使用者 git :
chown -R git:git project.git
#以后每创建一个新的仓库.都需要执行上面的命令(修改仓库所属用户为git)

这一步很重要,如果没有这一步,提交代码的时候报权限错误。
———————————————————————————

0x3、客户端通过终端或GUI工具迁代码

这里为了安全性我们没有设置客户端的免密登陆!!!如果觉得每次输入密码比较繁琐,可以设置免密登陆。

步骤 命令 实例 协议
第一步 git clone git clone git@10.0.0.11:/home/git/project.git SSH
第一步 git clone http://git.kernel.org/pub/scm/virt/kvm/kvm.git HTTP
第一步 git clone https://git.kernel.org/pub/scm/virt/kvm/kvm.git HTTPS
第二步 cd 项目目录 cd project
第三步 git add git add index.html或git add .
第四步 git commit git commit -m “备注”
第四步 git config git config –global user.emailxxxx@163.com
第四步 git config git config –global user.name “xxxx”
第五步 git remote git remote add origin git@10.0.0.11:/home/git/project.git SSH
第六步 git push git push -u origin master SSH

【注意】这里第一步我们给出了三种方式,这几种方式都可以,都是基于不同协议的克隆项目的方式。除了我们在终端下或GUI的环境中添加项目以外,我们常见的IDE集成开发环境中也集成了Git的应用。比如XCode、PHPStrom等。如下图

以下是在终端中命令行方式操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
git clone git@10.0.0.11:/home/git/project.git
#开发人员进入到项目目录
cd project
#添加修改以后的代码源文件
echo "readme">>readme.md
#添加到git中
git add .
#提交日志
git commit -m "add readme.md"
#全局配置git信息
git config --global user.email "xxxx@163.com"
git config --global user.name "xxxx"
git config --global color.ui true #带颜色的显示
#同步远程库
git remote add origin git@10.0.0.11:/home/git/project.git
#提交代码
git push -u origin master #-u指定默认主机

第一次push提交需要-u指定主机,以后就直接push即可
git push origin master #将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。

注意:git config的配置信息

名称 主要参数
git config用户信息 –global user.name
git config用户信息 –global user.email
git config文本编辑 –global core.editor
git config差异分析 –global merge.tool
git config颜色显示 –global color.ui
git config配置信息 –list

0x4、通过Git log查看日志记录

名称 主要参数 例子
git log 查看提交的历史记录 git log
git log –oneline 显示简洁的版本 git log –oneline
git log –oneline 显示简洁的版本 git log –oneline -5
git log –reverse逆序输出 git log –reverse –oneline
git log –author查找指定作者 git log –author=xxxxx –oneline
git log –befire –after时间段查找 git log –oneline –before={3.weeks.ago} –after={2010-04-18} –no-merges
1
2
3
4
5
6
7
8
9
10
11
12
#查看提交的历史记录
git log
#可以用 --oneline 选项来查看历史记录的简洁的版本
git log --oneline
9cc3008 add a.txt
c01d88c add index.html
#用 --reverse 参数来逆向显示所有日志
git log --reverse --oneline
#如果只想查找指定用户的提交日志可以使用命令:git log --author
git log --author=xxxxx --oneline -5
#如果你要指定日期,可以执行几个选项:--since 和 --before,但是你也可以用 --until 和 --after。
git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges

5、分支管理

git branch 分支管理

名称 主要参数
git branch 查看分支
git branch 分支名称 创建分支
git checkout 分支名称 切换分支
git merge 要合并的分支 分支合并(可能产生冲突)注意:切换分支再合并

5.1企业分支管理使用案例
需求分析:前端开发部门或后台开发部门需要下班以后在家或周末在家进行代码的开发,主分支保存在公司的服务器上。

查看当前的分支 只有master

1
2
[root@kvm03 projiect_bare]#  git branch
* master

创建一个一个分支dev (开发的分支)

1
git branch dev

再次查看分支情况,已经有dev分支

1
2
3
[root@kvm03 projiect_bare]#  git branch
dev
* master

切换分支注意分支之前的星号

1
2
3
4
5
[root@kvm03 projiect_bare]# git checkout dev
Switched to branch 'dev'
[root@kvm03 projiect_bare]# git branch
* dev
master

合并master和dev分支

1
2
[root@kvm03 projiect_bare]# git merge master
Already up-to-date.

开发创建新的文件内容或修改代码内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@kvm03 projiect_bare]# touch readme.md
[root@kvm03 projiect_bare]# git add .
[root@kvm03 projiect_bare]# git commit -m "add readme.md"
[dev a1af437] add readme.md
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 readme.md
[root@kvm03 projiect_bare]# git push origin dev
git@10.0.0.158's password:
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 276 bytes | 0 bytes/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To git@10.0.0.158:/home/git/projiect_bare.git
* [new branch] dev -> dev

5.2下班或周末在家里进行开发
开发人员不管是在家里工作还是在公司工作,不需要每次都git clone项目,通过checkout dev切换分支,通过git pull拉取最新的项目代码。然后正常从事开发工作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
切换到dev分支
[root@kvm03 projiect_bare]# git checkout dev
Already on 'dev'
拉代码
[root@kvm03 projiect_bare]# git pull origin dev
git@10.0.0.158's password:
From 10.0.0.158:/home/git/projiect_bare
* branch dev -> FETCH_HEAD
Already up-to-date.
[root@kvm03 projiect_bare]# touch b.txt
[root@kvm03 projiect_bare]# git add .
[root@kvm03 projiect_bare]# git commit -m "add b.txt"
[dev 300b6ed] add b.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 b.txt

[root@kvm03 projiect_bare]# git push origin dev
git@10.0.0.158's password:
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 219 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
To git@10.0.0.158:/home/git/projiect_bare.git
a1af437..300b6ed dev -> dev

5.2 到公司以后开发流程
开发人员不管是在家里工作还是在公司工作,不需要每次都git clone项目,通过checkout dev切换分支,通过git pull拉取最新的项目代码。然后正常从事开发工作。注意上线过程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
切换到dev分支
[root@kvm03 projiect_bare]# git checkout dev
Already on 'dev'
拉代码
[root@kvm03 projiect_bare]# git pull origin dev
git@10.0.0.158's password:
From 10.0.0.158:/home/git/projiect_bare
* branch dev -> FETCH_HEAD
Already up-to-date.
[root@kvm03 projiect_bare]# touchc.txt
[root@kvm03 projiect_bare]# git add .
[root@kvm03 projiect_bare]# git commit -m "add c.txt"
[dev 300b6ed] add c.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 c.txt

[root@kvm03 projiect_bare]# git push origin dev
git@10.0.0.158's password:
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 219 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
To git@10.0.0.158:/home/git/projiect_bare.git
a1af437..300b6ed dev -> dev
#切换分支到master
[root@kvm03 projiect_bare]# git checkout master
Switched to branch 'master'
#合并分支dev与master
[root@kvm03 projiect_bare]# git merge dev
Updating 9cc3008..300b6ed
Fast-forward
c.txtt | 0
b.txt | 0
readme.md | 0
3 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 c.txt
create mode 100644 b.txt
create mode 100644 readme.md
#dev分支合并master分支代码上线
[root@kvm03 projiect_bare]# git push origin master
git@10.0.0.158's password:
Total 0 (delta 0), reused 0 (delta 0)
To git@10.0.0.158:/home/git/projiect_bare.git
9cc3008..300b6ed master -> master

5.3 因为疲劳加班/约妹子….忘了提交代码!!!!(企业真实开发案例)

在公司上班期间操作忙着给妹子调bug,手把手辅导。。妹子为了回报。请吃饭。。。看电影。。。带身份证!!!然后得意忘形。。。忘了push今天的代码。悲剧开始了。

情景再现

在公司上班的场景

1
2
3
4
5
git chenckout dev
开发些了N多代码
git add .
git commit -m "xxxxx"
为了给妹子手把手辅导!忘记了push......

回家以后继续写代码的场景

1
2
3
4
5
git chenckout dev
开发些了N多代码
git add .
git commit -m "xxxxx"
git push origin dev #正常提交

第二天上班以后

1
2
3
4
5
6
7
git chenckout dev 
git status #看一下冲突的位置和内容 手动修改后再次开发
有合并可能出现冲突,如有冲突需要手动解决冲突以后
继续开发些了N多代码
git add .
git commit -m "xxxxx"
git push origin dev #正常提交

总结 git冲突的场景
情景一:多个分支代码合并到一个分支时;
情景二:多个分支向同一个远端分支推送代码时;
解决情景一:在当前分支上,直接修改冲突代码—>add—>commit。
解决情景二:在本地当前分支上,修改冲突代码—>add—>commit—>push

Git官方文档可以参考
https://git-scm.com/book/zh/v2

评论