Git版本控制

版本控制

版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。

1)实现跨区域多人协同开发
2)追踪和记载一个或者多个文件的历史记录
3)组织和保护你的源代码和文档
4)统计工作量
5)并行开发、提高开发效率
6)跟踪记录整个软件的开发过程
7)减轻开发人员的负担,节省时间,同时降低人为错误

简单说就是用于管理多人协同开发项目的技术。

版本系统

本地版本系统

记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用

集中版本控制SVN

所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改.
所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、CVS、VSS.

分布式版本Git

所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。

git和svn主要区别

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。

Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。

安装

官网: http://git-scm.com/
淘宝镜像:http://npm.taobao.org/mirrors/git-for-windows/

配置

查看默认配置
git config -l
查看系统配置
git config --system --list
查看全局配置
git config --global --list
查看所有的配置以及它们所在的文件
git config --list --show-origin

必要配置

git config --global user.name "name"  #名称
git config --global user.email "邮箱"   #邮箱

基本理论

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
image

  1. Workspace:工作区,就是你平时存放项目代码的地方

  2. Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

  3. Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

  4. Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
    本地的三个区域确切的说应该是git仓库中HEAD指向的版本
    image

1、在工作目录中添加、修改文件;

2、将需要进行版本管理的文件放入暂存区域;

3、将暂存区域的文件提交到git仓库。

整体流程

image

本地仓库搭建

创建全新的仓库,需要用GIT管理的项目的根目录执行:

# 目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面
git init

# 创建文件
touch helloworld.java

# 查看文件状态
git status

# 添加文件到暂存区
git add .

# 提交到本地仓库
git commit -m "信息"

# 添加远程仓库
git remote add 远程仓库名 url

# 拉取远程仓库文件
git pull --rebase origin master

# 本地仓库提交给远程仓库的maser分支
git push -u origin master

关于分支

几乎所有的版本控制系统都以某种形式支持分支。
使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。 
在开发中,一般有如下分支使用原则与流程: 
master (生产) 分支 
线上分支,主分支,中小规模项目作为线上运行的应用对应的分支; 
develop(开发)分支 
是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。 
feature/xxxx分支 
从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完,成后合并到develop分支。 
hotfix/xxxx分支, 
从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、 develop分支。 
还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、pre分支(预上线分支)等 等。
本文转载于网络 如有侵权请联系删除

相关文章

  • 打通任督二脉,NVMe全闪存为数字化转型注入加速度

    “天下武功、唯快不破”,数字经济时代尤甚。都说数据堪比新时代的石油,极富价值。但比数据本身更重要的是,数据价值如何快速、高效地释放。毫无疑问,谁能快速、高效释放数据价值,谁就在激烈市场竞争中占据主动。来看个鲜活的例子:某大型股份制银行,有超过2万名员工属于重度的数据消费者,从日常的精准营销、精细化运营到风险控制等,时时刻刻都需要使用数据。但随着业务量的增加,数据报表打开率却不尽如人意,过长的等待时间对业务体验和效率带来显著影响。该行系统负责人透露:“专门团队使用各种招数对数据报表进行性能优化,效果依然不太理想。最后发现是硬件协议的瓶颈。更换了端到端NVMe全闪存之后,业务性能得到质的飞跃。”无独有偶,随着千行百业数字化转型的深入,NVMe这项小小的存储协议愈发牵动着用户的心。很多用户逐渐意识到,SSD等介质革命固然带来了IO的巨幅提升,但NVMe协议才是发挥性能的关键,而端到端NVMe则犹如打通存储系统乃至整个数据中心的任督二脉,让数字化转型真正走向“高速之路”。01NVMe为何至关重要数字化转型需要基础设施铺就一条高速之路。一直以来,作为承载数据的存储系统被寄予厚望。十多年前,当闪存

  • Linux规划、安装、远程管理

    Linux规划一定要根据服务项目,才来进行硬盘的规划。如果是邮件主机,一般/var通常会给个数GB的大小,如此一来就可以不担心会邮件空间不足!如果是多用户多终端主机,一般/home通常比较大。这些都是和当初预计的主机服务是有关的!我的wmware中的CentOS分区如下图(使用df-th可以查看):/boot该分区存放Linux的Grub(bootloader)和内核源码,一般给200MB即可>swap该分区没有对应的目录,故用户无法访问,只能由系统访问。Linux下的swap分区即为虚拟内存.虚拟内存用于当系统内存空间不足时,先将临时数据存放在swap分区,等待一段时间后,然后再将数据调入到内存中执行.所以说,虚拟内存只是暂时存放数据,在该空间内并没有执行。swap分区大小一般为物理内存的两倍,物理内存最多给4G足够了,我的是2000MB>/home根据用户分配给即可,我的是2000MB>/根分区,剩余空间都给/分区Linux安装wmware虚拟机安装Linux操作系统参见我的csdn博客:https://blog.csdn.net/u013637931/artic

  • 入门腾讯实时音视频(TRTC)从这里开始

    腾讯实时音视频TRTC是什么?腾讯实时音视频(TencentReal-TimeCommunication,TRTC)将腾讯21年来在网络与音视频技术上的深度积累,以多人音视频通话和低延时互动直播两大场景化方案,通过腾讯云服务向开发者开放,致力于帮助开发者快速搭建低成本、低延时、高品质的音视频互动解决方案。产品详情>>TRTC可用于什么场景?视频通话基础功能:即1对1或多人视频通话,支持720P、1080P高清画质。单个房间最多支持300人同时在线,最多支持50人同时开启摄像头。适用场景:适用于1对1视频通话、300人视频会议、在线问诊、视频聊天、视频客服、视频面审、视频双录、在线理赔、视频狼人杀等场景。语音通话基础功能:即1对1或多人语音通话,支持48kHz,支持双声道。单个房间最多支持300人同时在线,最多支持50人同时开启麦克风。适用场景:适用于1对1语音通话、多人语音通话、语音聊天、语音会议、语音客服、在线狼人杀等多种互动场景。视频互动直播基础功能:支持主播与观众视频连麦互动、主播跨房间(跨直播间)PK。支持平滑上下麦,切换过程无需等待,主播延时小于300ms。单个房

  • 在SAP Hybris commerce Storefront里购物下单

    版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。本文链接:https://jerry.blog.csdn.net/article/details/102739321操作过程和大家平时在网上购物没有太大差别。选中一款心仪的产品,点击Addtocart加到购物车里:点击Checkout结帐:生成一个购物车ID:维护发货地址:维护发货方式:点击Placeorder按钮生成订单:界面显示生成的订单ID:

  • photoshop常用图片处理技巧

    photoshop常用图片处理技巧photoshop是一款优秀的图像处理软件,作为前端开发工程师,掌握它的一些常用功能是必须的。photoshop的常用功能有:选择、裁剪图像、修图、取色、插入文字等等。除了这些常用功能,前端还需要掌握制作新图像、切图等技巧。本次讲解的photoshop版本为photoshopcc2019。 图片格式转换与压缩1、文件/存储为选择图片类型以及压缩比;(不推荐) 2、文件/存储为web所用格式选择图片类型以及压缩比(推荐); 图像放缩,平移1、放缩工具图像放大缩小,在图像上点击放大,按住alt键点击缩小,快捷键Ctrl+“+”放大Ctrl+“-”缩小,双击此工具可以让图像按照原始大小显示。 放大工具2、平移工具对图像进行移动,在使用其他工具时,按住空格键盘的空格键,可以切换到此工具,移动完后松开空格键回到原来的工具。双击此工具可以让图像放缩到显示区域完全显示。 平移工具新建图像执行菜单命令文件/新建可以新建一张图片,设置大小,颜色模式选RGB,网页图片一般选择72像素/英寸,如果图像要打印,可设为300/英寸。背景按情况选透明或白色。新建一张图片设置图片新

  • JAVA Calendar

    publicstaticinttimeCompare(Stringtime1,Stringtime2){        intresult=1;        DateFormatdf=newSimpleDateFormat("yyyy-MM-ddHH:mm");        Calendarc1=Calendar.getInstance();        Calendarc2=Calendar.getInstance();        try{            c1.setTime(df.parse(time1));            c2.setTime(df.parse(time2));        }catch(Exceptione){            System.out.println(e.getMessage());        }        result=c1.compareTo(c2);        returnresult;    }time1与time2对比,正值time1大-------------------

  • 为什么产品经理的工资不能够比程序员高?

    在我们IT界,程序员和产品经理简直就是一对冤家。在工作上天天互怼,互相不服气。其实导致这种现象出现的原因就是:产品经理把程序员当民工,程序员把产品经理当SB,其实是互相不了解罢了。今天,我们不聊程序员与产品经理工作上的爱恨情仇,因为我之前写过类似的文章了。今天我想聊得话题就是:为什么产品经理的工资不能够比程序员高?想写这个话题的原因是前一段时间有个读者留言,抱怨说:最近想离职了,感觉不受重视,公司新来的产品经理工资比我高,心里超级不爽。不知道大家遇到这种情况,有没有想到过离职这种年头?反正我认为大部分程序员正常的反应肯定都是:不服气,凭什么?都会多多少少产生离职的念头或者想法。要是前几年我遇到这种情况,我肯定也是这种反应,但是我现在不会这么想了。为什么呢?因为最近的工作有些杂,干了一些跟产品相关的,而且确实感觉产品经理很不容易。要负责的工作很多,很杂,确实很费自己的精力。产品经理的定义大概是这样的:产品经理就是以解决问题为核心,整合和管理各种人力、物力等资源,高效的将解决方案变成实际产品输出的领导者。——王淮,《打造Facebook》作者 产品经理就是在整个产品生产过程中,从功能策划到

  • 【vscode】安装与配置

    前言vscode是微软发布的一款轻量级文本编辑器。它不仅外观美丽,而且读取文件迅速,真正算的上是集美貌与才华于一身。配合海量的扩展插件,可以打造为一套完美的开发利器。本文便是介绍如何科学地安装并优雅地使用vscode。下载我们可以去vscode官网下载最新版的vscode,可以选择下载相关平台的安装包文件或者压缩文件,本人比较喜欢使用压缩文件直接解压,认为这样比较干净。下载vscode下载完成后会得到一个75M左右大小的压缩文件。下载的压缩文件安装下载完成后解压压缩文件到我们想要安装到的目录,这里我们解压到F:\ide\vscode。安装然后我们开始配置环境变量,将F:\ide\vscode\bin添加进Path环境变量。配置环境变量此时打开命令行,运行code-v,出现类似如下窗口说明安装成功。测试安装成功配置安装完成之后,我们需要对vscode进行一些配置,以使其更加易用。修改扩展安装路径打开vscode的安装目录,新建一个Code.exe的快捷方式。右键属性,切换到快捷方式选项,在目录一栏后面追加--extensions-dir"..\vscode_ext"文

  • 腾讯云主机安全安全基线检测列表

    本文档将为您介绍主机安全的安全基线检测列表。 注意: 安全基线在产品设置后,将即时生效。 Name Level Vul_type CouchDB未授权访问 高 配置不当 DockerDaemon 2375管理端口开启 高 远程代码执行 Elasticsearch未授权访问 高 配置不当 JavaRMI远程代码执行 高 远程代码执行 Jenkins未开启认证可导致命令执行 高 远程代码执行 Kubelet未授权访问 高 安全基线 Linux系统弱口令检测 高 远程代码执行 MongoDB未授权访问 高 配置不当 MySQL弱口令检测 高 弱口令 NFS错误配置导致可挂载敏感目录 高 配置不当 Redis基线合规检测 高 远程代码执行 RPCBind配置不当检测 高 安全基线 Rsync弱口令检测 高 弱口令 Rsync无密码访问 高 配置不当 Tomcat弱口令检测 高 弱口令 Windows用户弱口令检测 高 弱口令 Xampp默认FTP密码 高 信息泄露 网站目录存在备份文件 高 信

  • 二叉树(一): 遍历

    什么是二叉树 在计算机科学中,二叉树(英语:Binarytree)是每个节点最多只有两个分支(即不存在分支度大于2的节点)的树结构。通常分支被称作“左子树”或“右子树”。二叉树的分支具有左右次序,不能随意颠倒。 二叉树的第i层至多有2^{i-1}个结点; 深度为k的二叉树至多有2^k-1个结点; 对任何一棵二叉树T,若树叶总数为n_0,分支度为2的总数为n_2,则n_0=n_2+1。 一棵深度为k,且有2^k-1个节点称之为满二叉树; 深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中,序号为1至n的节点对应时,称之为完全二叉树。 特殊类型 完全二叉树 完美二叉树 总节点k 2^(h−1)<=k<=2^(h−1) k=2^h−1 树高h h=log2k+1 h=log2(k+1) 深度优先遍历 英文缩写为DFS即DepthFirstSearch。在深度优先级中,我们希望从根结点访问最远的结点。前序,中序和后序遍历都是深度优先遍历的特例。 先来看一张图,一眼了解这三种遍历: 作为前端,我是肯定先用JS来实现这些遍历的,

  • HDU 4803 Poor Warehouse Keeper(贪心)

    题目链接 题意:屏幕可以显示两个值,一个是数量x,一个是总价y。有两种操作,一种是加一次总价,变成x,1+y;一种是加一个数量,这要的话总价也会相应加上一个的价钱,变成x+1,y+y/x。总价显示的为取整后的整数,小数部分忽略。给定一个目标x,y,初始状态为1,1,求最少需要多少次可以目标状态,不可以达到的话输出-1. 思路:如果是加一次总价的话,单价就在变大;如果是加一次数量的话,单价是不变的。因此,单价只涨不降。物品的数量也必须从1变成x,也就是说至少要加x-1次单价才可以,那么如果单价过大s,s*(x+1)≥y+1肯定是不予许的。所以对于每一个i(数量)来说,单价都有一个上限值,以保证说在增加数量的时候不会导致总价溢出。 1#include<stdio.h> 2#include<string.h> 3#include<iostream> 4 5usingnamespacestd; 6 7constdoubleeps=1e-9; 8intmain() 9{ 10doublex,y; 11while(~scanf("%lf%lf",&x

  • Object 默认方法

      javaobject默认的基本方法中没有copy(),含有如下方法:getClass(),hashCode(),equals(),clone(),toString(),notify(),notifyAll(), wait(),finalize()

  • 使用Netcat进行攻击

    https://www.freebuf.com/column/135007.html   在网上找到了一个开启了ftp服务的服务: http://static.vhdong.com/Upload/Templates/ 扫描了一下是21端口  121.41.89.5 但是ftp的匿名访问并没有开启吧,连不上的   root@kali:/home/test#pingstatic.vhdong.com PINGstatic.vhdong.com(121.41.89.5)56(84)bytesofdata. 64bytesfrom121.41.89.5(121.41.89.5):icmp_seq=1ttl=115time=30.2ms 64bytesfrom121.41.89.5(121.41.89.5):icmp_seq=2ttl=115time=30.1ms ^C ---static.vhdong.compingstatistics--- 2packetstransmitted,2received,0%packetloss,time3ms rttm

  • linux中增加swap分区文件的步骤方法

    在编译php时提示内存不足,增加一些交换分区来解决,检查没有swap,下面就需要增加:判定新交换文件的大小,将大小乘以1024来判定块的大小。例如,大小为64MB的交换文件的块大小为65536,在shell提示下以根用户身份键入以下命令,其中的count等于想要的块大小。 ddif=/dev/zeroof=/home/swapbs=1024count=1024000 输出: 1024000+0recordsin 1024000+0recordsout 复制 使用以下命令来设置交换文件: mkswap/home/swap 复制 启用交换分区文件:要立即启用交换文件而不是在引导时自动启用,使用以下命令:  swapon/home/swap 复制 要在引导时启用,编辑/etc/fstab文件来包含以下行(/home/swap              swap      

  • sqlyong64位破解

    姓名(Name):cr173 序列号(Code):8d8120df-a5c3-4989-8f47-5afc79c56e7c 或者(OR) 姓名(Name):cr173 序列号(Code):59adfdfe-bcb0-4762-8267-d7fccf16beda 或者(OR) 姓名(Name):cr173 序列号(Code):ec38d297-0543-4679-b098-4baadf91f983 备  注:最好关闭软件的自动更新功能^_^

  • springboot修改控制台图案

    https://blog.csdn.net/stemq/article/details/53899690

  • XCTF web 新手练习区

    view_source F12查看源码就可以得到flag。 Robots 用御剑扫描后台,找到robots.txt robots.txt的内容。 打开f1ag_1s_h3re.php就可以看到flag。 backup 题目提示 打开index.php.bak。 会下载一个文件,将后缀名改为txt就可以打开。 打开来是index.php的源码。 找到flag。 cookie 打开burpsuite抓包,查看cookie。 Cookie:look-here=cookie.php 打开cookie.php 再次用burpsuite抓包,sendtorepeater。 在response里面看见flag。   disabled_button 题目给了我们一个不能按的按钮。 应该是js。 f12点选择元素,再选择button。   删掉disabled就可以点击了。 点击之后获得flag。 weak_auth 打开网页,是一个登陆界面。 随便输入一用户名和密码,提示用admin登陆。 用admin和随便一个密码登陆,我写的是123456,没想到

  • Dojo and Asynchronous Module Definition(AMD)

    TheJavaScriptdoingtheactualworkisthesameinboththeolderstyleofmoduleswithdojo.declareandthenewerAMDstyle. ThebigdifferencesbetweenlegacyandAMDmodulesarehowtheyaredefined(dojo.declare()vs.define())andhowtheyareloaded(dojo.require()vs.require()). legacy: <scripttype="text/javascript"> dojo.require("esri.map"); functioninit(){ varmyMap=newesri.Map("mapDiv"); //notethatifyoudonothavepublicInternetaccessthenyouwillneedtopointthisurltoyourownlocallyaccesiblecachedservice. varmyTiledMapServiceLa

  • 精神内耗

    1.什么是精神内耗? 身边遇到的大多人和事,都能引发体内思想的拉扯,打架,从而消耗自己的精神。 2.如何应对精神内耗? -把自己的事和他人的事剥离开。? -推翻负面情绪。 -学会接纳自己,正视自己的缺点,欣赏自己的优点。 3.在做事前默念这一句: 做事必须竭尽全力,投入的精力是影响成功概率的重要因素,但哪怕做不到也没关系,找到不足之处加以改正就行了。 Othercomments: 精神内耗这种心理问题主要是人际关系的缺陷。1.如果保持对外界的善意,对别人真诚的微笑,别人也会向你微笑。2.要主观认为这个世界会包容自己的缺点,即使是做错了什么事情,别人也不会嘲笑自己,他们也会给予爱与支持。这样就会轻松很多。本质就是自己看法的不同而引发的问题 给你一座金山,你能挖得动吗?如何避免进入精神内耗死循环?①,把自己的事和别人的事隔离开②充分认知并接纳自己的优缺点写出来,有能力改进,有缺点就改进,有能力发展优点就发展优点,无能为力的部分就接纳,发挥自己擅长的部分圣人都有不足之处,更何况咱普罗大众?③,让自己开心幸福起来:勇敢做自己喜欢的事通过和朋友聊天,看书,听音乐,独处,欣赏大自然,让自己保持乐

  • 同花顺笔试碰到的一道前端编程题

    题目要求:给出一个对象值,里面含有很多个子对象,每个字对象又分别含有name、score、time属性。最后要求设计一个方法,按时间从小到大排序输出每个分数大于60分的人的姓名和对应分数。 输入对象举例如下: { A:{ name:'aaa', score:60, time:'MonMay16201618:48:34GMT+0800(中国标准时间)' }, B:{ name:'bbb', score:50, time:'MonMay16201718:48:34GMT+0800(中国标准时间)' }, C:{ name:'ccc', score:90, time:'MonMay16201818:48:34GMT+0800(中国标准时间)' }, D:{ name:'ddd', score:80, time:'MonMay16201418:48:34GMT+0800(中国标准时间)' }, E:{ name:'eee', score:81, time:'MonMay15201418:48:34GMT+0800(中国标准时间)' }, F:{ name:'fff', score:81, t

  • 求因子个数

    #include<iostream> #include<cstdio> usingnamespacestd; longlongx; //使用公式 intf1(){ ints=1; longlongxx=x,i=2; intcount1=0,flg=0; while(xx>1) { if(xx%i==0){ xx=xx/i; count1++; }else{ i++; if(count1!=0)s=s*(1+count1); count1=0; } } if(count1!=0)s=s*(1+count1); returns; } intmain(){ while(cin>>x&&x!=0) { intpp=f1(); cout<<pp<<endl; } return0; }复制  

相关推荐

推荐阅读