对于git功能的探索与研究

news2024/11/28 9:29:09

读前提示

注意:
本文只是面向初学者或者之前并未接触过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 简介使用-哔哩哔哩】

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

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

相关文章

配置页面的路由

1.下载router npm i router 2.注册路由 文件路径 :src/router/index.js import Vue from "vue"; import VueRouter from "vue-router"; Vue.use(VueRouter); import Home from "../components/home.vue"; import Main from …

摄像机终端IP地址白名单配置流程

海康摄像头配置白名单流程 1.登录海康摄像机前端 2.进入配置-系统-安全管理-IP地址过滤 3.IP地址过滤方式选择“允许” 4.点击添加按钮输入对应的IP地址或者IP网段 5.最后勾选启用IP地址过滤,然后保存 大华摄像头配置白名单流程 1.登录大华摄像机前端 2.进入设…

openGauss学习笔记-33 openGauss 高级数据管理-视图

文章目录 openGauss学习笔记-33 openGauss 高级数据管理-视图33.1 语法格式33.2 参数说明33.3 示例 openGauss学习笔记-33 openGauss 高级数据管理-视图 视图与基本表不同,是一个虚拟的表。数据库中仅存放视图的定义,而不存放视图对应的数据&#xff0c…

【C高级】Day4 shell脚本 排序

1. 整理思维导图 2. 写一个函数&#xff0c;获取用户的uid和gid并使用变量接收 #!/bin/bash function getid() {uidid -ugidid -g }getid echo "uid$uid" echo "gid$gid"3. 整理冒泡排序、选择排序和快速排序的代码 #include <myhead.h>void Inp…

智慧物流园区整体架构方案【46页PPT】

导读&#xff1a;原文《智慧物流园区整体架构方案【46页PPT】》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式&#xff1a; 如需获取…

Python-面向对象:面向对象、成员方法 、类和对象、构造方法、魔术方法、封装、继承、类型注解、多态(抽象类(接口))

版本说明 当前版本号[20230806]。 版本修改说明20230806初版 目录 文章目录 版本说明目录知识总览图面向对象初识对象生活中数据的组织程序中数据的组织使用对象组织数据 成员方法类的定义和使用成员变量和成员方法成员方法的定义语法注意事项 类和对象现实世界的事物和类使…

Netty:ChannelInitializer添加到ChannelPipeline完成任务以后会自动删除自己

说明 io.netty.channel.ChannelInitializer是一个特殊的ChannelInboundHandler。它的主要作用是向 Channel对应的ChannelPipeline中增加ChannelHandler。执行完ChannelInitializer的initChannel(C ch)函数以后&#xff0c;ChannelInitializer就会从ChannelPipeline自动删除自己…

sklearn中使用决策树

1.示例 criterion可以是信息熵&#xff0c;entropy&#xff0c;可以是基尼系数gini # -*-coding:utf-8-*- from sklearn import tree from sklearn.datasets import load_wine from sklearn.model_selection import train_test_split wineload_wine()# print ( wine.feature_…

Vue3 第四节 自定义hook函数以及组合式API

1.自定义hook函数 2.toRef和toRefs 3.shallowRef和shallowReactive 4.readonly和shallowReadonly 5.toRaw和markRaw 6.customref 一.自定义hook函数 ① 本质是一个函数&#xff0c;把setup函数中使用的Composition API 进行了封装,类似于vue2.x中的mixin 自定义hook函数…

Maven介绍-下载-安装-使用-基础知识

Maven介绍-下载-安装-使用-基础知识 Maven的进阶高级用法可查看这篇文章&#xff1a; Maven分模块-继承-聚合-私服的高级用法 文章目录 Maven介绍-下载-安装-使用-基础知识01. Maven1.1 初识Maven1.1.1 什么是Maven1.1.2 Maven的作用 02. Maven概述2.1 Maven介绍2.2 Maven模型…

F5 LTM 知识点和实验 12-使用规则和本地流量策略定制应用程序交付

第十一章:iapp(忽略) 第十二章:使用规则和本地流量策略定制应用程序交付 用最简单的术语来说,iRule是在网络流量通过BIGIP系统时对其执行的脚本。其思想非常简单:规则使您能够编写简单的网络感知代码片段,这些代码以各种方式影响您的网络流量。无论您是希望以BIG-IP内置…

SpringBoot 自动配置--常用配置

&#x1f600;前言 本篇博文是关于SpringBoot 自动配置的一些分享&#xff0c;希望能够帮助到您&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您…

分布式任务调度平台——XXL-JOB

1、为什么需要任务调度平台 1.1、传统的定时任务实现方案不足 在Java中&#xff0c;传统的定时任务实现方案&#xff0c;比如Timer&#xff0c;Quartz等都或多或少存在一些问题&#xff1a; 不支持集群、不支持统计、没有管理平台、没有失败报警、没有监控等。在现在分布式的…

如何快速掌握水土保持方案编制

1、熟悉水土保持常用的主要法律法规、部委规章、规范性文件及技术规范与标准&#xff1b; 2、了解水土保持方案、监测及验收工作开展的流程&#xff1b; 3、熟悉水土保持方案、监测及验收工作需要收集的资料、现场踏勘注意事项&#xff1b; 4、熟悉常见水土保持工程施工工艺…

JavaSE_2.1——数组【概念、创建、内存分配】

今天是练习数组的第一天&#xff0c;后续继续 1、数组的定义以及声明 1.数组的定义&#xff1a;一组能够存储相同数据类型值的变量的集合 2.数组的赋值方式&#xff1a; New关键字:表示创建一个数组&#xff1b; &#xff08;1&#xff09;使用默认的初始值来初始化数组中…

我的Python教程:Tkinter组件布局管理的3种方式

**Tkinter组件布局管理可以使用pack()方法、grid()方法和place()方法。**pack()方法将组件放置在窗口中&#xff0c;grid()方法将组件放置在网格布局中&#xff0c;place()方法将组件放置在指定位置。 01使用pack()方法布局&#xff1a; 在Tkinter中&#xff0c;pack方法用于将…

【双指针_快乐数_C++】

题目解析 快乐数 算法原理 快慢双指针1、定义快慢指针 2、慢指针每次向后移动一步&#xff0c;快指针每次向后移动两步。 3、判断相遇的时候的值 编写代码 class Solution { public:int num_sum(int n){int sum 0;while(n!0){int t n%10;sumt*t;n n/10;}return sum;}bool…

Visio Studio Code 搭建Vue开发环境

一、安装Visual Studio Code 使用 Visual Studio Code&#xff08;VS Code&#xff09;开发 Vue.js 应用是一种常见的做法&#xff0c;以下是简要的步骤&#xff1a; 安装 VS Code&#xff1a; 如果您尚未安装 Visual Studio Code&#xff0c;您可以从官方网站&#xff08;htt…

作为一名软件测试工程师,需要具备哪些能力?

软件测试工程师是个神奇的职业&#xff0c;他是开发人员与老板之间的传话筒&#xff0c;也是开发人员与老板的好帮手。他不仅需要有销售的沟通能力&#xff0c;也需要具备编辑人员的文档撰写技巧。如此一个面面俱到的岗位&#xff0c;他需要具备的技能到底有哪些呢&#xff1f;…

互联网智能3D导诊系统源码支持微信小程序、APP

通过智能导诊&#xff0c;进行自助问询及挂号服务&#xff0c;减轻导诊台护士压力&#xff0c;挂号更加方便快捷。 系统技术架构&#xff1a;springbootredismybatis plusmysqlRocketMQ 一、智慧导诊系统开发原理 导诊系统从原理上大致可分为基于规则模板和基于数据模型两类…