Git分布式版本控制

一、常见的版本管理工具有

SVN 集中式的版本控制系统,只有一个中央数据仓库,如果中央数据仓库挂了或者不可访问,所有的使用者无法使用SVN,无法进行提交或者备份文件

Git 分布式的版本控制系统,在每个使用者电脑就有一个完整的数据仓库,没有网络依然可以使git,当然为了习惯团队协作,会将本地数据同步到git服务器或者GitHub等代码仓库

二、Git介绍

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git的三种重要模式,分别是已提交、已修改、已暂存

已提交(committed):表示数据文件已经顺利提交到Git数据库中。

已修改(modified):表示数据文件已经被修改,但未被保存到Git数据库中。

已暂存(staged):表示数据文件已经被修改,并会在下次提交时提交到Git数据库中。

提交前的数据文件可能会被随意修改或丢失,但只要把文件快照顺利提交到Git数据库中,那就可以完全放心了,流程为:

1.在工作目录中修改数据文件。

2.将文件的快照放入暂存区域。

3.将暂存区域的文件快照提交到Git仓库中。

三、Git安装

[[email protected] ~]# getenforce #确认Selinux关闭状态

Disabled

[[email protected] ~]# systemctl stop firewalld #关闭防火墙

yum install  git -y

四、Git全局配置

git config --global user.name "zcf"  # 配置git使用用户

git config --global user.email "[email protected]"  # 配置git使用邮箱

git config --global color.ui true  # 语法高亮

git config --list # 查看全局配置

五、Git常用命令

add #添加文件内容至索引

bisect #通过二分查找定位引入 bug 的变更

branch #列出、创建或删除分支

checkout #检出一个分支或路径到工作区

clone #克隆一个版本库到一个新目录

commit #记录变更到版本库

diff #显示提交之间、提交和工作区之间等的差异

fetch #从另外一个版本库下载对象和引用

grep #输出和模式匹配的行

init #创建一个空的 Git 版本库或重新初始化一个已存在的版本库

log #显示提交日志

merge #合并两个或更多开发历史

mv #移动或重命名一个文件、目录或符号链接

pull #获取并合并另外的版本库或一个本地分支

push #更新远程引用和相关的对象

rebase #本地提交转移至更新后的上游分支中

reset #重置当前HEAD到指定状态

rm #从工作区和索引中删除文件

show #显示各种类型的对象

status #显示工作区状态

tag #创建、列出、删除或校验一个GPG签名的 tag 对象

六、Git初始化目录

工作目录(git_data ):当前存放数据的地方

暂存区域(.git):暂时存放数据的地方

本地仓库(.git):永久存放数据的地方

mkdir git_data

cd git_data/

# 初始化

git init

# 查看工作区状态

git status

七、Git添加文件

[[email protected] git_data]# touch readme

[[email protected] git_data]# git status

# 未跟踪的文件:

#   (使用 "git add <file>..." 以包含要提交的内容)

#

# readme    ###发现新建的readme文件  工作目录

[[email protected] git_data]# git status

# 位于分支 master

# 要提交的变更:

#   (使用 "git reset HEAD <file>..." 撤出暂存区)

#

# 新文件:    readme  ####暂存区域

[[email protected] git_data]# git commit -m "the first commit"

[master 8ad0e05] the first commit

1 files changed, 0 insertions(+), 0 deletions(-)

create mode 100644 readme   #####存放到本地仓库

八、Git 删除暂存区数据

#####有些时候会向把已经添加到暂存区的文件移除,但仍然希望文件在工作目录中不丢失,换句话说,就是把文件从追踪清单中删除。

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

##已经添加到暂存区的数据

Git rm --cached database  ##将文件从Git暂存区域的追踪列表移除(并不会删除当前目录内的数据文件)

git rm -f  database  ##讲文件数据从Git暂存区和工作目录一起删除

####没有添加到暂存区的数据直接mv/rename 改名即可

####已经添加到暂存区的数据

git mv readme notice

九、Git历史记录

#查看提交历史记录

git log

#查看最近几条记录

git log -2

#-p显示每次提交的内容差异,例如仅查看最近一次差异

git log -p -1

#--stat简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息

git log --stat -2

#--pretty根据不同的格式展示提交的历史信息

git log --pretty=oneline

#以更详细的模式输出提交的历史记录

git log --pretty=fuller -2

#查看当前所有提交记录的简短SHA-1哈希字串与提交者的姓名,其他格式见备注。

git log --pretty=fomat:"%h %cn"

还可以使用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还原数据

Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将

HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避

免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,

另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会

叫HEAD^,上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第

五个提交版本。

git reset --hard HEAD^ #→还原历史提交版本上一次

git reset --hard 3de15d4 #→找到历史还原点的SHA-1值后,就可以还原(值不写全,系统

会自动匹配)

#####还原未来数据

什么是未来数据?就是你还原到历史数据了,但是你后悔了,想撤销更改,但是git

log已经找不到这个版本了。

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

十一、Git标签

Git标签使用前面回滚使用的是一串字符串,又长又难记。

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

[[email protected] git_data]# git reset --hard 0bdf2e7

HEAD is now at 0bdf2e7 modified README file

[[email protected] git_data]# git reset --hard V1.0

####对比数据

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

git diff README

十二、分支结构

在实际的项目开发中,尽量保证master分支稳定,仅用于发布新版本,平时不要随便直接修改里面的数据文件。

那在哪干活呢?干活都在dev分支上。每个人从dev分支创建自己个人分支,开发完合并到dev分支,最后dev分支合并到master分支。

[[email protected] git_data]# git status

# On branch master   #默认就在master分支

[[email protected] git_data]# git branch dev     #创建dev分支

[[email protected] git_data]# git branch          #查看当前所在分支/查看所有分支

dev

* master

[[email protected] git_data]# git checkout dev   #切换分支到dev

[[email protected] git_data]# git branch         #查看当前所在分支/查看所有分支

* dev

master

[[email protected] git_data]# git branch dev     #创建dev分支

[[email protected] git_data]# git branch          #查看当前所在分支/查看所有分支

dev

* master

[[email protected] git_data]# git checkout dev   #切换分支到dev

[[email protected] git_data]# git branch         #查看当前所在分支/查看所有分支

* dev

master

  注:切换分支之前请务必commit,否则修改会丢失。

[[email protected] git_data]# git checkout dev   #切换分支到dev

[[email protected] git_data]# echo "dev branch" >> kkk.txt

[[email protected] git_data]# git status

[[email protected] git_data]# git commit -a -m "dev-commit"   #提交

十三、分支自动合并

1)自动合并:只有文件同一行内容没有冲突,就可以自动合并

[[email protected] git_data]# git checkout master  #切换到master分支

Switched to branch 'master'

[[email protected] git_data]# git merge dev    #把dev分支自动合并到当前分支

Updating 242bac0..995e05e

Fast-forward

kkk.txt | 2 ++

1 file changed, 2 insertions(+)

2)合并冲突: 文件冲突 – 文件的同一行有不同的内容

模拟冲突(分别修改不同分支文件中的同一行的内容并提交):

echo "master-test"  >>kkk.txt    #在master分支向文件输出测试内容

git commit -a -m "this is master-test"  #提交

git checkout dev     #切换分支到dev

echo "dev-test" >> kkk.txt   #在dev分支向文件输出测试内容

git commit -a -m "this is dev-test"   #提交

git branch master    #再次切换到master分支

git merge dev    #进行合并

3)合并冲突:

[[email protected] git_data]# git merge dev

Auto-merging kkk.txt

CONFLICT (content): Merge conflict in kkk.txt

Automatic merge failed; fix conflicts and then commit the result.

4)手动解决合并冲突

修改提交的文件,保留要留下的内容,其他冲突内容删除

[[email protected] git_data]# cat kkk.txt

test

dev branch

<<<<<<< HEAD

master-test

=======

dev-test

>>>>>>> dev

#比如要保留master-test,其他提示内容都删除,删除后文件内容如下:

[[email protected] git_data]# cat kkk.txt

test

dev branch

master-test

#再次提交

[[email protected] git_data]# git commit -a -m "解决合并冲突"

[master 071f8cd] 解决合并冲突

#重新进行合并

[[email protected] git_data]# git merge dev

Already up-to-date.

可以看到,冲突已经解决。

5)删除dev分支

git branch -d dev

十四、windows客户端使用

windows的git,本质是windows上的linux系统

TortoiseGit-2.2.0.0-64bit 给git加外壳, svn客户端的git版本

十五、Git服务器

1)使用GitHub或者码云等公共代码仓库

2)使用GitLab私有仓库

私有仓库GITLAB

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

机器内存给大点

yum localinstall gitlab-ce-9.1.4-ce.0.el7.x86_64.rpm

gitlab-ctl reconfigure #→初始化,就执行一次

gitlab-ctl status/stop/start

通过浏览器访问页面,设置初始密码,其他操作类似GitHUB。

账户: root 密码自己设置为12345678

注:gitlab搭配ssh默认端口引发的血战


[ sed -i ‘s/#Port 22/Port 52113/g’ /etc/ssh/sshd_config

#如果是默认的22,就必须修改,否则不生效,我这里改为了52113

systemctl restart sshd #重启sshd服务

grep “ssh_port” /etc/gitlab/gitlab.rb #修改gitlab里面的ssh_prot端口为自己服务器的sshd端口,声明gitlab.yml中的配置会被这个给覆盖

gitlab_rails[‘gitlab_shell_ssh_port’] = 52113

gitlab-ctl reconfigure #gitlab重新加载配置文件即可

十六、GITHUB使用

Github顾名思义是一个Git版本库的托管服务,是目前全球最大的软件仓库,拥有上百

万的开发者用户,也是软件开发和寻找资源的最佳途径, Github不仅可以托管各种Git

版本仓库,还拥有了更美观的Web界面,您的代码文件可以被任何人克隆,使得开发

者为开源项贡献代码变得更加容易,当然也可以付费购买私有库,这样高性价比的私

有库真的是帮助到了很多团队和企业

时间: 2024-10-08 08:55:41

Git分布式版本控制的相关文章

Git 分布式版本控制 -- (2、远程仓库)

上周断断续续好几个爬虫出问题,今天统计了以下十多个爬虫停止工作了.这下有事情做了.今天看了Prada的官网,改版好严重,连价格取值都成get https json了.好在排版什么的还是挺不错的. 继续接上次把,Git分布式版本控制.火车票: http://my.oschina.net/lpe234/blog/342963 或者直接看原文.确实很适合入门了解学习: http://www.liaoxuefeng.com/ 擦,静不下心来~~ 有空在整理吧

Git分布式版本控制教程

Git分布式版本控制 Git 安装配置 Linux&Unix平台 Debian/Ubuntu $ apt-get install git Fedora $ yum install git (up to Fedora 21) $ dnf install git (Fedora 22 and later) Gentoo $ emerge --ask --verbose dev-vcs/git Arch Linux $ pacman -S git openSUSE $ zypper install g

Git 分布式版本控制的常见命令

Git 的作用:  (1)方便多人协同开发; (2)方便版本控制 Git 分布式版本控制的主要区域及命令图,下面会详细讲解: 创建项目并将切换至项目目录下 1. 创建本地仓库:  git init   此命令会在根目录下创建 .git的隐藏文件,为本地的代码仓库 2. 配置个人信息 :  git config user.name"张三" git config user.email"[email protected]"    此命令设置提交的姓名和邮箱,若不设置的话会

Git分布式版本控制(安装和配置)

版本控制 简介 你可以把一个版本控制系统(VCS)理解为一个"数据库",在需要的时候,它可以帮你完整地保存一个项目的快照.当你需要查看一个之前的快照(称之为"版本")时,版本控制系统可以显示出当前版本与上一个版本之间的所有改动的细节.版本控制系统主要分为两种,集中式版本控制和分布式版本控制.CVS和SVN就是典型的集中式版本控制系统,而Git是目前世界上最先进的分布式版本控制系统. 集中式版本控制 集中式版本控制的仓库是集中存放在中央服务器的,而干活的时候,用的都是

git 分布式版本控制了解

今天也来了解一下这个版本控制神器,下面了解一些词语的意思 先说集中式版本系统,版本库是集中放在中央服务器的,干活的时候,都是用自己的电脑,从中央处理器取得最新的版本,干完活后,在把自己的活推送给服务器.中央处理器就好比一个图书馆,大家都从图书馆借书,然后回家自己看,看完后再返回给图书馆.集中式版本系统的缺点是必须联网才可以干活,如果互联网,网速慢的话,可能提交一个10M的文件就得很长时间,如果中央服务器快掉的话,所有人对没法干活了 分布式版本系统有什么不同呢,首先.分布式版本系统没有中央处理器,

Git分布式版本控制工具

一.安装Git  1.下载Windows版的Git:msysgit:官方下载地址:http://msysgit.github.io,安装选定要安装的目录(路径杜绝中文),剩下的按照默认安装即可,参考:GIt安装教程 .   2.安装完成后,在开始菜单里找到"Git"->"Git Bash",弹出一个类似命令行的窗口:或是在CMD命令提示符下,输入git回车可以看到很多提示,就说明Git安装成功!   3.初始化目录 生成隐藏文件 .git 负责版本的保存 [e

it入门之:学会使用Git 分布式版本控制工具

环境:window 工具:git & TortoiseGit 下载安装以及配置环境变量 :略略略 创建Github账户:登录https://github.com/用自己的常用邮箱创建账户,用来管理自己的代码 打开Git-bash 输入: ssh-keygen -t rsa -C "[email protected]" #连续三次回车,默认:/c/Users/Administrator/.ssh · 在c盘,当前用户文件夹下,有个.ssh 文件夹,在里边 找到 id_rsa.pu

开源分布式版本控制工具 —— Git 之旅

转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-tourofgit/ Git 主张的分布式代码库与文件快照的设计思想,相对于传统 CVS.SVN 等集中式.文件差异式版本控制工具是一种挑战与颠覆.Git 带来了离线提交.轻量级分支等诸多便利.不过,也有人质疑 Git 的复杂性,并由此拔高了学习成本,某种程序上影响了开发者使用或者迁移 Git 的项目进度,笔者同样感同身受,这也是本文的出发点. 不同于各种 Git 用法指南,本文在介

源代码管理——git(分布式版本控制和集中式版本控制对比,git和SVN对比,git常用指令,搭建GitHub远程仓库,搭建oschina远程仓库 )

一.git简介 什么是git? git是一款开源的分布式版本控制工具 在世界上所有的分布式版本控制工具中,git是最快.最简单.最流行的 git的起源 作者是Linux之父:Linus Benedict Torvalds 当初开发git仅仅是为了辅助Linux内核的开发(管理源代码) git的现状 在国外已经非常普及,国内并未普及(在慢慢普及) 越来越多的开源项目已经转移到git CVS 最早的开源.免费的集中式版本控制工具 自身设计有问题,会造成提交文件不完整,版本库莫名其妙损坏的情况 SVN