Git最简入门

文章目录

  • 几个基本概念
    • 版本控制
    • Git的由来
    • 分布式 vs 集中式
      • Git
      • SVN
    • Git、GitHub、GitLab、GitWeb、Gitee的区别
  • 动手进行版本控制
    • 初始化Git
    • 使用情景一:开发新项目
    • 使用情景二:在已有项目上开发
    • 设置代理
  • 参考

几个基本概念

版本控制

在工作学习中,备份是一个十分重要的习惯,只有经历了硬盘损坏才明白数据无价的道理。

回想过去自己的备份习惯,通常是整个项目文件夹拷贝加上日期,有时候会加上个版本号。然而,这种方式虽然简单但却有着致命的缺点。首先,没有对文件进行更改追踪,就不能具体知道每个版本分别修改了什么(常常出现找不到代码的情况);其次,整个项目拷贝通常占用较大的存储空间。个人开发者还勉强能够接受,一旦涉及多人协同开发,这种管理方式往往是不可行的。

Git作为各大企业使用的版本控制工具,就像一个高级的时间机器,不仅仅能够让你回溯过去查看历史,甚至还能更改历史。

为了提高开发效率,学习并掌握Git是十分有必要的。

Git的由来

话说Git和著名的Linux是同宗同源,都是由Linus Torvalds开发的。21世纪初,Linux在世界上引起了一波开源浪潮,许多的开发者都向Linux提交代码,当时代码管理的任务是由微软的BitKeeper工具来实现的。但本着开源的思想,Linux开发者希望将 BitKeeper开源,因此触犯了微软的利益,结束了BitKeeper提供的服务。

这迫使 Linux 社区寻找或创建一个新的版本控制工具,最终,Linus Torvalds 用了两周时间开发了 Git,一直流传至今,成为当下最热门的分布式版本控制系统

分布式 vs 集中式

与分布式版本控制系统相对的还有集中式版本控制系统,最经典的就是Git和SVN,它们的差别如下:

Git

完整的代码库:每个参与者的机器上都有代码的完整拷贝。这不仅包括当前的代码快照,还包括整个历史记录。
不依赖中央服务器:虽然可以有一个“主”存储库供开发者推送更改,但每个开发者的本地存储库都可以独立工作。
更强大的分支和合并:DVCS通常提供更高级和灵活的分支和合并功能。
离线工作:由于每个开发者都有完整的代码库,因此他们可以离线工作,并在稍后同步更改。

SVN

中央存储库:所有的版本历史都存储在一个中央服务器上,开发者通常只获取代码的最新版本。
完全依赖中央服务器:如果中央服务器出现问题,可能会暂时阻止开发者进行版本控制操作,或者在最坏的情况下导致数据丢失(除非有备份)。
速度:由于所有操作都需要与中央服务器通信,某些操作可能会较慢。
需要网络连接:开发者需要连接到中央服务器才能提交更改,虽然本地工作可能仍然是可能的。
在这里插入图片描述

Git、GitHub、GitLab、GitWeb、Gitee的区别

  • GitHub:全球最大的代码托管平台
  • Gitee:国内最大的代码托管平台,因GitHub在国内较慢应运而生
  • GitWeb:轻量化的基于Web界面的Git存储库,适用于个人搭建在服务器上
  • GitLab:与GitHub类似的代码托管平台,相对于GitWeb有较好的权限管理功能,适用于搭建在团队的服务器上
  • Git:以上这些平台都是基于Git工具

动手进行版本控制

实践出真知。这里以GitHub为例,提供了两种最常见的情况下使用Git的方法。推荐在Windows环境下使用Git Bash
在这里插入图片描述

初始化Git

初始化在环境配置阶段仅需要完成一次,在不更换电脑和不修改Github账户的情况下无需再操作。

  1. 初始化本地的git用户信息,该信息只用于标记操开发者,不用于身份验证:
git config --global user.name "Your Name"
git config --global user.email "Your Email"
  1. 建立安全连接,建议使用SSH(Secure SHeel)的方式进行连接。首先在本地生成ssh key,回车按照默认信息即可:
ssh-keygen -t rsa -C "Your Email"
  1. 添加ssh key到GitHub,GitHub上依次点击头像->settings->SSH and GPG keys->New SSH keys

Git操作的对象通常是一个仓库,因此每个项目工程都应该建立一个仓库,而不建议一个仓库下放多个项目文件。

使用情景一:开发新项目

该情景适用于在完成一个新项目的第一个版本后,需要将该版本备份的情况。

  1. 在GitHub上新建一个远程仓库,仓库名称尽量项目名称保持一致
  2. 在项目下初始化一个本地仓库:
git init
  1. 将本地仓库链接远程仓库:
git remote add origin <repository-url>
  1. 修改主分支为main,否则将会默认添加到master分支:
git branch -m main
  1. 将项目代码添加到暂存区:
git add .
  1. 提交更改至本地版本库:
git commit -m "Your commit message here"
  1. 拉取远程仓库到本地进行合并:
git pull origin main

注意:如果提示 fatal: refusing to merge unrelated histories 是因为本地仓库和远程仓库的历史修改信息不同步(此时远程仓库可能不为空)。解决方案是不考虑他们的历史是否有关联(由于是新仓库,该操作合理):

git pull origin main --allow-unrelated-histories
  1. 推送到main分支:
git push origin main
  1. 回到GitHub即可看到新提交的文件

使用情景二:在已有项目上开发

该情景适用于在已有项目上继续开发新的功能,或者基于已有项目进行学习和开发。

由于克隆的仓库中本身存在git仓库,因此不需要使用git init来初始化一个仓库

  1. 从远程仓库中克隆一个到本地仓库:
git clone <repository-url>
  1. 进入仓库目录:
cd <repository-name>
  1. 切换到要推送的分支(如果你不在那里):
git checkout main
  1. 执行所需的代码更改,并将它们添加到暂存区:
git add <changed-files>
  1. 提交更改至本地版本库:
git commit -m "Your commit message here"
  1. 拉取最新的远程更改以确保没有冲突(可选,但推荐):
git pull origin main
  1. 推送更改到远程的main分支:
git push origin main

设置代理

  1. 打开SSH配置文件,没有就新建一个:
touch ~/.ssh/config
  1. 在配置文件中添加代理,这里我用的是socks代理,开启v2ray后转发至10808端口:
Host github.com
ProxyCommand connect -S 127.0.0.1:10808
  1. 重启git后生效,即可加速下载

参考

  • https://git-scm.com/

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

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

相关文章

LiveData相关基本使用及去除黏性数据的方法

目录 一、LiveData的基本使用1. 使用方式一2. 使用方式二3. 使用方式三 二、LiveData 去除黏性数据的方法1. 去除黏性的Java版本2. 去除黏性的Kotlin版本 一、LiveData的基本使用 1. 使用方式一 MyLiveData.kt package com.example.mylivedata.simple1import androidx.lifec…

「Python|音视频处理|环境准备」如何在Windows系统下安装并配置音视频处理工具FFmpeg

本文主要介绍如何在Windows系统下安装并配置音视频处理工具FFmpeg&#xff0c;方便使用python进行音视频相关的下载或编辑处理。 文章目录 一、下载软件二、解压并配置三、验证安装 一、下载软件 首先要去 ffmpeg官网 下载软件包 由于上面直接下载的按钮是.tar.xz格式的。为了…

Pygame编程(8)image模块

Pygame编程&#xff08;8&#xff09;image模块 函数示例 函数 pygame.image.load 从文件&#xff08;或类似文件的对象&#xff09;加载新图像load(filename) -> Surfaceload(fileobj, namehint“”) -> Surface pygame.image.save 将图像保存到文件&#xff08;或类似…

基于 Alpine 环境源码构建 alibaba-tengine(阿里巴巴)的 Docker 镜像

About Alpine&#xff08;简介&#xff09; Alpine Linux 是一款极其轻量级的 Linux 发行版&#xff0c;基于 busybox&#xff0c;多被当做 Docker 镜像的底包&#xff08;基础镜像&#xff09;&#xff0c;在使用容器时或多或少都会接触到此系统&#xff0c;本篇文章我们以该镜…

Pydev·离线git包

Pydev离线git包 1.下载离线git包&#xff1a;eclipse.egit.repository-4.4.0.201606070830-r.zip 2.将解压后目录&#xff1a;eclipse.egit.repository-4.4.0.201606070830-r\plugins下的jar文件放到 ide\eclipse\plugins目录下 3.重启pydevIDE 百度搜索站长工具&#xff1a;h…

head 请求了解过吗?如何用 get 模拟 head 请求?不需要服务器返回数据,怎么实现?

HEAD请求是HTTP/1.1协议中定义的一个请求方法&#xff0c;与GET请求相似&#xff0c;但只请求目标URL的头部&#xff0c;不请求实际的数据或者说正文内容。其主要用途是&#xff1a; 检查资源是否存在。获取资源的元数据&#xff08;如响应头中的Content-Length或Last-Modifie…

Spring集成【MyBatis】和【PageHelper分页插件】整合---详细介绍

一&#xff0c;spring集成Mybatis的概念 Spring 整合 MyBatis 是将 MyBatis 数据访问框架与 Spring 框架进行集成&#xff0c;以实现更便捷的开发和管理。在集成过程中&#xff0c;Spring 提供了许多特性和功能&#xff0c;如依赖注入、声明式事务管理、AOP 等 它所带来给我们的…

校对的力量:当专业遇上细节,文字焕发新生

在这个信息爆炸的时代&#xff0c;文字成为了我们传达思想、展现形象的重要工具。从新闻稿、政府材料到商业文档&#xff0c;其背后的准确性和专业性往往决定了信息传递的效果。而保证这一切的&#xff0c;就是细致入微的校对工作。 1.错别字与校对&#xff1a;细节之美 错别字…

go web框架 gin-gonic源码解读03————middleware

go web框架 gin-gonic源码解读03————middleware&#xff08;context&#xff09; 今天打完游戏有空整理整理之前看的gin的中间件设计&#xff0c;go的中间件设计相较于前两站还是蛮简单&#xff0c;蛮容易看懂的&#xff0c;所以顺便把context也一起写一下。 中间件是现在w…

开源全球地理空间数据可视化框架——Cesium学习(2023.8.21)

Cesium学习 2023.8.21 1、Cesium简介1.1 Github上的Cesium 2、Cesium下载安装使用2.1 方式一&#xff1a;页面在线引用2.2 方式二&#xff1a;页面离线使用2.3 方式三&#xff1a;完整项目使用 3、CesiumJS学习教程&#xff08;快速上手 API文档&#xff09;3、Cesium官方示例…

Python 读写 Excel 文件库推荐和使用教程

文章目录 前言Python 读写 Excel 库简介openpyxl 处理 Excel 文件教程pandas 处理 Excel 文件教程总结 前言 Python 读写 Excel 文件的库总体看还是很多的&#xff0c; 各有其优缺点&#xff0c; 以下用一图总结各库的优缺点&#xff0c; 同时对整体友好的库重点介绍其使用教程…

java中多个list怎么用List表示?

如果你有多个List对象&#xff0c;想要将它们合并成一个List对象&#xff0c;可以使用addAll()方法来实现。addAll()方法将会把一个List中的元素逐个添加到另一个List中。 以下是一个示例&#xff0c;展示了如何将多个List对象合并为一个List对象&#xff1a; import java.ut…

vue离线缓存资源文件

本文章主要是解决大文件,实时请求资源浪费网络资源的问题 从而有效的将解决用户体验的问题 话不多说上才艺 ⬇️⬇️⬇️⬇️⬇️⬇️⬇️ 找到项目中的 index.html 文件,并在 html 标签中加入 manifest"manifest.appcache" 安装 appcache-manifest 包 npm ins…

【NPM】包的指令

npm 安装的包可以根据其用途和作用进行分类&#xff0c;一般可以分为以下几种类型&#xff1a; 普通依赖&#xff08;Regular Dependencies&#xff09;&#xff1a; 这些是你项目中的实际依赖项&#xff0c;用于构建、运行或扩展你的应用程序。这些依赖会被包含在你的应用程序…

c++ qt--信号与槽(二) (第四部分)

c qt–信号与槽(二) &#xff08;第四部分&#xff09; 信号与槽的关系 1.一对一 2.一对多 3.多对一 4.多对多 还可以进行传递 信号->信号->槽 一个信号控制多个槽的例子&#xff08;通过水平滑块控制两个组件&#xff09; 1.应用的组件 注意这里最下面的组件进行…

【Qt学习】06:事件与事件过滤器

OVERVIEW 事件与事件过滤器一、事件1.鼠标事件创建子类MyLabel重写鼠标事件提升Label控件为MyLabel 2.定时器事件timerEventQTimer 3.事件分发器&#xff08;event函数&#xff09;event函数重写event函数深入 二、事件过滤器1.事件过滤器2.事件处理的五个层次 事件与事件过滤器…

Tomcat和Servlet基础知识的讲解(JavaEE初阶系列16)

目录 前言&#xff1a; 1.Tomcat 1.1Tomcat是什么 1.2下载安装 2.Servlet 2.1什么是Servlet 2.2使用Servlet来编写一个“hello world” 1.2.1创建项目&#xff08;Maven&#xff09; 1.2.2引入依赖&#xff08;Servlet&#xff09; 1.2.3创建目录&#xff08;webapp&a…

VR法治警示教育:情景式课堂增强教育效果

VR法治警示教育平台是一款基于虚拟现实技术的在线教育平台&#xff0c;旨在通过模拟真实场景和互动体验&#xff0c;向公众普及法律知识&#xff0c;提高公民的法律意识和素养。该平台采用先进的虚拟现实技术&#xff0c;将用户带入一个逼真的仿真环境&#xff0c;让用户身临其…

python systemrdl 使用实例

今天来看一个具体实例&#xff0c;上一篇传送门&#xff1a;python SystemRDL 包介绍_Bug_Killer_Master的博客-CSDN博客 通常来说&#xff0c;我们验证过程用到的情况大多都是需要提取reg field的路径以及reset 值等信息&#xff0c;所以比较常见的一种方法就是先把rdl compil…

计算机网络文件拆分—视频流加载、断点续传

视频流加载 视频流加载的原理是通过网络传输和播放器解码来实现的。 首先&#xff0c;视频文件会被分成一系列小的数据包&#xff0c;通常是以流的形式传输&#xff0c;这些数据包通过网络传输到用户设备。在传输过程中&#xff0c;可以采用各种协议&#xff0c;如HTTP、RTSP…