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 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.email "xxxx@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等。如下图

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,270评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,489评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,630评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,906评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,928评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,718评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,442评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,345评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,802评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,984评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,117评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,810评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,462评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,011评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,139评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,377评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,060评论 2 355

推荐阅读更多精彩内容

  • git 使用笔记 git原理: 文件(blob)对象,树(tree)对象,提交(commit)对象 tree对象 ...
    神刀阅读 3,773评论 0 10
  • Git有很多优势,其中之一就是远程操作非常简便。本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就...
    bondPang阅读 1,330评论 0 6
  • 前言 Git使用教程 Git是什么 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 ...
    90后的思维阅读 908评论 0 0
  • 初始化git 配置git 使用Git的第一件事就是设置你的名字和email,这些就是你在提交commit时的签名,...
    MiracleJQ阅读 1,403评论 0 0
  • 一、基本概念: 注:对于git的分布式概念及其优点,不重复说明,自己百度或谷歌。本文中涉及到指令前面有$的,在cm...
    大厂offer阅读 1,425评论 0 3