GIT分布式代码管理系统
1:GTI介绍及使用
环境搭建:
服务器 | IP地址 | 主机名 | 角色 |
Centos7.5 | 192.168.200.113 | gitserver | GIT服务器 |
Centos7.5 | 192.168.200.114 | gitclient | GIT客户端 |
安装GIT:
初始化环境:关闭防火墙
两台都本次执行操作
[root@ansible ~]# hostname gitserver
[root@ansible ~]# bash
[root@gitserver ~]# systemctl stop firewalld
[root@gitserver~]# iptables -F
[root@gitserver ~]# setenforce 0
源码包安装GIT
安装依赖包
[root@gitserver ~]#yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel autoconf gcc gcc-c++ make -y
[root@gitserver ~]# rz
[root@gitserver ~]# ls
git-2.22.0.tar.gz
[root@gitserver ~]# tar xf git-2.22.0.tar.gz -C /usr/src
[root@gitserver ~]# cd /usr/src/git-2.22.0/
[root@gitserver git-2.22.0]# make configure
GEN configure
[root@gitserver git-2.22.0]# ./configure --prefix=/usr/local/git && make && make install
[root@gitserver git-2.22.0]# ln -s /usr/local/git/bin/git /usr/bin
ln: 无法创建符号链接"/usr/bin/git": 文件已存在
[root@gitserver git-2.22.0]# ln -sf /usr/local/git/bin/git /usr/bin
[root@gitserver git-2.22.0]# git --version #查看git版本
git version 2.22.0
初次运行GIT前的配置
gitclient客户端操作:
[root@gitclien ~]# git config --global user.name "crushlinux"
[root@gitclien ~]# git config --global user.email "crushlinux@163.com"
[root@gitclien~]# git config --global color.ui true
[root@gitclien ~]# git config --list
user.name=crushlinux
user.email=crushlinux@163.com
color.ui=true
gitserver服务端操作:初始化及获取GIT仓库
[root@gitserver ~]# mkdir git_data.git
[root@gitserver ~]# useradd git #创建用户拉取信息
[root@gitserver ~]# passwd git
更改用户 git 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@gitserver git_data.git]# git --bare init
已初始化空的 Git 仓库于 /root/git_data.git/ #远程仓库
gitclient客户端操作:
[root@gitclient ~]# ssh-keygen
[root@gitclient ~]# ssh-copy-id 192.168.200.113
[root@gitclient ~]# git clone root@192.168.200.113:/root/git_data.git
正克隆到 'git_data'...
warning: 您似乎克隆了一个空仓库。
您在 /var/spool/mail/root 中有新邮件
[root@gitclient ~]# ls
git_data #本地目录
git-2.22.0.tar.gz
[root@gitclient ~]# cd git_data/
[root@gitclient git_data]# ls -a
. .. .git
创建文件并且提交
[root@gitclient git_data]# touch README
[root@gitclient git_data]# git status
位于分支 master
尚无提交
未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)
README
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
添加文件跟踪
[root@gitclient git_data]# git add README #将README上传到暂停区
[root@gitclient git_data]# git status
位于分支 master
尚无提交
要提交的变更:
(使用 "git rm --cached <文件>..." 以取消暂存)
新文件: README
[root@gitclient git_data]# git config --global user.email "L18370248736@163.com"
[root@gitclient git_data]# git config --global user.name "git"
由工作区到本地仓库(git commit -m '注释信息' 文件名)
[root@gitclient git_data]# git commit -m "first commit" README #将README由暂停区上传到本地仓库
[master(根提交) 2630913] first commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README
查看GIT目前位置状态(git status)
[root@gitclient git_data]# git status
位于分支 master
您的分支基于 'origin/master',但此上游分支已经不存在。
(使用 "git branch --unset-upstream" 来修复)
无文件要提交,干净的工作区
[root@gitclient git_data]# git branch --unset-upstream
[root@gitclient git_data]# git status
位于分支 master
无文件要提交,干净的工作区
[root@gitclient git_data]# git push -u origin master #将README上传到远程仓库
枚举对象: 3, 完成.
对象计数中: 100% (3/3), 完成.
写入对象中: 100% (3/3), 203 bytes | 203.00 KiB/s, 完成.
总共 3 (差异 0),复用 0 (差异 0)
To 192.168.200.113:/root/git_data.git
* [new branch] master -> master
分支 'master' 设置为跟踪来自 'origin' 的远程分支 'master'。
完整的上传操作:
[root@gitclient git_data]# touch git1.text #新建一个文件
[root@gitclient git_data]# git add git1.text #将文件上传到暂停区
[root@gitclient git_data]# git reset HEAD git1.text #将暂停区的git1.text文件从暂停区中删除
[root@gitclient git_data]# git commit -m "git 1 text" git1.text #将暂停区的文件上传到本地仓库,git 1 text表示第一次上传的文件也就是注释,每次改动要改变数值:例如git 2 text
[master 8d4f958] git 1 text
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 git1.text
[root@gitclient git_data]# git push root@192.168.200.113:/root/git_data.git #将本地仓库的文件推送到远程仓库
枚举对象: 3, 完成.
对象计数中: 100% (3/3), 完成.
压缩对象中: 100% (2/2), 完成.
写入对象中: 100% (2/2), 236 bytes | 236.00 KiB/s, 完成.
总共 2 (差异 0),复用 0 (差异 0)
To 192.168.200.113:/root/git_data.git
2630913..8d4f958 master -> master
===========================================================================
将文件从客户端移除,哪怕是已经上传到了暂停区但是保留本地文件
[root@gitclient git_data]# touch 1.text
[root@gitclient git_data]# ls
1.text git1.text README
[root@gitclient git_data]# git add 1.text
[root@gitclient git_data]# git status
位于分支 master
您的分支领先 'origin/master' 共 1 个提交。
(使用 "git push" 来发布您的本地提交)
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)
新文件: 1.text
[root@gitclient git_data]# git rm -f 1.text
rm '1.text'
[root@gitclient git_data]# ls
git1.text README
添加到了暂停区并且想删除暂停区数据并删除本地文件
[root@gitclient git_data]#git rm -f 1.text
重命名文件名
[root@gitclient git_data]# git mv README shmily
[root@gitclient git_data]# git status
位于分支 master
您的分支领先 'origin/master' 共 1 个提交。
(使用 "git push" 来发布您的本地提交)
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)
重命名: README -> shmily
[root@gitclient git_data]# ls
git1.text shmily
提交的历史记录
[root@gitclient git_data]# git log #查看历史记录
commit 8d4f9580d6529437a4c10095f21f20b6c572a3c5 (HEAD -> master)
Author: git <L18370248736@163.com>
Date: Mon Nov 18 20:36:04 2019 +0800
git 1 text
commit 26309136cb57f10c0eda53fa9bad5c699319b5f6 (origin/master)
Author: git <L18370248736@163.com>
Date: Mon Nov 18 16:38:12 2019 +0800
first commit
删除本地以及暂停区的文件并且还原数据状态
[root@gitclient git_data]# touch 1.txt
[root@gitclient git_data]# git add 1.txt #提交到暂停区
[root@gitclient git_data]# git status
位于分支 master
尚无提交
要提交的变更:
(使用 "git rm --cached <文件>..." 以取消暂存)
新文件: 1.txt
[root@gitclient git_data]# git commit -m "第一次提交1.txt 1.txt" #提交到本地仓库
[master(根提交) 8675530] 第一次提交1.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 1.txt
[root@gitclient git_data]# git status
位于分支 master
您的分支基于 'origin/master',但此上游分支已经不存在。
(使用 "git branch --unset-upstream" 来修复)
无文件要提交,干净的工作区
[root@gitclient git_data]# git branch --unset-upstream
[root@gitclient git_data]# git status
位于分支 master
无文件要提交,干净的工作区
[root@gitclient git_data]# git push -u origin master #提交到远程仓库
枚举对象: 3, 完成.
对象计数中: 100% (3/3), 完成.
写入对象中: 100% (3/3), 206 bytes | 206.00 KiB/s, 完成.
总共 3 (差异 0),复用 0 (差异 0)
To 192.168.200.113:/root/git_data.git
* [new branch] master -> master
分支 'master' 设置为跟踪来自 'origin' 的远程分支 'master'。
[root@gitclient git_data]# echo "1111" > 1.txt
[root@gitclient git_data]# git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)
修改: 1.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[root@gitclient git_data]# git add 1.txt
[root@gitclient git_data]# git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)
修改: 1.txt
[root@gitclient git_data]# git commit -m "1.txt第一次修改内容"
[master 86e165a] 1.txt第一次修改内容
1 file changed, 1 insertion(+)
[root@gitclient git_data]# git status
位于分支 master
您的分支领先 'origin/master' 共 1 个提交。
(使用 "git push" 来发布您的本地提交)
无文件要提交,干净的工作区
[root@gitclient git_data]# echo "2222" >> 1.txt
[root@gitclient git_data]# git add 1.txt
[root@gitclient git_data]# git status
位于分支 master
您的分支领先 'origin/master' 共 1 个提交。
(使用 "git push" 来发布您的本地提交)
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)
修改: 1.txt
[root@gitclient git_data]# git commit -m "1.txt第二次修改内容"
[master a87f358] 1.txt第二次修改内容
1 file changed, 1 insertion(+)
[root@gitclient git_data]# git status
位于分支 master
您的分支领先 'origin/master' 共 2 个提交。
(使用 "git push" 来发布您的本地提交)
无文件要提交,干净的工作区
[root@gitclient git_data]# git rm -f 1.txt #删除暂停区的提交信息,但不会删除本地提交信息
rm '1.txt'
[root@gitclient git_data]# ls
[root@gitclient git_data]# git log #查看提交的历史记录
commit a87f35896fcefaa15308d5a69473b41ee3fbc462 (HEAD -> master)
Author: crushlinux <crushlinux@163.com>
Date: Mon Nov 25 16:04:30 2019 +0800
1.txt第二次修改内容
commit 86e165af962964ba1faac2ee32bf76c160ba7706
Author: crushlinux <crushlinux@163.com>
Date: Mon Nov 25 16:03:23 2019 +0800
1.txt第一次修改内容
commit 8675530375dfbae53fa8f159f2206236b3365c9a (origin/master)
Author: crushlinux <crushlinux@163.com>
Date: Mon Nov 25 16:00:20 2019 +0800
注释
[root@gitclient git_data]# git reset --hard 86e165af962964ba1faac2ee32bf76c160ba7706
HEAD 现在位于 86e165a 1.txt第一次修改内容
[root@gitclient git_data]# ls
1.txt
[root@gitclient git_data]# cat 1.txt
1111
[root@gitclient git_data]# git reset --hard a87f35896fcefaa15308d5a69473b41ee3fbc462
HEAD 现在位于 a87f358 1.txt第二次修改内容
[root@gitclient git_data]# cat 1.txt
1111
2222
还原以前的数据(也就是回滚)相当于回快照
[root@gitclient git_data]# ls
git1.text git2.txt README #此时目录中有三个文件
[root@gitclient git_data]# cat git1.text #此时git1.txt中有数据
1111
[root@gitclient git_data]# git reflog
0127d70 (HEAD -> master) HEAD@{0}: commit: git2 1
3bcb150 HEAD@{1}: reset: moving to 3bcb15039fdaa
3bcb150 HEAD@{2}: reset: moving to 3bcb150
3bcb150 HEAD@{3}: commit: git 111
8d4f958 HEAD@{4}: commit: git 1 text
2630913 (origin/master) HEAD@{5}: commit (initial): first commit
[root@gitclient git_data]# git reset --hard 8d4f958 #还原到未来数据位置
HEAD 现在位于 8d4f958 git 1 text
[root@gitclient git_data]# ls #此时目录中只有两个文件
git1.text README
[root@gitclient git_data]# cat git1.text #此时gi1.txt中没有任何数据
[root@gitclient git_data]# git log
commit 8d4f9580d6529437a4c10095f21f20b6c572a3c5 (HEAD -> master)
Author: git <L18370248736@163.com>
Date: Mon Nov 18 20:36:04 2019 +0800
git 1 text
commit 26309136cb57f10c0eda53fa9bad5c699319b5f6 (origin/master)
Author: git <L18370248736@163.com>
Date: Mon Nov 18 16:38:12 2019 +0800
first commit
[root@gitclient git_data]# git reset --hard 8d4f9580
HEAD 现在位于 8d4f958 git 1 text
[root@gitclient git_data]# git tag
[root@gitclient git_data]# git tag 20191119 #以后直接用20191119这个标签回到当时的数据
[root@gitclient git_data]# git show 20191119 #查看当前标签下的文件内容
commit 8d4f9580d6529437a4c10095f21f20b6c572a3c5 (HEAD -> master, tag: 20191119)
Author: git <L18370248736@163.com>
Date: Mon Nov 18 20:36:04 2019 +0800
git 1 text
diff --git a/git1.text b/git1.text
new file mode 100644
index 0000000..e69de29
[root@gitclient git_data]# ls
git1.text git2.txt README
[root@gitclient git_data]# git add git2.txt #先提交到暂停区
[root@gitclient git_data]# cat git2.txt
111222
[root@gitclient git_data]# echo "333333333" > git2.txt
[root@gitclient git_data]# git diff git2.txt
diff --git a/git2.txt b/git2.txt
index 9e56fd5..fb846f7 100644
--- a/git2.txt
+++ b/git2.txt
@@ -1 +1 @@
-111222
+333333333
[root@gitclient git_data]# git commit -a -m "git2.txt 2" #推送到本地仓库
[master 6a132c8] git2.txt 2
1 file changed, 1 insertion(+)
create mode 100644 git2.txt
[root@gitclient git_data]# git branch web #创建一个web分支
[root@gitclient git_data]# git branch #查看目前位于哪儿个分支上,因为我们写代码都不在master主分支上
* master
web
[root@gitclient git_data]# git checkout web #检出到web分支上
切换到分支 'web'
[root@gitclient git_data]# git branch #切换到web分支
master
* web
在web分支上操作
[root@gitclient git_data]# touch 2.txt
[root@gitclient git_data]# echo "22222" > 2.txt
[root@gitclient git_data]# git add 2.txt
[root@gitclient git_data]# git status
位于分支 web
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)
新文件: 2.txt
[root@gitclient git_data]# git commit -m "2.txt第一次提交"
[web 792d07e] 2.txt第一次提交
1 file changed, 1 insertion(+)
create mode 100644 2.txt
[root@gitclient git_data]# git checkout master #提交到本地后切换主分支后,依旧可以提交
切换到分支 'master'
您的分支领先 'origin/master' 共 2 个提交。
(使用 "git push" 来发布您的本地提交)
[root@gitclient git_data]# git checkout web #切到web分支进行操作
切换到分支 'web'
[root@gitclient git_data]# cat 2.txt
22222
[root@gitclient git_data]# echo "3333" >> 2.txt #此时2.txt第二行内容为3333
[root@gitclient git_data]# git commit -m "web分支修改2.txt"
[web 66f7f91] web分支修改2.txt
1 file changed, 1 insertion(+)
[root@gitclient git_data]# git checkout master #切回到master分支
切换到分支 'master'
您的分支领先 'origin/master' 共 4 个提交。
(使用 "git push" 来发布您的本地提交)
[root@gitclient git_data]# echo "22223" >> 2.txt #也输入信息,此时2.txt为22223
合并代码(git merge 负分支名)(说白了就是不同分支间的代码合并在一起)
上面有master分支数据1.txt,也有web分支数据2.txt
[root@gitclient git_data]# git merge web
自动合并 2.txt
冲突(内容):合并冲突于 2.txt
自动合并失败,修正冲突然后提交修正的结果。
[root@gitclient git_data]# cat 2.txt
22222
<<<<<<< HEAD
=======
>>>>>>> web
合并失败的原因在于2.txt上的内容分别有web分支写的3333也有master分支写的22223,两者产生了冲突导致合并失败
解决合并失败方案:
手动解决:
[root@gitclient git_data]# vim 2.txt
<<<<<<< HEAD
======= >>>>>>> web 修改成 22222
22223
3333
[root@gitclient git_data]# git commit -a -m "合并后2.txt" #再次提交到本地仓库
[master 38637e1] 合并后2.txt
[root@gitclient git_data]# git merge web #提交成功
已经是最新的。
[root@gitclient git_data]# git branch --no-merge #查看没有合并的分支
[root@gitclient git_data]# git branch -d web #删除分支
已删除分支 web(曾为 66f7f91)。
[root@gitclient git_data]# git branch
* master
GIT分布式代码管理系统的更多相关文章
- git分布式版本管理系统
Git是分布式版本管理系统Svn是集中式版本管理系统 git速度快,适合大规模协同开发 什么是分布式版本管理系统 假如有10个人,每个人的代码库都是独立的,自己想进行代码提交回滚都可以,无需链接中央服 ...
- 分布式代码管理系统Git实践
1.1 版本管理工具介绍 什么是版本管理工具 为什么要使用版本管理工具? 老板要求小明写一个可行性报告,当他写完给老板看后,结果-- Git简介 早先linux内核代码托管在B ...
- 分布式代码管理系统GIT
1.1Git安装 CentOS上 yum install -y epel-release; yum install git Ubuntu上 apt-get install git Windo ...
- Linux(Ubuntu16.04)+GitLab8.17deb安装包搭建Git仓库(代码管理系统)
1 下载GitLab安装包 2 执行安装命令 3 验证是否安装和启动成功 4 修改管理员密码 5 其它说明 5.1修改访问URL 5.2修改邮件配置 5.3修改web端口 1下载GitLab安装包 ...
- GIT分布式版本控制
1.1Git简介 linus 用C语言编写 2005年诞生 分布式版本管理系统 速度快,适合大规模,跨地区多人协同开发 Git不仅是一款开源的分布式版本控制系统,而且有其独特的功能特性,例如大多数的分 ...
- Git ——分布式版本控制系统
Git ——分布式版本控制系统 本人git主页地址:https://github.com/lendoon/test.git git使用心得:初次接触git在课堂上,老师给我们提供了一个代码托管的场所, ...
- g4e基础篇#2 Git分布式版本控制系统的优势
g4e 是 Git for Enterprise Developer的简写,这个系列文章会统一使用g4e作为标识,便于大家查看和搜索. 章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git ...
- GIT 分布式版本控制系统的简单使用介绍
GIT 分布式版本控制系统的简单使用介绍 1.GIT的概念Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 与 SVN 区别:1. GIT不仅仅是个版本控制系统,它 ...
- 复习宝典之Git分布式版本控制
查看更多宝典,请点击<金三银四,你的专属面试宝典> 第三章:Git分布式版本控制 1)git文件状态 git中的文件有以下几种状态: 未跟踪(untrack):表示文件为新增加的. 已修改 ...
随机推荐
- [转]JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释
jvm区域总体分两类,heap区和非heap区.heap区又分:Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分: ...
- redis的linux安装
1.下载安装包 [root@localhost opt]# yum install wget [root@localhost opt]# wget http://download.redis.io/r ...
- SigXplorer设置延时及Local_Global
通过SigXplorer设置绝对延时和相对延时及对Local-Global的理解 一.基本理解 (感觉可能有偏差) 在于博士的教程第44和45讲中,分别对绝对延时和相对延时进行了设置,通过SigXpl ...
- jvm 结构分析
jvm区域总体分两类,heap区和非heap区.heap区又分: Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分 ...
- script放在body和放在head的区别
放在body中:在页面加载的时候被执行 放在head中:在被调用时被执行 原因: 1.浏览器是从上到下解析HTML的. 2.放在head里的js代码,会在body解析之前被解析:放在body里的js代 ...
- Json.Net的介绍与简单实用(兼容2.0/3.0/3.5/4.5/RT)
本文的前提是你已经熟悉Json,如果您还不知道什么是Json是什么,请自行查看维基百科. 一.Json.Net是什么? Json.Net是一个读写Json效率比较高的.Net框架.Json.Net 使 ...
- javasE--基础部分--线程
Day23 本单元目标 一.线程的相关概念 二.线程的创建和启动★ 三.线程的停止 四.线程的常用方法 五.线程的生命周期★ 六.线程的同步 七.线程的通信 八.线程的创建方式三 九.线程的创建方 ...
- AcWing 842. 排列数字
深搜的一道水题 https://www.acwing.com/problem/content/844/ 正确输入输出 #include<bits/stdc++.h> using nam ...
- 杭电ACM 1713 相遇周期
相遇周期 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- [USACO08JAN]Haybale Guessing(LuoguP2898)
The cows, who always have an inferiority complex about their intelligence, have a new guessing game ...