对于git功能的探索与研究

读前提示

注意:
本文只是面向初学者或者之前并未接触过git而想学习如何初步使用git的读者,如果您很擅长使用git,并善于维护远程仓库,那么不建议您看此篇文章,这会浪费您的时间。
当然,这篇文章还是能很好地告诉初学者如何简单的运用git的,比如三板斧这种简单的操作。
当然,看完这篇文章,还需要多多练习,才能熟练的使用这些命令行。
话不多说,我们直接开始。

文末附有相关参考链接。

前言

前几天上课的时候,老师说git的功能很多,有兴趣可以研究研究,今天趁着有时间,就来探索一番。

简介

git是什么

Git是一个开源分布式版本控制系统(VCS),可用于对代码版本的控制、分支管理等。 是LinusTorvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
并且,Git还是目前世界上最流行的分布式版本控制系统

Torvalds 开始着手自己开发 Git 是为了作为一种过渡方案来替代 BitKeeper(因为BitKeeper向他要钱)

使用git的好处

写代码是需要多人协作的,修改是不可避免的,然而我们既不希望因为多次修改而产生过多的文件,又希望能记录每次更改的内容。
所以,使用git就可以满足我们的需求。

一些注解:

版本控制系统:

因为项目是在不断地迭代开发的,所以就需要一个控制系统来记录某些代码是哪个版本的,这样在出问题时,方便去修补
版本控制系统可以理解为一个”数据库“,他会显示出当前版本与上一版本之间所有改动的细节。

git与svn

二者都是版本控制系统,下面就介绍一下二者各自的优劣

SVN

SVN是集中式的版本控制系统,它以一个服务器作为大本营,所有的代码提交到服务器进行统一的管理。当需要对代码进行改动时,需要先从服务器上下载一份拷贝,修改完成后,还需要上传回服务器。如图:
在这里插入图片描述注意:
虽然在这个控制系统下,代码的一致性非常高,一对多的模式使管理员能轻松控制每个开发者的权限。
但,集中式版本控制系统是需要联网才能工作的,具有一定的局限性,且不适合人数较大的项目开发。

GIT

结构如图:
在这里插入图片描述
优点:
不需要联网就能进行修改。因为版本都是在自己的电脑上,随时都可以将所做的修改提交到本地仓库,然后将本地版本仓库推送到远程版本仓库进行合并。
缺点:
GIT的缺点可能就是:难学,不好懂,精通要花很长时间(捂脸)。

下载与安装

多提一句:64位的机器就下64位的,32位的机器就下32位的。
git下载官网

过程图解:
此处的“only show …”要勾上,然后就一直点下一步即可。
在这里插入图片描述

这里勾选上第一个选项“Launch …”
在这里插入图片描述
安装完之后,右击鼠标能看到下面两个图标
在这里插入图片描述
我们一般使用后者,也就是Git Bash Here
即通过命令行的方式使用Git,点开后如图:
在这里插入图片描述

Git的使用:

开始

如果你是第一次使用Git的话,需要先创建一个新的目录。
可以创建多个,并且可以创建在不同的文件夹里。

mkdir test//创建一个目录名为test的目录
git init//初始化这个目录,让Git开始对这个目录进行版本控制

设置用户名和邮箱

因为Git是分布式版本控制系统,所以每个分支都要有自己的名字和邮箱,所以下载完后的第一步就是设置邮箱和地址。
格式如下:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

第一行:设置用户名,即在绿色部分输入你自己设置的用户名。
第二行:设置邮箱地址

提示:

git init这个命令会在之前创建的目录中创建一个名为.git的隐藏目录,并在其中创建一个版本库。该目录是隐藏文件,点击查看->显示隐藏目录,就能看到了,这个目录还是挺重要的,之后会详细讲解。

设置完之后,有的同学想检查一下自己设置是否成功,在此介绍两种方式

1.使用命令行

检查已有的配置信息(包含用户名和邮箱地址),使用 git config --list 命令:

git config --list

然后在图中能看到相应的用户名和邮箱地址。
在这里插入图片描述
(此处我把邮箱地址打上了码,正常情况下是会显示的)

2.找到对应文件

在这里插入图片描述
选择用写字板打开后,可以看到,name处就是自己设置的用户名,email处就是邮箱地址。
在这里插入图片描述
提示:
如果不想使用命令行,在此处直接修改用户名和邮箱地址也是可以的。

文件的状态

在学习完如何简单的使用Git后,我们来了解一下文件的状态,如图:
在这里插入图片描述
此处我们选择两个进行详细介绍。

untracked:未跟踪

未跟踪,即文件在文件夹中,但没有加入到git库中,不参与版本控制。
可通过git add 使其状态变为Staged

tracked已跟踪

被纳入版本控制,分三种状态:

1.unmodified

文件入库、未修改,被修改后变为modified

2.modified

文件已修改,可通过git add进入staged状态,或通过git checkout丢弃修改,而返回到unmodified状态

3.staged

暂存状态,可通过git commit可将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为unmodified状态,或通过git reset HEAD filename 取消暂存,使文件状态变为modified

一些帮助理解的图
在这里插入图片描述

查看文件状态的命令

可使用

git status

如图:

在这里插入图片描述
(真的好掉画质,不知道大家能不能看清我写的字……)

git status -s

这样就只显示未提交的文件

文件加入暂存区

加入与取消命令

加入:

git add

取消:

git rest 文件名
//或使用
git rm -- 文件名
//二者等价

细致的区别

git rm – cached是从stage(index,暂存区)里面删除文件,当你提交(commit)之后文件就会删除了。

git reset HEAD – file:回退暂存区里的文件(还原为HEADcommit里面该文件的状态),会撒销从上一次提交(commit)之后的一些操作。如果是对于新增文件,这两个操作是等效的。

git rm – cached作用:对于缓存来说,这个命令是从索引里删除文件。如果要删除的文件已经在仓库里了,git rm – cached将会从索引里删除该文件,但本地工作目录还会保存源代码,提交之后将会同时从仓库里删除该文件。
而git reset HEAD file(命令默认参数为–mixed)不同于文件已经在仓库中,该命令的作用是用repo(HEAD)替换index中file的版本,使file的版本回退到HEAD版本

操作过程如图
添加(加入):
在这里插入图片描述

取消:
在这里插入图片描述

文件提交与删除(关键的一步)

关系图:
在这里插入图片描述

文件的提交

git commit -m ‘提交的信息’

参数m:
·-m:本次提交做了什么事,只要简单、清楚的文本说明即可,中英文都可以,重点是说清楚,能让自己和别人很快明白就行。
如果不加m参数,会进入类似vim编辑。

如果不小心忘记输入-m
会进入如下界面:

在这里插入图片描述

此时可以按Esc然后输入
:wq!
即可回到刚才的页面
在这里插入图片描述

如果正确提交后,再查看目录,会是如下画横线的显示
在这里插入图片描述

补充说明

下面补充一些vim的命令

:q //退出

:q! //退出且不保存(:quit!的缩写)

:wq //保存并退出

:wq! //保存并退出即使文件没有写入权限(强制保存退出)

:x //保存并退出(类似:wq,但是只有在有更改的情况下才保存)

:exit //保存并退出(和:x相同)

:qa //退出所有(:quitall的缩写)

:cq //退出且不保存(即便有错误)

文件的删除

git rm 文件名

提示;
删除文件,只是删除工作目录中的文件,在版本库中文件还是存在的。删除文件会直接把这个文件放入暂存区。

恢复已被删除的文件/目录

先使用rm命令,删除项目中所有的html文件

rm *.html
ls -al

再使用git checkout命令:

git checkout index.html

提示:
需先将文件提交到暂存区/版本库里,才能使用rm和checkout 命令,不然本次删除是和git无关的
也就是说需要先使用add/commit命令

注意:

当使用git checkout命令时,Git会切换到指定的分支。
但如果后面接的是文件名或路径,Git则不会切换分支,而是把文件从.git目录中复制一份到当前的工作目录。更精准地说,这个命令会把暂存区中的内容或文件拿来覆盖工作目录中。

文件的忽略

为什么要忽略

一般我们总会有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以在工作目录中创建一个名为.gitignore的文件(文件名称固定),列出要忽略的文件模式。

忽略规则

此处以一个目录名为public的目录和文件名为class的文件举例

/ 表示:当前文件所在目录

忽略pubilc下的所有目录的文件
/public/*

不忽略/public/class. 这个特例的文件,意思就是class这个文件不忽略:
!/public/class

忽略具体的文件:
index.class

忽略所有的class 文件:
*.class

忽略 a.class 和 b.class这两个文件 :
[ab].class

注意:

匹配规则和linux文件匹配一样 ·
以斜杠"/“开头表示目录
以星号“*”通配多个字符
以问号”?“通配单个字符
以方括号”[]“包含单个字符的匹配列表
以叹号”!"表示不忽略(跟踪)匹配到的文件或目录

忽略步骤

a 创建.ignore文件

两种方式:
1.直接相应文件夹里创建
2.使用touch命令
touch .ignore

b 在.ignore文件内部编写规则

此处的编写可以参考上文的编写规则。

日志的操作和使用

查看日志

git log

细节

a、 上一页 按空格

b、 下一页 按b

c、 退出 按q

d、 不分页 输入命令:
git --no-paper log

参数:

–graph 查看分支合并图

–oneline 标记把每一个提交压缩到一行中

远程仓库!

我们前面介绍过了,文件从工作区经过add命令提交到暂存区中,再通过commit命令提交到本地仓库。
在这里插入图片描述

但是,日常生活中编写代码,大多是多人协作的方式,所以将代码提交到远程仓库,会更方便。

常用的Git代码托管平台

推荐一些托管平台,我也会在后面写出他们的区别,大家可自行选择。
1.GitHub
点击此处跳转至网页
2.Gitee
点击此处跳转至网页
3.GitLab
点击此处跳转至网页

github和gitee的区别:

GitHub是全英文并且用户基数多,知名的库也多,但在国内访问Github偶尔会有不稳定情况
Gitee全是中文,而且大部分用户都是国人,优秀的库相对于GitHub也少,但Gitee不会出现不稳定情况。

GitHub GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。

GitHub 于 2008 年 4 月 10 日正式上线,除了 Git 代码仓库托管及基本的 Web
管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过
350 万,托管版本数量也是非常之多,其中不乏知名开源项目 Ruby on Rails、jQuery、python 等。

Gitee Gitee 提供免费的 Git 仓库,还集成了代码质量检测、项目演示等功能。对于团队协作开发,Gitee
还提供了项目管理、代码托管、文档管理的服务,5 人以下小团队免费。

我个人使用的是gitee,大家选择什么就根据自己喜好和需求去选择吧~

使用步骤

注册和使用步骤可以上b站或者其他的平台自行搜索,或者看我文章底部贴上的视频链接
下文只是简单介绍

这里大致说一下:
第一步创建代码仓库(仓库的名称、仓库的简介、提交代码的邮箱等等)

第二步上传自己的代码托管到远程仓库

一张有点用处但不多的图:

在这里插入图片描述

创建远程仓库

将远程仓库与本地仓库建立联系:
使用命令:

git remote add shortname ur1

shortname:远程仓库的名字(自定义)
ur1:远程仓库的地址

查看远程仓库

如果想查看已经配置的远程仓库服务器,可以运行git remote命令。
它会列出指定的每一个远程服务器的简写。如果已经克隆了远程仓库,那么至少应该能看到origin,这是Git克隆的仓库服务器的默认名。

语法命令:
有两种方式

  git remote 

注意,该仓库必须和仓库有联系才可以

  git remote -v 

-v列出详细信息verbose

克隆远程仓库

如果你想获得一份已经存在了的Git仓库的拷贝,这时就要用到gitclone命令。
Git克隆的是该Git仓库服务上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件。当你执行gitclone命令的时候,默认配置下远程Git仓库中的每一个文件的每一个版本都将被拉取下来。

语法结构:

  git  clone 远程仓库地址ur1 

要记住自己的用户名和密码

移除无效的远程仓库

语法命令:

git remote rm 远程仓库名字

注意:
此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库

结语

好啦,本文到此就结束了,很感谢您能看完这篇又长又有些枯燥的文章,希望您能有所收获,我们下次见~

参考资料/视频

本文参考视频

【gitee(码云)的注册和代码提交【手把手】-哔哩哔哩】

【『教程』一看就懂!Github基础教程-哔哩哔哩】

【第14讲 Git GitLab 简介使用-哔哩哔哩】

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WinForm内嵌Unity3D

Unity3D可以C#脚本进行开,使用vstu2013.msi插件,可以实现在VS2013中的调试。在开发完成后,由于项目需要,需要将Unity3D嵌入到WinForm中。WinForm中的UnityWebPlayer Control可以载入Unity3D。先看效果图。 一、为了能够动态设置ax…

用chatGPT从左右眼图片生成点云数据

左右眼图片 需求 需要将左右眼图像利用视差生成三维点云数据 先问问chatGPT相关知识 进一步问有没有现成的软件 chatGPT提到了OpenCV,我们让chatGPT用OpenCV写一个程序来做这个事情 当然,代码里面会有一些错误,chatGPT写的代码并不会做模…

并发编程--------JUC集合

并发集合 一、ConcurrentHashMap 1.1 存储结构 ConcurrentHashMap是线程安全的HashMap ConcurrentHashMap在JDK1.8中是以CASsynchronized实现的线程安全 CAS:在没有hash冲突时(Node要放在数组上时) synchronized:在出现hash…

案例12 Spring MVC入门案例

网页输入http://localhost:8080/hello&#xff0c;浏览器展示“Hello Spring MVC”。 1. 创建项目 选择Maven快速构建web项目&#xff0c;项目名称为case12-springmvc01。 2.配置Maven依赖 <?xml version"1.0" encoding"UTF-8"?><project xm…

Nacos AP架构集群搭建(Windows)

手写SpringCloud项目地址&#xff0c;求个star github:https://github.com/huangjianguo2000/spring-cloud-lightweight gitee:https://gitee.com/huangjianguo2000/spring-cloud-lightweigh 目录&#xff1a; 一&#xff1a;初始化MySQL 二&#xff1a;复制粘贴三份Nacos文…

vue2 封装 webSocket 开箱即用

第一步&#xff1a; 下载 webSocket npm install vue-native-websocket --save 第二步&#xff1a; 需要在 main.js 中 引入 import websocket from vue-native-websocket; Vue.use(websocket, , {connectManually: true, // 手动连接format: json, // json格式reconnection:…

【网络编程】万字详解||一个简单TCP服务器(TCP、线程池、守护进程)源码+介绍

TCP服务器 锁&#xff1a;Lock.hpp代码介绍 守护进程&#xff1a;daemonize.hpp代码说明 日志文件&#xff1a;log.hpp代码说明 任务处理 Task.hpp代码说明 线程池 ThreadPool.hpp代码说明 客户端 TCPClient.cc代码说明 服务器 TCPServer.cc代码说明 头文件包 util.hpp代码 Mak…

从源码层面深度剖析Spring循环依赖 | 京东云技术团队

以下举例皆针对单例模式讨论 图解参考 https://www.processon.com/view/link/60e3b0ae0e3e74200e2478ce 1、Spring 如何创建Bean&#xff1f; 对于单例Bean来说&#xff0c;在Spring容器整个生命周期内&#xff0c;有且只有一个对象。 Spring 在创建 Bean 过程中&#xff0…

Python Opencv实践 - 图像平移

import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR)#图像平移 #cv.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) # M是仿射变换矩阵&#xff0c;对于平移来说M是一…

如何撰写一份清晰有效的说明文档

如何撰写一份清晰有效的说明文档 文章目录 导语1.明确读者群体&#xff1a;2.明确文档目的&#xff1a;3.提供清晰的结构&#xff1a;4.使用简洁明了的语言&#xff1a;5.提供具体的示例&#xff1a;6.注意文档格式和风格&#xff1a;7.接受反馈并更新文档&#xff1a;结语 导语…

如何使用Markdown编辑器?详细做法

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

原生JS手写扫雷小游戏

场景 实现一个完整的扫雷游戏需要一些复杂的逻辑和界面交互。我将为你提供一个简化版的扫雷游戏示例&#xff0c;帮助你入门。请注意&#xff0c;这只是一个基本示例&#xff0c;你可以根据自己的需求进行扩展和改进。 思路 创建游戏板&#xff08;Grid&#xff09;&#xff1…

网络基础——网络的由来与发展史

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、网络的由来 二、计算机网络的发展史 1、第一阶段 2、第二阶段 3、第三阶段 前言 每天都是使用网络&#xff0c;那么你知道网络…

StringBuilder的基本操作

1、为什么要学习StringBuilder? 1.1、String拼接100万次 String对象做字符串拼接&#xff0c;字符串直接拼接100万次&#xff0c;运行速度非常非常的慢&#xff0c;当数据量比较大的时候&#xff0c;一般不用字符串直接拼接 package stringdemo;public class StringTest {publ…

Spring Boot 项目应用消息服务器RabbitMQ(简单介绍)

一、背景 本章讲述的是在用户下单环节&#xff0c;消息服务器RabbitMQ 的应用 1.1 消息服务器的应用 在写一个电商项目的小demo&#xff0c;在电商项目中&#xff0c;消息服务器的应用&#xff1a; 1、订单状态通知&#xff1a;当用户下单、支付成功、订单发货、订单完成等…

SpringBoot3集成Quartz

标签&#xff1a;Quartz.Job.Scheduler&#xff1b; 一、简介 Quartz由Java编写的功能丰富的开源作业调度框架&#xff0c;可以集成到几乎任何Java应用程序中&#xff0c;并且能够创建多个作业调度&#xff1b; 在实际的业务中&#xff0c;有很多场景依赖定时任务&#xff0c…

谈谈什么是云计算?以及它的应用

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 ​编辑 一、什么是云计算 二、云计算的优势与劣势&#xff1f; 1、云计算的优势 ①提高资源利用率 ②提升效率 ③降低成本 2、云…

opencv带GStreamer之Windows编译

目录 1、下载GStreamer和安装2. GSTReamer CMake配置3. 验证是否配置成功 1、下载GStreamer和安装 下载地址如下&#xff1a; gstreamer-1.0-msvc-x86_64-1.18.2.msi gstreamer-1.0-devel-msvc-x86_64-1.18.2.msi 安装目录无要求&#xff0c;主要是安装完设置环境变量 xxx\1…

【java面向对象中static关键字】

提纲 static修饰成员变量static修饰成员变量的应用场景static修饰成员方法static修饰成员方法的应用场景static的注意事项static的应用知识&#xff1a;代码块static的应用知识&#xff1a;单例设计模式 static静态的意思&#xff0c;可以修饰成员变量&#xff0c;成员方法&a…

React 组件防止冒泡方法

背景 在使用 antd 组件库开发时&#xff0c;发现点击一个子组件&#xff0c;却触发了父组件的点击事件&#xff0c;比如&#xff0c;我在一个折叠面板里面放入一个下拉框或者对下拉框列表渲染做定制&#xff0c;每个下拉框候选项都有一个子组件… 解决 其实这就是 Javascri…