相关文章推荐
失眠的荒野  ·  从 Git ...·  1 年前    · 
乖乖的弓箭  ·  C#HttpsPost两种方法_c# ...·  1 年前    · 

1.0、版本控制

什么是“版本控制”? 版本控制是一种记录一个或若干文件内容的变化,方便将来查阅特定版本修改情况的系统。

日常生活中,我们经常会存在对一个东西进行反复修改打磨的情况,但常常我们因为一个或多个修改的地方弄错了导致整个项目废掉(此时我们是希望能够回退到出错前的状态再开始打磨,而不希望从头开始);【但如果我们采用版本控制系统就可以将某个或多个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的正常状态,同时也可以对同一个文件进行比较差异,查出最后是谁修改了哪个地方,精准定位到问题,提高效率】。

1.0.1、本地版本控制系统

本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。最流行的一种叫做 RCS ,工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。

1.0.2、集中化的版本控制系统

集中化的版本控制系统以 Subversion(SVN) 最为出名,只有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。 多年以来,这已成为版本控制系统的标准做法。

①这种做法带来了许多好处,特别是相较于老式的本地 VCS 来说。 现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。 而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。

② 这么做最显而易见的 缺点是中央服务器的单点故障。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问您将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。 本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。

1.0.3、分布式版本控制系统

分布式版本控制系统(Distributed Version Control System,简称 DVCS ),在这类系统中,像 Git Mercurial Bazaar 以及 Darcs 等, 客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复 。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份 ,如下所示:

许多这类系统都可以指定和若干不同的远端代码仓库进行交互。藉此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。

1.1、Git介绍

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目; 同时Git也是个内容管理系统(CMS),工作管理系统等。

Git 是 林纳斯·托瓦兹(Linus Torvalds) 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同, 它采用了分布式版本库的方式,不必服务器端软件支持

Git 快速入门指南 https://www.runoob.com/manual/git-guide/ Git 完整命令手册 http://git-scm.com/docs

我们先来理解下 Git 工作区、暂存区和版本库概念:

  • 工作区: 就是你在电脑里能看到的目录。
  • 暂存区: 英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库: 工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:

  • 图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage/index),标记为 "master" 的是 master 分支所代表的目录树。

  • 图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

  • 图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

  • 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

  • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

  • 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

  • 当执行 git rm --cached <file> 命令时,会直接从暂存区删除文件,工作区则不做出改变。

  • 当执行 git checkout . 或者 git checkout -- <file> 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。

  • 当执行 git checkout HEAD . 或者 git checkout HEAD <file> 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

1.2、SVN介绍

Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统, 也就是说 Subversion 管理着随时间改变的数据 这些数据放置在一个中央资料档案库(repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。

SVN在 2000 年由 CollabNet Inc 开发,现在发展成为 Apache 软件基金会的一个项目,采用了分支管理系统。

SVN 的一些概念

  • repository(源代码库): 源代码统一存放的地方
  • Checkout(提取): 当你手上没有源代码的时候,你需要从repository checkout一份
  • Commit(提交): 当你已经修改了代码,你就需要Commit到repository
  • Update (更新): 当你已经Checkout了一份源代码, Update一下你就可以和Repository上的源代码同步,你手上的代码就会有最新的变更

日常开发过程其实就是这样的(假设你已经Checkout并且已经工作了几天):Update(获得最新的代码) -->作出自己的修改并调试成功 --> Commit(大家就可以看到你的修改了) 。

如果两个程序员同时修改了同一个文件呢, SVN 可以合并这两个程序员的改动,实际上SVN管理源代码是以行为单位的,就是说两个程序员只要不是修改了同一行程序,SVN都会自动合并两种修改。如果是同一行,SVN 会提示文件 Conflict, 冲突,需要手动确认。

1.3、Git与SVN的区别

  • 1、Git 是分布式的,SVN 不是 :这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。

  • 2、Git 把内容按元数据方式存储,而 SVN 是按文件: 所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。

  • 3、Git 分支和 SVN 的分支不同: 分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。

  • 4、Git 没有一个全局的版本号,而 SVN 有: 目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。

  • 5、Git 的内容完整性要优于 SVN: Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

二、GitLab介绍

2.1、GitLab介绍

GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务 ;可通过 Web 界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序\(Wall\)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用。

GitLab,GitHub和Bitbucket - 提供远程访问Git存储库的服务。 除了托管代码之外,这些服务还提供用来帮助管理软件开发生命周期的附加功能。 这些附加功能包括管理不同人之间的代码共享,错误跟踪,wiki空间和其他“社交编码”工具。

  • GitHub 是一项公开可用的免费服务,它要求所有代码(除非您有付费帐户)公开。 任何人都可以看到您推送给GitHub的代码并提供改进建议。 GitHub目前承载数以万计的开源项目的源代码。
  • GitLab 是一种类似github的服务,组织可以使用它来提供git存储库的内部管理。 它是一个自我托管的Git-repository管理系统,可以保持用户代码的私密性,并且可以轻松地部署代码的更改(让您可以完全控制您的存储库或项目,并允许您自己决定是公共还是私有)

2.2、GitLab特点

  • GitLab免费托管您的(私人)软件项目。
  • GitLab是管理Git存储库的Web平台。
  • GitLab提供免费的公共和私人存储库,问题跟踪和维基功能。
  • GitLab是Git之上的一个用户友好的Web界面层,它提高了使用Git的速度。
  • GitLab提供了自己的持续集成(CI)系统来管理项目,并提供用户界面以及GitLab的其他功能。

2.3、GitLab优点

  • GitLab提供了GitLab Community Edition版本,供用户在他们的代码所在的服务器上进行定位。
  • GitLab免费提供无限数量的私人和公共存储库。
  • 代码片段可以共享项目中的少量代码,而不是共享整个项目。

三、sourcetree 介绍

3.1、Sourcetree介绍

SourceTree 是 Windows 和Mac OS X 下免费的 Git 客户端,拥有可视化界面,容易上手操作。同时它也是Mercurial和Subversion版本控制系统工具。支持创建、提交、clone、push、pull 和merge等操作。

3.2、Sourcetree相关名称解释

  • 克隆(clone):从远程仓库URL加载创建一个与远程仓库一样的本地仓库

  • 提交(commit):将暂存文件上传到本地仓库(我们在Finder中对本地仓库做修改后一般都得先提交一次,再推送)

  • 检出(checkout):切换不同分支

  • 添加(add):添加文件到缓存区

  • 移除(remove):移除文件至缓存区

  • 暂存(git stash):保存工作现场

  • 重置(reset):回到最近添加(add)/提交(commit)状态

  • 合并(merge):将多个同名文件合并为一个文件,该文件包含多个同名文件的所有内容,相同内容抵消

  • 抓取(fetch):从远程仓库获取信息并同步至本地仓库

  • 拉取(pull):从远程仓库获取信息并同步至本地仓库,并且自动执行合并(merge)操作,即 pull=fetch+merge

  • 推送(push):将本地仓库同步至远程仓库,一般推送(push)前先拉取(pull)一次,确保一致

  • 分支(branch):创建/修改/删除分枝

  • 标签(tag):给项目增添标签

  • 工作流(Git Flow):团队工作时,每个人创建属于自己的分枝(branch),确定无误后提交到master分枝

  • 终端(terminal):可以输入git命令行

一、基础知识1.0、版本控制 什么是“版本控制”?版本控制是一种记录一个或若干文件内容的变化,方便将来查阅特定版本修改情况的系统。 日常生活中,我们经常会存在对一个东西进行反复修改打磨的情况,但常常我们因为一个或多个修改的地方弄错了导致整个项目废掉(此时我们是希望能够回退到出错前的状态再开始打磨,而不希望从头开始);【但如果我们采用版本控制系统就可以将某个或多个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的正常状态,同时也可以对同一个文件进行比较差异,查出最后是谁修改...
Git 有很多图形界面 工具 ( GUI ),比如 SourceTree Git hub Desktop、Tortoise Git 等。 SourceTree 是一个 Git 客户端管理 工具 ,适用于 Windows 和 Mac 系统。 SourceTree 简化了开发者与代码仓库之间的 Git 操作 方式,我们可以通过界面菜单很方便的处理 Git 操作 ,而不需要通过命令。 通过 SourceTree ,我们可以管理所有的 Git 库,无论是远程还是本地的。 SourceTree 支持 Bitbucket、 Git Hub 以及 Gitlab 等远程仓库。
Gitlab Explorer是一个 工具 ,可在 Gitlab 空间中 可视化 您的组,存储库,成员和活动。 这是我尝试进行的一个附带项目,尝试使用 , 和类的不同技术。 我发现它很有用,所以决定分享它。 它从 gitlab 帐户收集数据,并使用将其存储在浏览器中。 使用此 工具 ,您可以检查: 您的小组。 小组中的项目及其最后的活动。 您的小组和项目中的成员及其活动。 使用用户活动绘制图形。 由于所有内容都存储在浏览器中,因此,如果您想与某人共享数据,则可能需要将数据导出到某处以再次导入。 克隆存储库。 根据您的创建访问令牌。 您需要授予它对api , rea centos6/7 实验2G,生产4G 安装包下载(需要翻墙,不然下载很慢):https://packages. gitlab .com/ gitlab / gitlab -ce/packages/el/7/ gitlab -ce-13.3.8-ce.0.el7.x86_64.rpm 关闭防火墙 ce是社区版-开源的,ee是企业版 二、安装方式 第一种方法: 1、将下载rpm包放在opt目录下,执行如下命令 rpm -ivh gitlab -ce-10.8.2-ce.0.el7.x86_64 GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理 工具 ,并在此 基础 上搭建起来的web服务。 GitLab 由乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它由Ruby写成。后来,一些部分用Go语言重写,现今并在国内外大中型互联网公司广泛使用。 GIT 官方网站为了解决部分用户通过命令行对 git 工具 使用时的怨声载道的现象,因此推出了一个 GIT 可视化工具 Git Gui。下面就对 Git 官方自带的 可视化工具 Git Gui的使用进行 介绍 。 注:本文仅限Windows系统 二、 Git Git ...
我相信很多朋友在初次接触 Git 可能不太习惯,今天笔者就分享4款 Git 可视化工具 。 1 Git 简介 Git 是一个很强大的分布式版本管理 工具 ,最初由Linus Torvalds编写,主要用于 Linux 内核开发的版本控制 工具 。 学习 Git 首先要明白 Git 的分层结构,下面一张图基本就说明各层之间的关系。 Git 的工作总共分四层,其中三层是在自己本地也就是前面说的 git 仓库,包括了工作目录,暂存区和本地仓库,工作目录就是我们执行命令 git init时所在的地方,也就是我们执行一切文件 操作 的地方,暂存区和本地仓
Gitlab 用户在组中有五种权限:Guest、Reporter、Developer、Master、Owner Guest:可以创建issue、发表评论,不能读写版本库 Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限 Developer:可以克隆代码、开发、提交、push,RD可以赋予这个权限 Master:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心RD负责人可以赋予这个权限 Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目
GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理 工具 ,并在此 基础 上搭建起来的web服务。 GitLab 由乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它由Ruby写成。后来,一些部分用Go语言重写,现今并在国内外大中型互联网公司广泛使用。 git gitlab Git Hub的简单区别 git 是一种基于命令的版本控制系统,全命令 操作 ,没有 可视化 界面 gitlab 是一个基于 git 实现的在线代码仓库软件,提供web 可视化 管理界面,通常用于企业团队内部协
相较国外代码托管平台 gitlab ,咱们中国自己的代码托管平台有哪些优势?没有对比就没有伤害,相较于国外的 gitlab ,大家平时也接触 Git hub、 Git ee 这些开源场景的代码托管平台,他们对个人开发者友好,可以接触到很多优秀的开源项目。但对团队代码管理,光这些还不够,还需要考虑成本、速度、和其他研发 工具 打通等。在选型时,首先要明确你的使用场景,是想在开源社区里协作开发(通常是个人开发者),还是想要拥有私密的代码仓库(通常是企业团队)。 通常在企业、团队私有代码管理场景下使用,那么国外的 Gitlab ,国内的
牛奶咖啡13: 如果不是首次安装nginx;而是升级nginx;那么操作步骤为: ①编译nginx且带上SSL(启用https支持)模块功能【./configure --prefix=/opt/nginx --with-http_ssl_module】; ②执行编译指令【make】; ③进入当前运行的的Nginx目录【cd /opt/nginx/sbin】先停止nginx【./nginx -s stop】; ④进入编译好的nginx目录【cd /opt/nginx-1.24.0/objs/】将编译好的nginx文件覆盖指定原版本 【cp nginx /opt/nginx/sbin/】然后输入y确认覆盖 免费安全的内网穿透实现——Tailscale 牛奶咖啡13: tailscale是点对点链接私密性更强,必须在所有访问设备上安装,麻烦一些。而zerotier除了点对点,也可以配置路由,打通局域网内所有设备,可通过内网地址访问,但免费限制20台设备,可根据自身需要选择 免费安全的内网穿透实现——Tailscale Walking__Dead: 和Zerotier对比呢?这两个的优缺点 关于VS附加调试Unity引起Unity无响应问题解决办法 GXUST_Bird: 感谢,直接解决了我的困扰!!