第01讲:Git安装及基本操作

news2024/11/17 16:03:37

一、什么是Git

版本控制系统(VCS)是将『什么时候、谁、对什么文件做了怎样的修改』这样的信息以版本的形式保存并进行管理的系统。

简单来说,版本控制系统会去记录它所管理的文件的『历史版本』。

版本控制系统 “不是网盘,而胜似网盘” :

  • 它和网盘的相同点在于:它可以位于局域网,或者是外网上的一台服务器上,你和你的小伙伴们可以在不同的地方、不同的电脑上,以它为 “中介、桥梁” 共享文件。
  • 它胜似网盘的地方在于:它能记录你和你的小伙伴们对文件修改的所以历史版本,并且你可以将你的文件恢复到你感兴趣的某个历史版本。

Git 并非唯一的版本控制系统,它的前辈是 Subversion 。2014 年 Git 的市场占有率首次超过 Subversion ,成为主流。

Git 相较于 Subversion 的先进之处在于:

  1. Subversion 中的版本信息仅存在于中央仓库,而 Git 中所有的本地库中都有完整的历史版本信息。

  2. Subversion 中的 “分支” 很重,创建分支、删除分支、合并分支等分支相关操作很慢,而 Git 中的分支很轻,分支操作是 Git 的拳头特性

二、Git的安装

最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑。不过,慢慢地有人把它移植到了Windows上。现在,Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行了。由于开发机大多数情况都是windows,所以本教程只讲解windows下的git的安装及使用

第1步:安装Git

下载Git

  • 官方下载地址:https://git-scm.com/download
  • 淘宝下载地址:https://npm.taobao.org/mirrors/git-for-windows/
    在这里插入图片描述
    在这里插入图片描述

初始化配置

打开Git命令界面,在使用 git 之前需要使用 config 命令配置下用户名和用户邮箱:

git config --global user.name "<用户名>"
git config --global user.email "<邮箱>"
git config --global push.default simple
git config --global core.editor notepad

在使用 git 之前创建 SSH Key,未来会使用到:

ssh-keygen -t rsa -b 4096 -C "备注"

# 一路回车

cat ~/.ssh/id_rsa.pub

『备注』通常是 2 种风格:

  • 邮箱
  • username@hostname,例如:tom@192.172.0.110

在这里插入图片描述

第2步:安装GitKraken

提前注册一个 github 的账号,后续要使用

GitKran 简介

GitKraken 是 Git 客户端界的后起之秀,它的出现打破了『SourceTree 最好用』的说法。不少 SourceTree 的用户从 SourceTree 上迁移到了 GitKraken 。

GitKranken 的特点在于,界面更简洁、友好,这样在保证功能不少的情况下,上手比 SourceTree 更快。

GitKranken 比 SourceTree 还有一个有优势之处:它跨平台,在 Linux 上可用。

不过,GitKraken 从 6.5.3 版本开始收费,它的最后一个免费版本是 6.5.1 ,当你使用收费版本而又未付费时,使用 GitKranken 将无法打开本地仓库,这就约等于无法使用了。

对于这个问题解决的办法自然就是破解:使用一个可免费试用的低版本,并且关闭它的自动升级功能

安装

百度自行下载6.5.1 的 GitKraken 安装程序,或者致信博主。

安装过程一路 Next,没有特殊之处。

提示:安装程序 GitKrakenSetup-6.5.1.exe 只用执行一次,不要反复点击、运行它。导致,后面 “update.exe 怎么删不掉?”

破解

理论上,安装 GitKraken 6.5.1 版之后直接使用就可以,但是,讨厌的是 GitKraken 会『自动升级』。一旦自动升级,你的 GitKraken 自然就不再是最后一个免费版 6.5.1 了。

GitKraken “做手脚” 的地方就在于:正常安装之后,你桌面生成的 GitKraken 的快捷方式链接到的是 GitKranken 安装程序的 update.exe!所以,你通过点击快捷方式运行GitKraken 时,它总会先检查服务器上是否有新版本可以升级!如果有,GitKraken 就会下载最新本版,自我更新。

所以,破解的关键在于:干掉 update.exe ,让 GitKraken 无法升级,定死再 6.5.1 版本

在安装 GitKraken 之后,在你的安装目录(C:\Users\<用户名>\AppData\Local\gitkraken)下会有一个名为 Update.exe 的可执行程序。
在这里插入图片描述

三、Git的基本操作

3.1、创建本地版本库

什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。由于git是分布式版本管理工具,所以git在不需要联网的情况下也具有完整的版本管理能力。

创建一个版本库非常简单。首先,选择一个合适的地方,创建一个空目录,在该文件夹中执行 git init,就可以让 Git 完成管理前的准备工作。

$ git init

执行成功后,你会看到类似如下信息:

Initialized empty Git repository in ...

Git 会在它管理的文件夹下创建名为 .git 的子文件夹,这个文件夹也就是逻辑上的『本地仓库』。它里面会存放被 Git 所管理的文件的相关信息(例如,历史版本)。

在这里插入图片描述

注意:你不要自己去操作 .git 目录,更不要随意将 .git 目录删除。这个目录下的内容是 Git 来使用和操作的。

当你执行完 git init 命令之后,当前目录就位于 Git 的监管范畴内,这个目录中的文件的变动(新创建的、被删除的、内容有更新的)都会被 Git 察觉。

3.2、Git 中文件的受管状态

Git 会将文件(文件夹)的状态分成以下 3 类:

状态说明
tracked被追踪tracked 状态意味着 Git 正在关注着这个文件。 你对这个文件的任何改动,都会被 Git 发现。Git 会进一步要求你提交你的改动,或撤销你的改动。
ignored被忽略的ignored 状态意味着 Git 完全不管这个文件,在 Git 看来它就跟不存在一样。
untracked不被追踪的untracked 状态是所有文件的初始状态。 逻辑上,它是 tracked 和 ignored 状态『之前』的一种状态,逻辑上,它是一种临时状态:你既没有要求 Git 监管它,又没有要求 Git 忽略它。 对于这个文件,Git 也是一脸懵逼不知道接下来该不该监测文件的变动,正因为如此,untracked 是一种临时状态,不应该长期存在。
注意
这里有 2 点需要强调的是:
    所有的文件的初始状态都是 untracked 。
    在正常情况下,文件不应该长期处于 untracked 状态,应尽快转变为 tracked 或 ignored 。

对于新创建的文件,它们都是处于 untracked 状态的,接下来它们应该尽快通过下述 2 种方法之一切换成 ignored 状态,或 tracked 状态。

untracked 
└──> ignored 

必须先在 Repo 文件夹中创建一个名为 .gitignore 的文件(必须是这个名字),
然后把要忽略的文件逐一列在这个文件中,一个文件一行,支持通配符。

windows上创建.gitignore文件:
  先任意创建一个文件,例如:1.txt
   在cmd中输入:ren 1.txt .gitignore

untracked 
└──> tracked 

可以使用 git add + git commit 命令,将它提交给 Git 监管即可。

3.3、新增一个文件的历史版本

git add + git commit 的作用简单来说,就是将一个文件的当前内容提交给 Git :

  • 对于 untracked 状态的文件(即新增的文件),提交后会变成 tracked 状态;
  • 对于 tracked 状态的文件(即原有的文件),其历史版本记录则会演进一步。
$ git add "readme.txt"
$ git commit -m "message"

对于一次『提交』而言,提交消息(message)是必须的 。否则,Git 会拒绝你的这次提交。

要新增『一次提交』之所以要同时使用 git addgit commit 是因为在将文件当前的内容添加成至本地仓库之前,要 将其添加至 暂存区git commit只会』将暂存区的文件的内容提交至本地仓库进行保存。

3.4、使用 Git 的核心思想:一致性

当你改动了工作区(硬盘上)的文件的内容之后,你可以使用 git status 命令查看文件的状态。你会看到类似如下信息:

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   新建文本文档.txt

Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。

什么是工作区(WorkingDirectory)

​ 工作区就是你在电脑里能看到的目录,比如我的temp文件夹就是一个工作区。有的同学可能会说temp不是版本库吗怎么是工作区了?其实temp目录是工作区,在这个目录中的“.git”隐藏文件夹才是版本库。这回概念清晰了吧。

​ Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

如下图所示:
在这里插入图片描述

分支和HEAD的概念我们稍后再讲。前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

这里除了能看到 Git 监控到的文件的变动 modified: 新建文本文档.txt 之外,在这条信息的上面,你还能看到 Git 为你给出的 2 条建议:接下来请使用 git add … 命令,或使用 git checkout – … 命令。

这两条建议的背后,体现出 Git 的一个核心『关注点』:Git 希望你能保持工作区和本地仓库的一致性

在初始状况下,工作区和本地仓库的内容是一致的,当你改动工作区的文件后,工作区和本地仓库的内容就不再一致了。

对于此情况,Git 希望你将它们重新『调整』成一致。

至于如何『调整』,有 2 种方案(这也就是 Git 对你给出的 2 条二选一的建议):

  1. 使用 git add <file>... 命令(及后续的 git commit 命令),将你对工作区的改动提交到本地仓库。这样,工作区和本地仓库将会重新一致。这也就意味着,本地仓库的版本将向前演进。
  2. 使用 git checkout -- <file>... 命令用本地仓库(的最新、最近版本)的内容覆盖你的工作区的内容。这样,工作区和本地仓库将会重新一致。这也就意味着,你的工作区的内容的变动将会被覆盖、舍弃。

你在使用 Git 对你的文件夹、进行版本控制的整个使用过程中,你的工作区和本地仓库的状态的一致性的变化状态将是如下情况:

一致 > 不一致 > 重新一致 > 不一致 > 重新一致 > … > 一致
在这里插入图片描述

3.5、.gitignore 文件

之前已经提到过,.gitignore 是用于屏蔽某些文件被纳入到 Git 管理范围下的配置文件。

简单来说,.gitignore 文件就是一个『黑名单』,在其中列举的文件都不会被 Git 管理,Git 不会关注这些文件的创建、删除、改动,也不会将它们存入到本地版本库,更不会将它们上传到远程仓库。

  • 创建 .gitignore 文件

    提示:.gitignore 文件必须叫 .gitignore ,一定不能错

    在 window 系统中,windows 不允许直接新建文件名以 . 开头的文件(Linux 不存在这个问题)。因为,Windows 会误以为 .gitignore 是文件的后缀,而你的文件是没有名字的!

    所以这种情况下,你需要 “动脑子” 创建。你可以在 git bash 中通过 touch 命令创建,也可以从别的项目中拷贝一个过来。

  • .gitignore 文件的基本语法

    ##:表示注释
    /:目录层级
    *:通配符
    

    例如:

    忽略所有后缀名为 log 的文件,无所谓文件名。无论它位于什么层次结构。

    *.log
    

    忽略『根目录』下的 target 文件夹

    /target/
    

    这里最后的 / 非必须。不过个人建议还是加上,因为可以暗示出它是一个文件夹。

    忽略所有名为 target 的文件夹。无论它位于什么层次结构中。

    target/
    

    补充

    .gitignore 文件中有一个 ! 表示的 “非” 的规则,对于它的使用相较而言比较复杂,暂时不要求掌握。

注意事项

  • .gitignore 配置文件的根目录就是当前 Git 工程目录。.gitignore` 配置只对当前 Git 工程有效。

  • 在配置语句的前后面添加空格、Tab、注释等,会导致当前行的配置语句失效。所以,不要添加非必要的空白符。

  • 配置语句对已经 add、commit 的文件无效。

gitignore 模板

HELP.md
target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/

### VS Code ###
.vscode/

3.6、取出历史版本

从本地版本库中取出文件只需要一个指令:

git checkout [ 版本标识 | 标签 ] <文件1>, <文件2>, ...

需要特别提醒的是,磁盘文件夹中的文件会被取出的文件『覆盖』(覆盖、覆盖),因此你对该文件作出的修改会丢失。

  • 例如,本地版本库中的文件是 80 行的,你本地的文件被你改成 100 行(但未提交),执行 git checkout 之后,你的本地文件会变成 80 行。

3.7、从 git 中删除文件

git rm 用于删除文件,删除行为分为『弱删除』和『强删除』。

  • git rm --cache :『弱』删除

    它表示让 Git『不再监管』某文件/文件夹,而该文件/文件夹在磁盘上『仍存在』。

  • git rm :强删除

    它表示告知 Git『不再监管』某文件/文件夹的同时,还从硬盘上『删除』此文件/文件夹。

3.8、撤销操作

git reset ,使用图形界面完成

3.9、比较文件差异

git diff,使用图形界面完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux常用命令(一)-路径切换及查看

切换路径-cd 我们可以使用cd&#xff08;change directory&#xff0c;切换目录&#xff09;的命令来进行目录切换 常规 其命令格式为 cd [相对路径或绝对路径] 例如&#xff1a; // 使用相对路径&#xff0c;切换到postfix目录下 cd ../postfix// 使用绝对路径切换到/var/…

Linux操作系统实验1——地址转换

实验要求&#xff1a; 1.在内核中先申请一个页面&#xff0c;使用内核提供的函数&#xff0c;按照寻页的步骤一步步的找到物理地址。这些步骤就相当于我们手动的模拟了mmu的寻页过程。(paging_lowmem.c) 2.通过mmap将物理内存的数据映射到一个设备文件中。 通过访问该设备就可以…

美图商业化2.0:探寻多元增长曲线

【潮汐商业评论/原创】 数字化智能化浪潮正席卷而来。与此前的工业革命、信息技术革命一样&#xff0c;这场箭在弦上的“数智化革命”核心也在于技术的突破与应用。 今年以来&#xff0c;AIGC作为AI技术在内容生产领域的应用&#xff0c;迎来了全球大厂的争相布局&#xff0c…

tensorflow2.x多层感知机模型参数量和计算量的统计

当创建了一个多层感知机模型后&#xff0c;如何调用接口获取该模型的参数量和计算量&#xff1f;首先&#xff0c;打印出模型结构&#xff0c;可通过graphviz模块实现 # 加载模型 model keras.models.load_model(modelPath) tf.keras.utils.plot_model(model, to_filemodel.p…

linux ubuntu 如何自动定时备份数据库到服务器 mysql mysqldump cron

linux ubuntu 如何自动定时备份数据库到服务器 mysql mysqldump cron 一、需求描述 我有一个小日记应用&#xff0c;从 2019 年到 2022 年已经出现了两次比较严重的数据丢失的情况&#xff0c;一次是服务器错误&#xff0c;一次是人为。 所以我急切需要它能自己自动备份数据库…

基于servlet+jsp+mysql实现的java web校园车辆管理系统

一、项目简介 本项目是一套基于servletjspmysql实现的java web校园车辆管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严…

WebDAV之葫芦儿·派盘+Orgzly

Orgzly 支持WebDAV方式连接葫芦儿派盘。 给大家推荐一款Android 上的笔记与 todo 待办事项相融合的应用,它通过树形结构来记录笔记,并且只需要对笔记进行 TODO 标记就能变身任务管理,十分方便。 Orgzly是一款多功能的应用,更确切地说,它是一款 org 文件编辑器。Org 和 …

ArcGIS基础实验操作100例--实验12以线要素分割面要素(二)

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验12 以线要素分割面要素&#xff08;二&#xff09; 目录 一、实验背景 二、实验数据 …

C++ | 缺省参数

啊我摔倒了..有没有人扶我起来学习.... &#x1f471;个人主页&#xff1a;《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ &#x1f492;个人社区&#xff1a;《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

UDS - 10.2 DiagnosticSessionControl (10) service

来自&#xff1a;ISO 14229-1-2020.pdf 10.2.1 服务描述 DiagnosticSessionControl服务用于在服务器中启用不同的诊断会话。 诊断会话启用服务器中的一组特定诊断服务和/或功能。该服务提供了服务器可以报告数据链路层特定参数值的能力&#xff0c;这些参数值对于已启用的诊断…

Python语言快速入门下1

目录 一、函数 【函数定义与调用】 【形参与实参】 【return语句】 【变量作用域】 【可变长度参数】 二、lambda表达式 三、案例 【例题1】 【例题2】 【例题3】 【例题4】 【例题5】 一、函数 【函数定义与调用】 【例子】一个穷小子想娶富家之女&#xff0c;她…

【正点原子FPGA连载】第四章开发环境搭建摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第四章开发环境搭…

HPA与VPA

写在前面 语雀原文阅读效果更佳&#xff1a; 6、HPA与VPA 语雀 《6、HPA与VPA》 HPA与VPA 1、HPA 在前面的学习中我们使用了一个 kubectl scale 命令可以来实现 Pod 的扩缩容功能&#xff0c;但是这个是完全手动操作的&#xff0c;要应对线上的各种复杂情况&#xff0c;我…

ELK收集交换机日志

1、环境介绍 交换机&#xff1a;华为、思科、H3C Elasticsearch版本&#xff1a;7.13.3 kibana版本&#xff1a;v 7.13.3 logstash版本&#xff1a;7.17.8 2、ES集群配置 参考&#xff1a; https://blog.csdn.net/zyj81092211/article/details/118935274 3、kibana配置 参考 …

实战 | 使用图像处理改善OCR结果(详细步骤 + 源码)

导 读 本文主要介绍一个通过图像处理改善OCR识别结果的实例,并给出详细步骤和源码。 背景介绍 在很多情况下,文字识别会遇到困难。比如非单一的背景、杂讯干扰、文字部分缺失等。如下图所示: 我们希望识别图中的黑色文字(12-14),但背景较复杂且存在其他干扰,如果直接…

rabbitmq基础8——持久化、存储机制、ETS、队列结构、消息状态、内存告警、磁盘告警

文章目录一、持久化1.1 持久化对象1.1.1 交换器持久化1.1.2 队列持久化1.1.3 消息持久化1.2 总结要点二、存储机制2.1 存储方式2.2 存储文件2.2.1 队列索引.idx文件2.2.2 消息存储.rdq文件2.2.3 垃圾回收机制&#xff08;文件合并&#xff09;2.3 存储原理2.3.1 生产者消息写入…

基于图形化界面的方式创建vue2项目

前提是安装vue-cli npm i -g vue/cli 接下来使用vue ui 创建vue项目 vue ui 浏览器自动打开 点击创建&#xff0c;然后去到你想把创建的项目放到的位置 如果到不了那个位置&#xff0c;就window E 打开打开文件夹去到那个位置&#xff0c;之后再在文件夹的搜索中输入cmd打开命…

某农业学校 算法设计与分析-第7次实验综合

寻找数组中的第k小元素 【问题描述】给定一个长度为n的整数数组nums和整数k&#xff0c;输出数组中的第k小元素。要求不能对数组排序&#xff0c;使用分治的思想求解。 【输入形式】输入的第1行中有1个数字n&#xff0c;表示数组的长度&#xff1b;第2行中有n个数字&#xff0c…

Qt+C++ TCP发送接收信息客户端与服务端窗体

程序示例精选 QtC TCP发送接收信息客户端与服务端窗体 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC TCP发送接收信息客户端与服务端窗体>>编写代码&#xff0c;代码整洁&am…

Linux常用基本指令详解

各位看客在看本期博客之前请放轻松心态&#xff0c;以免内容过长造成不适~ 目录 1. ls指令 1.1 ls指令的作用 1.2 ls常用的指令选项 2. pwd指令 3. cd指令 3.1 cd .. 3.2 cd 文件路径 3.3 cd ~ 3.4 cd - 4.热键Tab 4.1 使用Tab键进行命令的自动补齐 4.2 使用Tab键进行查看…