Centos7系统下配置Git服务器(1)---实现原生Git服务基本操作

0x0 Git常用命令速查表

0x1 Git是什么?

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git的主要功能:
1、查看邮件或者通过其它方式查看一般开发者的提交状态。
2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
3、向公共服务器提交结果,然后通知所有开发人员。

0x2、基于CentOS7安装git服务

主机规划

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

Step 1 安装git服务

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

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

#查看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的拥有者

#进入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 [email protected]:/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.email "[email protected]"
第四步 git config git config --global user.name "xxxx"
第五步 git remote git remote add origin [email protected]:/home/git/project.git SSH
第六步 git push git push -u origin master SSH

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

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

git clone [email protected]:/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 "[email protected]"
git config --global user.name "xxxx"
git config --global color.ui true  #带颜色的显示
#同步远程库
git remote add origin [email protected]:/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
#查看提交的历史记录
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

[root@kvm03 projiect_bare]#  git branch
* master

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

git branch dev

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

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

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

[root@kvm03 projiect_bare]# git checkout dev
Switched to branch 'dev'
[root@kvm03 projiect_bare]#  git branch
* dev
  master

合并master和dev分支

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

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

[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
[email protected]'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 [email protected]:/home/git/projiect_bare.git
 * [new branch]      dev -> dev

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

切换到dev分支
[root@kvm03 projiect_bare]# git checkout dev
Already on 'dev'
拉代码
[root@kvm03 projiect_bare]# git pull origin dev
[email protected]'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
[email protected]'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 [email protected]:/home/git/projiect_bare.git
   a1af437..300b6ed  dev -> dev

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

切换到dev分支
[root@kvm03 projiect_bare]# git checkout dev
Already on 'dev'
拉代码
[root@kvm03 projiect_bare]# git pull origin dev
[email protected]'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
[email protected]'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 [email protected]:/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
[email protected]'s password: 
Total 0 (delta 0), reused 0 (delta 0)
To [email protected]:/home/git/projiect_bare.git
   9cc3008..300b6ed  master -> master

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

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

情景再现

在公司上班的场景

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

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

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

第二天上班以后

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

你可能感兴趣的:(Centos7系统下配置Git服务器(1)---实现原生Git服务基本操作)