返回顶部
首页 > 资讯 > 精选 >Git【入门】这一篇就够了
  • 808
分享到

Git【入门】这一篇就够了

2023-06-04 18:06:10 808人浏览 安东尼
摘要

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。除了项目,你可以对任何类型的文件进行版本控制。采用版本控制系统(VCS)是个明智的选择。 有了它就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。除了项目,你可以对任何类型的文件进行版本控制。

采用版本控制系统(VCS)是个明智的选择。 有了它就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。 使用版本控制系统就算你对项目删除、修改错误,这也没有关系,你也照样可以很容易地就恢复到原先的样子。但额外增加的工作量却微乎其微。

许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。 这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。而且不利于团队协作。为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。图片来源 git 官网。

Git【入门】这一篇就够了

其中最流行的一种叫做 RCS,现今许多计算机系统上都还看得到它的踪影。 甚至在流行的 Mac OS X 系统上安装了开发者工具包之后,也可以使用 rcs 命令。 它的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。

接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作? 于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。 诸如 CVS、Subversion(SVN) 以及 Perforce 等。集中化的版本控制系统是单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。如图(来源 Git 官网):

Git【入门】这一篇就够了

相对本地版本管理,集中化的版本控制每个人都可以在一定程度上看到项目中的其他人正在做些什么。 而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。

它也有如下诟病:

  1. 单点故障如果宕机,谁都无法提交更新,也就无法协同工作。 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。

  2. 需要联网为什么需要联网?集中化的版本控制系统 仓库集中在一台服务器,也就受到服务器网络环境的影响。

于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。 Git 就是典型的分布式版本控制。还有 MercurialBazaar 以及 Darcs 等。

客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。图片来源 Git 官网。

Git【入门】这一篇就够了

分布式版本控制系统的优势不单是不必联网这么简单,后面我们还会看到 Git 极其强大的分支管理等功能。

2002 年,linux 内核开源项目整个项目组启用一个专有的分布式版本控制系统 BiTKEeper 来管理和维护代码。到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。

集中式的缺点:集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快。

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

比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

  1. 和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库。

某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

Git的存储方式是 快照技术 ,而其他版本控制系统的存储基本上都是 增量存储。以下图片来自网络。

Git【入门】这一篇就够了

Git在每次 git add 即将内容添加到 缓存 时会进行一次快照,快照 就像给当时的整个目录及文件照了一张相,在任何时候通过快照就能将目录及文件恢复到发起快照点的状态。Git 是这样生成快照的,对于没有变化的文件,会生成一个引用指向原文件的位置以节省空间提高效率,对于变化了的文件则将整个文件存储。git每个版本存储的是一个快照。

Git【入门】这一篇就够了

所谓 增量存储 ,指的是除了第一个版本存储的是每个文件的完整内容,之后的版本存储的是每个文件相对于上一个版本对应文件的变化的内容。

Git 在未进行 commit 操作之前,存在三种状态:Untracked filesChanges not staged for commitChanges to be committed ,每种状态之间可以随意进行互相转换。了解这三种状态各自所对应的不同情况,能够帮助你方便有效的使用 Git 来管理项目。

在 Git 中,文件状态是个非常重要的概念。

为了更清楚的说明 文件状态 的概念,使用网络上三张图片。

  • 初始化一个项目,也就是将项目所在目录纳入Git的管理之下。假设项目目录为hello_world,初始化之后,在目录下新建README.txt文件,接着,使用“git status”查看文件状态,如图
Git【入门】这一篇就够了
  • 可以看到,Git友好的标示出README.txt为“Untracked files”,并且提示使用“git add...”的命令将文件包含到待提交清单中。按照提示,使用“git add README.txt”命令,然后,使用“git status”查看文件状态,如图:
Git【入门】这一篇就够了
  • 文件README.txt状态变成了“Changes to be committed”,也就是说README.txt在暂存区域生成了快照,等待被提交。正如Git所提示的那样,通过“git rm --cached README.txt”命令,可以将文件状态还原为未暂存状态,即回到“Untracked files”文件状态。现在,README.txt已经可以被提交到git目录中了,但是暂时不提交。打开README.txt,向其中加些内容,保存之后,用“git status”查看,返回如图信息:
Git【入门】这一篇就够了

可以看到,除了之前的“Changes to be committed”状态,现在又多了一条“Changes not staged for commit”状态,表明文件已经修改,但是还没有放入暂存区域,也就是没生成快照。如果现在进行commit操作,只是将修改之前的文件快照提交到了git目录,一定记住:只有暂存区域的文件(即:文件状态为“Changes to be committed”)才会被提交。正如提示,通过“git add README.txt”命令将已修改文件更新到暂存区域中,如果想撤销修改,可以使用“git checkout -- README.txt”命令。

  • Centos/RedHat 安装

$ yum install curl-devel expat-devel gettext-devel
openssl-devel zlib-devel

$ yum -y install git-core

$ git --versiongit version 1.7.1

Linux 的其他版本系统需要其他方式安装。

直接在官网下载。

Git【入门】这一篇就够了

另一种是在 GitHub ,搜索 GitHub for windows 项目。

  • 第一种:

新建一个存项目文件夹,在 git bash 执行 git init ,项目文件夹下出现 .git 的子目录。

  • 第二种

从远程代码仓库拉去一个现有的:git clone [url]  也可以自定义本地仓库名字 git clone [url] dirName

进入 Git 项目目录

cd /myProject

提交所有修改到暂存区

git add .

提交暂存区修改内容到本地仓库

git commit -m "提交描述"

推送到远程仓库

git push

现在就可以拉去 JavaPub 的远程仓库了。

  • 忽略文件配置:.gitignore 文件
  • 移除文件git rm filename(从暂存区移除,然后提交)
  • 查看文件状态git status

  • 推送到远程仓库:git push origin master 推送到远程 master 分支

  • 如果没有远程仓库,现在想让本地和远程仓库关联,如下命令添加:git remote add origin <server> ,比如我们要让本地的一个仓库和 Github 上创建的一个仓库关联可以这样 git remote add origin https://github.com/Rodert/test.git

现在就可以将项目推送到远程仓库了。

有时我们需要查询以前的提交历史,使用命令 git log

只看某人提交记录

git log --author=bob

有时你提交过代码之后,发现一个地方改错了,你下次提交时不想保留上一次的记录;或者你上一次的 commit message的描述有误,这时候你可以使用接下来的这个命令:git commit --amend

git commit --amend

取消上一步操作,如 git addgit commit 之后。

git reset filename

分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是默认的。在其他分支上进行开发,完成后再将它们合并到主分支上。

不同的版本或系统模块并行开发时,我们一般会单独建立一个分支进行开发,最后再合并到主分支。

  • 新建本地分支

git branch test

  • 切换到 test 分支

git checkout test

也可以合并上面俩步,git checkout -b feature_x

  • 切换到 master 分支

git checkout master

  • 合并分支 (可能有冲突)

git merge test

  • 把新建的分支删掉

git branch -d test

  • 另外,也可以把分支推送到远程仓库 git push <远程主机名> <本地分支名>:<远程分支名>

git push origin test:test

声明:参考来源互联网,有任何争议可以留言。站在前人的肩上,我们才能看的更远。

教程纯手打,致力于最实用教程,不需要什么奖励,只希望多多转发支持。

--结束END--

本文标题: Git【入门】这一篇就够了

本文链接: https://lsjlt.com/news/238881.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Git【入门】这一篇就够了
    版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。除了项目,你可以对任何类型的文件进行版本控制。采用版本控制系统(VCS)是个明智的选择。 有了它就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时...
    99+
    2023-06-04
  • Spring入门这一篇就够了
    前言前面已经学习了Struts2和Hibernate框架了。接下来学习的是Spring框架…本博文主要是引入Spring框架…Spring介绍Spring诞生:创建Spring的目的就是用来替代更加重量级的的企业级Java技术简化Java的...
    99+
    2023-06-02
  • Python爬虫入门这一篇就够了
    何谓爬虫 所谓爬虫,就是按照一定的规则,自动的从网络中抓取信息的程序或者脚本。万维网就像一个巨大的蜘蛛网,我们的爬虫就是上面的一个蜘蛛,不断的去抓取我们需要的信息。 爬虫三要素 抓取 分析 存储 基础的抓取操作 1、urllib 在Pyt...
    99+
    2023-01-31
    这一 爬虫 入门
  • Python:openpyxl这一篇就够了
    各位好,我是轩哥啊哈~ 本文展示如何使用 openpyxl 库在 Python 中使用 Excel 文件。openpyxl 是用于读取和写入 Excel 2010 xlsx / xlsm / xltx / xltm 文件的 Python 库...
    99+
    2023-08-31
    excel python pyqt pygame pip
  • Java-lambda表达式入门看这一篇就够了
    目录概述语法函数式接口方法引用构造器引用变量作用域处理lambda表达式 概述 Lambda表达式,也可称为闭包,是JDK8的新特性。Lambda 允许把函数作为一个方法的参数(函数...
    99+
    2024-04-02
  • MySQL看这一篇就够了
    No.1 数据库概念 什么是数据库? 数据库就是一种特殊的文件,内部存储着需要的数据 RDBMS 所谓关系数据库,是建立在关系模型基础的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据 SQL S...
    99+
    2024-04-02
  • 入门Java线程基础一篇就够了
    目录一、线程初步认识1、什么是线程2、Java本身就是多线程3、为什么要使用多线程4、线程的优先级5、线程的状态6、Daemon线程二、线程启动和终止1、构造线程2、什么是线程中断3...
    99+
    2024-04-02
  • java多线程从入门到精通看这篇就够了
    目录一.认识线程及线程的创建1.线程的概念2.线程的特性3.线程的创建方式<1>继承Thread类<2>实现Runnable接口<3>实现Call...
    99+
    2024-04-02
  • Redis是什么?看这一篇就够了
    本文由葡萄城技术团队编撰并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 引言 在Web应用发展的初期,那时关系型数据库受到了较为广泛的关注和应用,原因是因为那时候Web站点基本上访问和...
    99+
    2020-08-08
    Redis是什么?看这一篇就够了
  • Python中计时,看这一篇就够了
    计时对于了解程序的性能是很关键的部分。 本文讨论了Python 2和python 3中计时方法,并完成了一个通用的计时装饰器。 一、python2和python3的通用计时方法 由于python2和3里面的计时函数是不一样的,建议使用ti...
    99+
    2023-01-31
    这一 就够了 Python
  • Python eval() 函数看这一篇就够了
    目录一、语法和参数二、expression参数示例三、globals参数示例四、locals参数示例五、eval函数的危险之处六、eval()函数官方文档附eval()函数常见作用有...
    99+
    2024-04-02
  • FastJson使用详解这一篇就够了
    FastJson文章目录 第一章 FastJson使用详解这一篇就够了 第二章 FastJsonHttpMessageConverter 类的作用与使用详解 第三章 Jackson 使用详解 文章目录 FastJson文章目录前言...
    99+
    2023-08-20
    java 开发语言 json spring boot spring cloud
  • 狂神MyBatis教程完整版(看这一篇就够了)入门到精通
    MyBatis 环境 JDK1.8MySql8.0maven3.6IDEA SSM框架:配置文件 官方文档:https://mybatis.org/mybatis-3/zh/getting-start...
    99+
    2023-10-18
    mybatis java mysql 数据库 maven
  • MySQL入门阶段这一篇就够了-学习笔记(手敲1.5万字)
    前言 虽然在大一下学期,就已经接触到了MySQL,但是那个时候只是会用MySQL进行增删改查,在大三上学期,尝试投简历寻找实习时,对方公司对于程序员的MySQL水平有很高的要求,所以我开始系统化的学习MySQL。顺便将整理出的笔记逐步写入博...
    99+
    2023-08-18
    mysql 学习 数据库
  • Mybatis配置解析看这一篇就够了
    目录核心配置文件environments元素mappers元素Mapper文件Properties优化typeAliases优化生命周期和作用域总结核心配置文件 mybat...
    99+
    2024-04-02
  • C++内存管理看这一篇就够了
    目录1 内存分布图2 C语言和C++内存分配实现2.1 C语言实现2.2 C++实现new的原理delete的原理3 C语言和C++内存管理区别4 内存泄漏总结1 内存分布图 注...
    99+
    2024-04-02
  • ES学习看这一篇文章就够了
    第一章 ES简介 第1节 ES介绍 1234 1、Elasticsearch是一个基于Lucene的搜索服务器2、提供了一个分布式的全文搜索引擎,基于restful web接口3、Elasticsearch是用Java语言开发的,基于A...
    99+
    2023-09-01
    elasticsearch 大数据 学习 java
  • 学习shell,这一篇就够了(shell基础)
    目录 一、shell概述 二、shell脚本准备知识 三、条件判断 四、结尾 一、shell概述 1、什么是shell shell是一种命令语言,是为使用者提供操作界面的一种软件,软件可以接收...
    99+
    2023-09-25
    linux centos 运维 网络 服务器
  • mysql5.6升级到5.7(有这一篇就够了!!!)
    一、打开服务,找到mysql右键 属性 查看旧版本mysql路径 键盘按一下 win键 直接输入 服务 空格后回车。 查看mysql文件位置 二、将mysql5.7解压到新文件夹当中 百度云:...
    99+
    2023-09-08
    mysql 数据库
  • 数据库、MySQL与Python这一篇就够了
    数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。 我们也可以将数据存储在文件中,但是在文件中读写数据速度相...
    99+
    2023-10-27
    数据库 mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作