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/

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

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

相关文章

大数据项目实战(Hadoop集群搭建)

一&#xff0c;搭建大数据集群环境 1.2 Hadoop集群搭建 1.2.1 jdk安装 1.下载jdk (1)在根目录下创建三个子目录以备后用。具体如下&#xff1a; mkdir -p /export/data mkdir -p /export/software mkdir -p /export/servers (2)下载路径&#xff1a; 1、官网下载地址http…

[docker][WARNING]: Empty continuation line found in:

报警内容&#xff1a; 下面展示一些 内联代码片。 //执行 sudo docker build ubuntu:v1.00 . [WARNING]: Empty continuation line found in:出现上述错误原因为18行多了一个 " \" 符号&#xff0c;去除即可

【网络教程】如何创建/添加钉钉机器人以及如何获取机器人的Token/Secret

文章目录 创建钉钉机器人添加钉钉机器人获取机器人的Token/Secret相关网站创建钉钉机器人 这里以PC端的操作为例,按照如下操作进行 访问 钉钉开放平台选择机器人选项卡,点击右上角的创建应用,这里会有一个弹窗,我这里选择的是继续使用旧版,如图按照要求填写相关信息创建自…

实现高效消息传递:使用RabbitMQ构建可复用的企业级消息系统

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 RabbitMQ是一个在 AMQP(高级消息队列协议)基…

什么是算法评价指标

在我们建立一个学习算法时&#xff0c;或者说训练一个模型时&#xff0c;我们总是希望最大化某一个给定的评价指标&#xff08;比如说准确度Acc&#xff09;&#xff0c;但算法在学习过程中又会尝试优化某一个损失函数&#xff08;比如说均方差MSE或者交叉熵Cross-entropy&…

短视频seo源码矩阵系统开源---代码php分享

前言&#xff1a;短视频seo源码 短视频seo矩阵系统源码私有化部署 短视频seo源码 短视频seo矩阵系统源码私有化怎么部署&#xff1f; 首先我们来给大家普及一下什么是短视频seo矩阵系统&#xff1f;视频矩阵分为多平台矩阵与一个平台多账号矩阵&#xff0c;加上seo排名优化&…

springboot整合rabbitmq发布确认高级

在生产环境中由于一些不明原因&#xff0c;导致 rabbitmq 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c;导致消息丢失&#xff0c;需要手动处理和恢复。于是&#xff0c;我们如何才能进行 RabbitMQ 的消息可靠投递。 发布确认 发布确认方案 架构 配置…

【Vue框架】基本的login登录

前言 最近事情比较多&#xff0c;只能抽时间看了&#xff0c;放几天就把之前弄的都忘了&#xff0c;现在只挑着核心的部分看。现在铺垫了这么久&#xff0c;终于可以看前端最基本的登录了&#x1f602;。 1、views\login\index.vue 由于代码比较长&#xff0c;这里将vue和js…

有哪些前端调试和测试工具? - 易智编译EaseEditing

前端开发调试和测试工具帮助开发人员在开发过程中发现和修复问题&#xff0c;确保网站或应用的稳定性和性能。以下是一些常用的前端调试和测试工具&#xff1a; 调试工具&#xff1a; 浏览器开发者工具&#xff1a; 现代浏览器&#xff08;如Chrome、Firefox、Safari等&#…

剪枝基础与实战(2): L1和L2正则化及BatchNormalization讲解

1. CIFAR10 数据集 CIFAR10 是深度学习入门最先接触到的数据集之一,主要用于图像分类任务中,该数据集总共有10个类别。 图片数量:6w 张图片宽高:32x32图片类别:10Trainset: 5w 张,5 个训练块Testset: 1w 张,1 个测试块Pytorch 集成了很多常见数据集的API, 可以通过py…

STM32 无法烧录

1. 一直显示芯片没连接上&#xff0c;检查连线也没问题&#xff0c;换了个ST-Link 烧录器还是连不上&#xff0c;然后又拿这个烧录器去其它板子上试下&#xff0c;就可以连接上&#xff0c;说明我连线没问题&#xff0c;烧录器也没问题&#xff0c;驱动什么的更是没问题&#x…

慕课网 Go工程师 第三周 package和gomodules章节

Go包的引入&#xff1a; 包名前面加匿名&#xff0c;只引入但不使用&#xff0c;如果对应包有init函数&#xff0c;会执行init函数&#xff08;初始化操作&#xff09; 包名前面加. 把这个包的结构体和方法导入当前包&#xff0c;慎用&#xff0c;你不知道当前包和被引入的包用…

WPF实战项目十二(API篇):配置AutoMapper

1、新建类库WPFProjectShared&#xff0c;在类库下新建文件夹Dtos&#xff0c;新建BaseDto.cs&#xff0c;继承INotifyPropertyChanged&#xff0c;实现通知更新。 public class BaseDto : INotifyPropertyChanged{public int Id { get; set; }public event PropertyChangedEv…

七大出海赛道解读,亚马逊云科技为行业客户量身打造解决方案

伴随全球化带来的新机遇和国内市场的进一步趋于饱和&#xff0c;近几年&#xff0c;中国企业出海快速升温&#xff0c;成为了新的创业风口和企业的第二增长曲线。从范围上看&#xff0c;出海市场由近及远&#xff0c;逐步扩张。从传统的东南亚市场&#xff0c;到成熟的北美、欧…

Linux 网络编程 和 字节序的概念

网络编程概述 不同于之前学习的所有通讯方法&#xff0c;多基于Linux内核实现&#xff0c;只能在同一个系统中不同进程或线程间通讯&#xff0c;Linux的网络编程可以实现真正的多机通讯&#xff01; 两个不相关的终端要实现通讯&#xff0c;必须依赖网络&#xff0c;通过地址…

Element table根据字段合并表格(可多字段合并),附带拖拽列动态合并

效果如图&#xff0c;姓名 数值1 字段进行自动合并 封装合并列js - tableMerge.js // 获取列合并的行数 // params // tableData: 表格数据 // mergeId: 合并的列的字段名 export const tagRowSpan (tableData, mergeId) >{const tagArr [];let pos 0;tableData.map((i…

网络安全入口设计模式

网络安全入口涵盖了几种设计模式&#xff0c;包括全局路由模式、全局卸载模式和健康终端监控模式。网络安全入口侧重于&#xff1a;全局路由、低延迟故障切换和在边缘处减轻攻击。 上图包含了3个需求。 •网络安全入口模式封装了全局路由模式。因此&#xff0c;实现可以将请求路…

openCV实战-系列教程5:边缘检测(Canny边缘检测/高斯滤波器/Sobel算子/非极大值抑制/线性插值法/梯度方向/双阈值检测 )、原理解析、源码解读

打印一个图片可以做出一个函数&#xff1a; def cv_show(img,name):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows() 1、Canny边缘检测流程 Canny是一个科学家在1986年写了一篇论文&#xff0c;所以用自己的名字来命名这个检测算法&#xff0c;Canny边缘检测算法…

【数据库】使用ShardingSphere+Mybatis-Plus实现读写分离

书接上回&#xff1a;数据库调优方案中数据库主从复制&#xff0c;如何实现读写分离 ShardingSphere 实现读写分离的方式是通过配置数据源的方式&#xff0c;使得应用程序可以在执行读操作和写操作时分别访问不同的数据库实例。这样可以将读取操作分发到多个从库&#xff08;从…

【⑭MySQL | 数据类型(二)】字符串 | 二进制类型

前言 ✨欢迎来到小K的MySQL专栏&#xff0c;本节将为大家带来MySQL字符串 | 二进制类型类型的分享✨ 目录 前言5 字符串类型6 二进制类型总结 5 字符串类型 字符串类型用来存储字符串数据&#xff0c;还可以存储图片和声音的二进制数据。字符串可以区分或者不区分大小写的串比…