GIt版本管理

Posted lxfpy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GIt版本管理相关的知识,希望对你有一定的参考价值。

Git版本控制系统

什么是版本控制

技术图片

技术图片

常见版本管理工具

大部分公司使用:

技术图片

一些老公司:

技术图片

Windows Git 客户端使用

  • windows的git,本质是windows上的linux系统
  • TortoiseGit-2.2.0.0-64bit 给git加外壳,svn客户端的git版本

下载安装

官网下载

一直下一步即可

使用

右键点击,Git GUI 是图形化界面,一般用第二个Git 命令行模式

技术图片

Git Linux 使用

不用下载系统自带,没有的话yum安装

Git全局配置

这一步可以简单理解为创建一个账户。更多用户操作移步

git config --global user.name "lxf"                        #配置git使用用户
git config --global user.email "[email protected]"     #配置git使用邮箱
git config --global color.ui true                          #语法高亮
git config --list                                          #查看全局配置

 

初始话Git工作目录

工作目录就是,里面可以存放你的笔记、代码,而且里面有个隐藏目录.git,里面存放的是历史记录、历史备份,都存在隐藏目录。

# 创建工作目录
[[email protected] ~]# mkdir git_data 
[[email protected] ~]# cd git_data/
# 初始化
[[email protected] git_data]# git init
Initialized empty Git repository in /root/git_data/.git/
#.git目录存放所有历史备份文件,文件都不是明文存放
[[email protected] git_data]# ll -a
total 0
drwxr-xr-x. 3 root root 18 Jun 28 18:21 .
dr-xr-x---. 4 root root 198 Jun 28 18:21 ..
drwxr-xr-x. 7 root root 119 Jun 28 18:21 .git
[[email protected] git_data]# git status  # 查看工作区状态
# On branch master # 在主分支
#
# Initial commit  # 初始提交
#
nothing to commit (create/copy files and use "git add" to track)

创建数据-提交数据

[[email protected] git_data]# pwd
/root/git_data
[[email protected] git_data]# touch README       #在工作目录的创建一个文件
[[email protected] git_data]# git status         #创建个文件后在查看git状态就会不一样
# On branch master
#
# Initial commit
#
# Untracked files:                      #Untracked 没有跟踪的文件
#   (use "git add <file>..." to include in what will be committed)   #提示你用这个命令提交创建的文件
#
#    README                             #红字表示没有跟踪的文件
nothing added to commit but untracked files present (use "git add" to track)
[[email protected] git_data]# git add README     #根据提示提交创建的文件
[[email protected] git_data]# git status         #然后在查看一下git的状态,又会改变
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#    new file:   README                #已经跟踪的文件会变绿,然后才可以提交文件
#                                      #设置颜色高亮不同状态才显示不同颜色

git工作原理

技术图片

git提交一个数据或文件,它要分为两步骤,三个区域

  • 工作目录是:git_data目录,我们在这里创建了一个README文件
  • 然后git add README,这样只是把这个文件提交到了:暂存区域
    • 为什么要设置暂存区域,使你万一提交错了可以反悔,保存到服务器就删不掉了,有个缓存的区域
  • ?所以git add 表示提交数据到暂存区域,但我们最终目标还是要把文件交给git服务器,所以最后一步是吧文件交给git服务器
  • ?怎么提交给git服务器呢?一个命令git commit:提交暂存文件至版本库。

git commit使用

git commit -m first commit      #一次把暂存区域的文件,全部提交
# -m 的意思是为你提交的文件写一个说明,关于哪方面的,提交的什么东西,都可以详细的写出来
#一定要写,方便查找历史记录,而且不写也会提示你写

 

[[email protected] git_data]# git commit -m first commit
[master (root-commit) cc09e5a] first commit          #master:主分支,中括号口面是-m的说明
 2 files changed, 0 insertions(+), 0 deletions(-)    #2个文件改变了,0个插入,0个删除
 create mode 100644 README                           #创建了权限是644的文件README
 create mode 100644 gittest                          #创建了权限是644的文件gittest
git add  *        # 添加工作目录里的所有文件到暂存区域

修改或删除暂存区域的文件

没有添加到暂存区的数据直接rm删除即可。

已经添加到暂存区数据:

  • 创建一个文件:touch test
  • 添加到缓存区:git add test

从缓存区里删除的方法三种:

方法一:git rm --cached test
方法二:git reset HEAD test
#将文件从git暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件)

方法三:git rm -f test
#将文件数据从git暂存区和工作目录一起删除

文件改名

普通文件改名:    mv test test1
加入缓存区后:git mv test test1

查看历史记录,git日志

git log   #→查看提交历史记录
[[email protected] git_data]# git log           #显示一组信息,因为只提交了一次
commit cc09e5aeb33861d68a4580a5ecff66  #给每一次提交一个序列号,查找某个记录用,如果要回滚某个历史版本,回滚命令+序列号
Author: lxf <[email protected]163.com>    #这行表示,作者是谁
Date:   Wed Apr 25 12:39:51 2018 +0800 #日期

    first commit                       #本次提交说明信息,提交的什么东西,-m时指定的
git log -2         #查看最近几条记录
git log -1 -p      #-p显示每次提交的内容差异,例如仅查看最近一次差异
git log -2 --stat  #--stat简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息
git log --pretty=oneline  #--pretty根据不同的格式展示提交的历史信息
回滚时用很方便这个命令
技术图片
git log --pretty=fuller -2       #以更详细的模式输出提交的历史记录
git log --pretty=fomat:"%h %cn"  #查看当前所有提交记录的简短SHA-1哈希字串与提交者的姓名,其他格式见备注。
#→还可以使用format参数来指定具体的输出格式,这样非常便于后期编程的提取分析哦,常用的格式有:
%s  提交说明。
%cd 提交日期。
%an 作者的名字。
%cn 提交者的姓名。
%ce 提交者的电子邮件。
%H  提交对象的完整SHA-1哈希字串。
%h  提交对象的简短SHA-1哈希字串。
%T  树对象的完整SHA-1哈希字串。
%t  树对象的简短SHA-1哈希字串。
%P  父对象的完整SHA-1哈希字串。
%p  父对象的简短SHA-1哈希字串。
%ad 作者的修订时间。

快速添加

#只有修改状态的文件才能使用,就是提交过一次,修改后,可以使用这个命令一步到位

技术图片

git commit -a  -m "modifie README"          #-a 表示直接提交

技术图片

还原历史数据

        Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD^,上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本。

 

画图理解,想看哪个版本链接到哪个版本即可,就好像软链接

技术图片

还原历史版本方法:

# 方法一:还原历史提交版本上一次
git reset --hard HEAD^
# 上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本

# 方法二:利用版本序列号 :显示序列号:git log --pretty=oneline
git reset --hard 3de15d4   
#精确还原到某个版本用,找到历史还原点的SHA-1值(序列号)后,就可以还原(值不写全,系统会自动匹配)

还原未来数据

#找出未来版本的序列号,直接git reset --hard 版本号还原

git reflog  #查看未来历史更新点

技术图片

git reset --hard 版本号

标签使用

#前面回滚使用的是一串字符串,又长又难记,那么每次提交commit完以后打一个标签git tag v1.0默认给当前的版本或最新的版本打一个标签,方便回滚的时候直接git reset --hard v1.0即可。

git tag v1.0     #当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag
git tag          #查看当前所有的标签
git show v1.0    #查看当前1.0版本的详细信息
git tag v1.2 -m "version 1.2 release is test"  #创建带有说明的标签,-a指定标签名字,-m指定说明文字
git tag -d v1.0   #我们为同一个提交版本设置了两次标签,删除之前的v1.0

对比数据

git diff可以对比当前文件与仓库已保存文件的区别,知道了对README作了什么修改后,再把它提交到仓库就放心多了。
git diff README

没有结果是没有修改,修改一下:

 技术图片

分支结构

之前一只是在master分支(主分支)操作

技术图片

创建,查看,切换,删除分支

git branch linux    # 创建linux分支,branch是树枝、分支的意思

git branch           # 查看分支,*号在哪就是在哪个分支

 技术图片

git checkout linux  # 切换linux分支

 技术图片

git branch -d linux  #删除linux分支

checkout的另一个功能

git checkout -- README   # 一键还原README文件

[[email protected] git_data]# git status              #没有有改动的文件
# On branch master
nothing to commit, working directory clean
[[email protected] git_data]# echo 666 > README       #改动一个文件
[[email protected] git_data]# git status              #然后有修改的文件
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#    modified:   README                      #文件被修改
#
no changes added to commit (use "git add" and/or "git commit -a")
[[email protected] git_data]# git checkout -- README  #一键还原,就是还原文件当前版本最初的状态
[[email protected] git_data]# git status              #没有改动的文件
# On branch master
nothing to commit, working directory clean

合并分支

git checkout master     # 切换到主

git merge linux             # 分支linux合并至当前分支,merge合并。

git branch -d linux       # 一个良好的习惯,合并完分支以后,把分支删掉

分支冲突

就是主分支和分支一样两行内容,主分支加了一行,分支加了一行,合并的时候就会产生冲突,这时候需要手工合并,解决分支合并冲突。如图:

#合并失败,人工介入,修正了冲突以后,就可以提交了

[[email protected] git_data]# vim README 
<<<<<<< HEAD   #留下保留的内容其他绿色部分全删除
123   #这是主分支添加的新一行内容,合并时和linux分支发生了冲突,如果保留这行其他全删
=======         #留下保留的内容其他绿色部分全删除
312   #这是linux分支添加的新一行内容,合并时和主分支发生了冲突,如果保留这行其他全删
>>>>>>> linux    #留下保留的内容其他绿色部分全删除

git branch -d linux  #确认合并完成后,可以放心地删除Linux分支。

GitLab私有服务器

技术图片

git人人都是中心,通过gitlab服务器共享代码

安装文档  https://about.gitlab.com/downloads/#centos7

https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/

安装

机器内存给大点

上传安装包,百度下载

yum -y localinstall gitlab-ce-9.1.4-ce.0.el7.x86_64.rpm  # 安装本地yum包
gitlab-ctl reconfigure    # 初始化,就执行一次
gitlab-ctl status     # 安装了很多服务,所以启动的时候,有冲突的服务端口,会导致启动不来,所以安装gitlab需要一个干净的机器
gitlab-ctl status/stop/start

网页登陆

通过浏览器访问页面10.0.0.63,第一次登陆需要设置初始密码12345678,然后登陆

账户:root  密码:12345678

gitlab使用

首先创建新的项目:

技术图片

技术图片

这是私有的,所以需要秘钥才能访问技术图片进行SSH key认证

ssh-keygen                 #在git服务器生成一对秘钥,然后回车三连
cat /root/.ssh/id_rsa.pub      #秘钥对私钥和公钥,分发的是公钥,公钥等于锁头,私钥留在手中

技术图片

技术图片

技术图片

创建新的仓库

 技术图片这个页面拉倒下面技术图片

git clone [email protected]10.0.0.63:root/43team.git #克隆上面创建的项目,cd进去就是一个git工作目录,默认当前目录创建
cd 43team
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master             #推送代码,这样就推送到了gitlab服务器里,页面里查看。

README里是空的,在网页里写点内容,先点击文件打开

 技术图片

然后点击Edit是编辑文件,往里面写点内容

 技术图片

第一步填写本次提交的注释,相当于git commit -m "注释" ,它默认有给你写,第二步是确定修改

 技术图片

下载代码

git pull    #下载代码

 技术图片

新增三个命令:上传代码,和下载代码

git clone [email protected]地址:root/43team.git #只在第一次复制代码使用,其他时候用下载代码命令即可
git push -u origin master #推送代码,这样就推送到了gitlab服务器里,页面里查看
git pull #下载代码

总结

 

Command line instructions 命令行指令

 

Git global setup  全局设置

git config --global user.name "Administrator"

git config --global user.email "[email protected]"

 

Create a new repository  创建新的仓库

git clone [email protected]/43team.git

cd 43team

touch README.md

git add README.md

git commit -m "add README"

git push -u origin master

 

Existing folder

cd existing_folder

git init

git remote add origin [email protected]/43team.git

git add .

git commit

git push -u origin master

 

Existing Git repository

cd existing_repo

git remote add origin [email protected]/43team.git

git push -u origin --all

git push -u origin --tags

 

 

 

以上是关于GIt版本管理的主要内容,如果未能解决你的问题,请参考以下文章

git-GUI版本管理 在win10下怎么设置成中文界面

使用git管理文件版本

版本管理 - Git 使用入门

GIt版本管理

使用Git管理代码版本

谈谈分布式版本管理工具Git