0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

GIT(分布式版本控制系统)的工作原理

马哥Linux运维 来源:稀土掘金技术社区 2023-12-21 16:09 次阅读

7de670c2-9763-11ee-8b88-92fbcf53809c.jpg

SVN(集中式版本控制系统

中央服务器是完整的,commit动作直接连接服务器执行

GIT(分布式版本控制系统)

都是完整的,功能更强大,自然而然操作更复杂一些。git在本地也是以git版本库的形式管理,可以在本地做一些修改,然后commit到本地的版本库,最后push到服务器。

还有啥呢,如CVS、VSS....但和SVN一样都是单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。(没用过,了解也不多)

工作原理

7df024f0-9763-11ee-8b88-92fbcf53809c.jpg

工作区间: 即我们创建的工程文件, 在编辑器可直观显示;

缓存区: 只能通过git GUI或git shell 窗口显示,提交代码、解决冲突的中转站;

本地仓库: 只能在git shell 窗口显示,连接本地代码跟远程代码的枢纽,不能联网时本地代码可先提交至该处;

远程仓库: 即保存我们代码的服务器,本文以公共版本控制系统:gitlab为例,登录gitlab账号后可直观显示;

浅谈下我们实际场景常用的命令吧

1、配置


#配置邮箱 
git config  --global  user.email "你的邮箱"


#配置用户名
git config --global user.name "你的用户名"


#生成SSH秘钥
ssh-keygen -t rsa -C "你的邮箱"


#查看所有的配置信息
git config -l 


#更针对性的
git config --system -l 
git config --local -l 
git config --global -l 


#查看远程库信息
git remote -v


#移除远程地址信息 
git remote remove origin


#添加新的地址:
git remote add origin 远程路径


#直接修改远程仓库指向地址
git remote set-url origin 远程路径


#编辑模式修改
git config -e


#设置记住密码(默认15分钟)
git config --global credential.helper cache
#设置记住密码时间
git config credential.helper 'cache --timeout=3600'
#永久保存密码
git config --global credential.helper store
#清除密码
git config --system --unset credential.helper


2、常用命令



#列一下容易遇到需要使用的吧


#拷贝一份远程仓库,也就是下载一个项目。
git clone


#添加文件到暂存区
git add


#将暂存区内容添加到仓库中
git commit
#想修改注释,输入以下命令,会进入默认vim编辑器,修改注释完毕后保存就好了
git commit --amend


#删除工作区文件。
git rm
#将文件从暂存区和工作区中删除
git rm 
#如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
git rm -f 
#想把文件从暂存区域移除,但仍然希望保留在当前工作目录中
git rm --cached 


#移动或重命名工作区文件。
git mv [file] [newfile]


#从远程获取代码库
git fetch 




#下载远程代码并合并
git pull
#拉取远程master和本地matser合并
git pull origin master
#拉取远程的master到本地的dev
git pull origin master:dev


#上传远程代码并合并
git push <远程主机名> <本地分支名>:<远程分支名>
#如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数
git push --force origin master


#合并
git merge


#删除本地分支xxx  删除分支前先切换到其他分支
git checkout dev
git branch -D tmp
#删除远程分支XXX
git push origin --delete XXX


#查看仓库当前的状态,显示有变更的文件。
git status


#比较文件的不同,即暂存区和工作区的差异。
git diff 
#显示暂存区和工作区的差异
git diff [file]
#显示暂存区和上一次提交(commit)的差异
git diff --cached [file]
git diff --staged [file]


#查看历史提交记录
git log  #--pretty=oneline
#更简洁的查看
git reflog


#以列表形式查看指定文件的历史修改记录
git blame 


#回退版本。
#--soft  不删除工作空间改动代码,撤销commit,不撤销git add . 
#--hard   删除工作空间改动代码,撤销commit,撤销git add . 
git reset
#回退到上一个版本
git reset --hard  HEAD^
#回退到上上一个版本(更多以此类推)
git reset --hard  HEAD^^
#回退版本也可以写成HEAD~1、HEAD~2....
git reset --hard  HEAD~2
#指定版本号回退
git reset --hard  930c4a7a


#查看分支列表
git branch
git branch -r
git branch -a




#挑拣提交
git cherry-pick
#误删怎么办
git  checkout  -- test.txt
#创建本地tag
git tag 
#推送到远程仓库
git push origin 
#一次全部推送本地未推送的标签
git push origin --tags


#执行存储时,添加备注,方便查找,只有git stash 也是可以的,但查找时不方便识别
git stash save "save message" 
#查看stash了哪些存储
git stash list
#命令恢复之前缓存的工作目录
git stash pop
#应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0}
git stash apply
#丢弃stash@{$num}存储,从列表中删除这个存储
git stash drop 
#删除所有缓存的stash
git stash clear


3、一些辅助操作


git  config  --global  alias.co  checkout
git  config  --global  alias.ci   commit
.......




git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgree
n(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

目录中新建了一个.gitignore文件,将想要忽略的文件或者目录保存即可

聊一聊分支设计的规范(良好习惯的养成)

明确一点:规范是死的,人是活的,再好的规范也要团队适合,并且需要团队成员去遵循,没有一成不变的规范

1、软件环境

DEV 环境(Development environment):用于开发者调试使用。

FAT 环境(Feature Acceptance Test environment):功能验收测试环境,用于测试环境下的软件测试者测试使用。

UAT 环境(User Acceptance Test environment):用户验收测试环境,用于生产环境下的软件测试者测试使用。

PRO 环境(Production environment):就是生产环境。

2、分支命名

分支 名称 环境 可访问
master 主分支 PRO
release 预上线分支 UAT
hotfix 紧急修复分支 DEV
develop 测试分支 FAT
feature 需求开发分支 DEV

master 分支

master为主分支,用于部署到正式环境(PRO),一般由release或hotfix分支合并,任何情况下不允许直接在 master 分支上修改代码。

release 分支(一般在发布日由运维创建,我们公司目前是常驻的pre-production)

release为预上线分支,用于部署到预上线环境(UAT),始终保持与master分支一致,一般由develop或hotfix分支合并,不建议直接在release分支上直接修改代码。

如果在release分支测试出问题,需要回归验证develop分支看否存在此问题。

hotfix /repair 分支

hotfix为紧急修复分支,命名规则为hotfix-开头。

当线上出现紧急问题需要马上修复时,需要基于release或master分支创建hotfix分支,修复完成后,再合并到release或develop分支,一旦修复上线,便将其删除。

develop 分支

develop为测试分支,用于部署到测试环境(FAT),始终保持最新完成以及 bug 修复后的代码,可根据需求大小程度确定是由feature分支合并,还是直接在上面开发。(注:在我们公司不建议直接上面修改)

一定是满足测试的代码才能往上面合并或提交。

feature 分支(我们公司以迭代代号创建)

feature为需求开发分支,命名规则为feature-开头,一旦该需求上线,便将其删除(但可以按照公司习惯,比如删除一个月以前的.....)。

commit提交规范

提交的信息很重要,可以方便我们查阅日志,建议大家认真填写,可以参考规范:(如下)

(scope):

type表示 动作类型,可分为:

fix:修复 xxx Bug,有时可在相关commit上加上修复的bug的等级

Blocker (中断) : 客户端程序无响应,无法执行下一步操作 Critical (严重):功能点缺失 Major (较严重):功能点没有满足需求 Normal (普通):数值计算错误,js错误 Minor (次要):界面UI与需求不符 Trivial (轻微):辅助描述说明不清楚,提示语句错误之类…

feat:新增 xxx 功能

test:调试 xxx 功能

style:变更 xxx 代码格式或注释

docs:变更 xxx 文档

refactor:重构 xxx 功能或方法

chore:构建过程或辅助工具的变动,比如项目新加了别的js插件之类的

scope表示 影响范围,可分为:模块、类库、方法等。

subject表示 简短描述,最好不要超过 60 个字。

如 git commit -m 'fix(购物车):满增满减活动返回结算价因浮点问题导致不精准问题'

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制系统
    +关注

    关注

    41

    文章

    5966

    浏览量

    108740
  • 服务器
    +关注

    关注

    12

    文章

    8125

    浏览量

    82543
  • Git
    Git
    +关注

    关注

    0

    文章

    193

    浏览量

    15420

原文标题:Git: 说说我们的版本控制^o^实用干货篇

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    分布式软件系统

    分布式程序设计语言及其编译(解释)系统分布式文件系统分布式数据库系统等。 分布式操作
    发表于 07-22 14:53

    基于虚拟仪器的城市景观照明分布式控制系统设计与实现

    基于虚拟仪器的城市景观照明分布式控制系统设计与实现针对城市级景观照明系统分布广,数量多的特点,设计一种基于虚拟仪器的可组分布式城市景观照明控制系统。采用C8051F040 处理器构建多
    发表于 12-01 10:19

    分布式控制系统

    分布式控制系统分布式控制系统 (distributed control systems,简称DCS),又称为分散控制系统,分散型控制系统,集散控制系统.行业内业称4C技术既Contro
    发表于 03-01 22:19

    基于STM和MSP的分布式多步进电机控制系统设计

    本帖最后由 南中南 于 2016-1-7 11:05 编辑 针对多步进电机控制系统的要求,设计了基于STM32和MSP430的分布式多步进电机控制系统。分享下
    发表于 01-07 10:16

    请问有GIT版本控制系统教程吗?

    嗨,我想开始使用Git版本控制系统。我从来没有用过它,想通过一个教程。有一个微芯片GIT教程吗?谢谢
    发表于 09-04 12:25

    分布式控制系统的组成是什么?

    由多台计算机分别控制生产过程中多个控制回路,同时又可集中获取数据、集中管理和集中控制的自动控制系统分布式控制系统采用微处理机分别
    发表于 03-13 09:02

    如何去设计分布式车身控制系统

    分布式车身控制系统的结构是怎样构成的?分布式车身控制系统有哪些功能?
    发表于 05-13 07:03

    请问怎样去设计一种车门分布式控制系统

    一种介绍基于CAN/LIN总线的车门分布式控制系统设计
    发表于 05-14 06:44

    在RT-Thread studio上使用GIT进行工程管理

    1、如何在RT-Thread studio上使用GIT进行工程管理  Git 是目前最先进的分布式版本控制系统。什么是
    发表于 09-19 17:05

    Git是什么?Git的基本使用资料说明

      Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一)。
    发表于 05-29 17:56 1次下载
    <b class='flag-5'>Git</b>是什么?<b class='flag-5'>Git</b>的基本使用资料说明

    Git在实际工作中的基本使用方法

    代码版本控制对于我们嵌入式软件开发岗是一项基础、必备的技能,需要熟练掌握。实际工作中常用的版本控制系统有:
    的头像 发表于 09-14 18:12 2302次阅读

    开源的分布式版本控制系统Git配置

      今天带着大家来学习Git,这是一个开源的分布式版本控制系统,帮助我们进行项目的管理更迭。 其实关于Git的命令也不是一定需要记忆,但毕竟
    的头像 发表于 03-09 13:47 1284次阅读

    世界上最先进分布式版本控制系统Git介绍

    世界上最先进的分布式版本控制系统。 简单理解版本控制就是:比如你修改了代码,然后提交修改,系统
    的头像 发表于 06-09 17:40 1843次阅读

    一文详解Git分布式版本控制系统

    Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。 Git 的特色是分支,人家图标上都敢这么画了
    的头像 发表于 10-14 09:48 587次阅读

    分布式大屏控制系统工作原理

    分布式大屏控制系统是一种基于分布式计算、云计算和大数据技术的控制系统,具有高效、稳定、灵活的特点。该系统通过将各个子
    的头像 发表于 01-29 14:24 238次阅读