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

0x0 Git常用命令速查表

0x1 Git是什么?

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

0x2、基于CentOS7安装git服务

主机规划

名称主机规划内存安装软件系统
git_server10.0.0.114Gyum install -y gitCentos7.6 1810
git_client10.0.0.124Gyum install -y gitCentos7.6 1810
git_client10.0.0.1364GGit+XShellWindows10 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 clonegit clone git@10.0.0.11:/home/git/project.gitSSH
第一步git clonehttp://git.kernel.org/pub/scm/virt/kvm/kvm.gitHTTP
第一步git clonehttps://git.kernel.org/pub/scm/virt/kvm/kvm.gitHTTPS
第二步cd 项目目录cd project
第三步git addgit add index.html或git add .
第四步git commitgit commit -m "备注"
第四步git configgit config --global user.email "xxxx@163.com"
第四步git configgit config --global user.name "xxxx"
第五步git remotegit remote add origin git@10.0.0.11:/home/git/project.gitSSH
第六步git pushgit push -u origin masterSSH

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

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

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
#查看提交的历史记录
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
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拉取最新的项目代码。然后正常从事开发工作。

切换到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拉取最新的项目代码。然后正常从事开发工作。注意上线过程。

切换到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今天的代码。悲剧开始了。

情景再现

在公司上班的场景

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网络安全-李彦亮(本人)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值