什么是Git,github与git又有什么关系呢?

23 篇文章 0 订阅
订阅专栏

个人博客:alvincr.com,如有更新:https://alvincr.com/2021/01/git-and-github/

一:背景

前两天写了搭建GitHub_Pages的文章,又用到了Git,不禁令人猜想GitHub和Git到底有什么关系,为什么Github要以此为名?

二:Git

1 基础知识

首先先来了解一下什么是Git。

git是用于Linux内核开发的版本控制工具。与CVS、Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。

2 Git特点

Git是一个分布式版本控制软件,仅此一句话我们便能看出:

  1. Git使用场景是分布式的,而非中心式管理,那么使用对象应该就是个人PC;
  2. Git的作用是对文件进行版本控制。

此外Git还有以下特点:

  1. git是用C语言开发的,以追求最高的性能。
  2. git能自动完成垃圾回收,也可以用命令git gc –prune直接调用。
  3. Git服务器典型的TCP监听端口为9418。
  4. Git使用packs操作使用差分压缩法将文件压缩入一个文件中(packfile),packfile与索引文件都用SHA-1作为校验和并作为文件名。

3 最大的优势

Git最大的优势是能够分步分时记录文件修改的内容,这对于保存历史文件,多人共同修改文件拥有不可比拟的优势。

(1)保存历史文件:由于Git只记录修改的内容,因此其它未修改的内容无需额外进行保存,节省了大量的存储空间。

(2)多人修改:假设alvincr今天写了一个程序,大神A看了看程序里面BUG满天飞,便拿走了一个备份修改BUG,alvincr自己看了看自己的程序确实是BUG堆积成山,自己也修改了一下。第二天大神A把修改好的程序传给了我,那么此时我必须要考虑一下我自己修改了什么地方,大神修改了什么地方,要如何将两者合并起来,这其中的辛酸一言难尽。使用Git则能够直接解决此类痛点,使用Git可以直接记录下修改的内容然后自动合并。

4 对比其它管理方式

与Git拥有同样效果的管理系统有CVS、Subversion以及Perforce,它们虽然在实现效果上与Git类似,但是实现的原理却截然不同。

以下内容总结自Git官网: https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-Git-%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F,其它参考:WIKI

  1. Git直接记录快照建立索引

CVS、Subversion、Perforce、Bazaar等管理方式:是基于差异(delta-based) 的版本控制,也就是说会查找两个文件(1V1)不同之处,仅记录两者的不同。

Git先根据所有初始文件建立索引(多V多),如果你添加了其它内容那么只建立你添加内容的索引。

个人理解:CVS相当于班主任,每个班主任负责记录各个班变化的情况,只有当出现变动的班级,班主任才会上报学校;Git相当于级部主任,每段时间记录整个级部的整体变化,只记录有变动的部分,然后上报学校。即:CVS对单个文件负责,Git对整体文件负责。

以下图片来自原文(如果自动添加水印还请原作者见谅):

使用CVS、Subversion、Perforce、Bazaar

存储每个文件与初始版本的差异。

使用Git

Git 存储项目随时间改变的快照。

  1. Git几乎将所有文件储存在本地

在本地磁盘上就有项目的完整历史,不过多依赖网络。

  1. Git只能添加数据

由于只能添加数据,因此使用Git不会导致数据库数据误删,因此Git 基本不会执行任何可能导致文件不可恢复的操作。但是同别的VCS一样,未提交更新时有可能丢失或弄乱修改的内容。

5 补充:CVS瓶颈

原文:https://developer.ibm.com/zh/devpractices/devops/articles/os-cn-git-and-github-1/

代码库的存储和复制并非版本控制系统的瓶颈所在,分析文件的差异、查看代码库的各历史版本常常是真正的瓶颈所在。基于这种快照流的设计,Git 可以快速地获取到某一时刻的代码库所有文件,同时也可以快速地进行文件各个历史版本的差异比对,甚至是各历史版本或者各分支的代码库整体差异比对。想像一下如果是传统的增量存储方式,一个代码库经过长期的开发,假设代码库已经有 10 万个文件,每个文件平均经历了 100 次修改,那么要检索最新的代码库和原始的代码库的差异,就需要检索出 1000 万个增量才能最终成功比对,这需要难以想象的时间成本。而 Git 就不存在这个问题,Git 只需要检索出最新的代码库快照和原始代码库快照直接进行比对即可,再依托于 Git 的 diff 算法(Myers 算法),Git 可以高效快速地检索出二者的差异来。

三:GitHub

1 介绍

官网介绍:https://github.com/about

GitHub是全球最大的开源代码托管平台。(完)

2 功能

常见的选项

新建仓库相当于在硬盘上新建一个文件夹,这个文件夹专门用来放置某个项目文件,

Fork命令可以将其他人的资源复制到自己的这个文件夹中。

Star用于收藏,相当于收藏夹

Clone可以复制别人的文件或是github上自己的仓库到本地

此外如果访问的是个人仓库,还可以在线修改添加文件

浏览Github

在github首页可以选择explore github,通过此选项可以查看github推荐的文章

四:两者关系

(1)GitHub是一个代码托管平台,而它利用的是基于 Git 的托管服务。

(2)GitHub上面也有Git的源码。

(3)可以通过git克隆github上的文件(需要登录)。

个人猜测:GitHub以此为名是因为主要采用了Git的方式,并且Github主要的存储方式也是基于Git,因此我们在Github上传的数据都会有历史版本,查找起来相当友好。

附:

.git文件夹

参考文章:https://juejin.cn/post/6844903986839945229

新建的Git文件夹默认有以下文件:

Config文件:

在此设置.git一些相关信息。

Descripton:

这个文件用于GitWeb。GitWeb 是 CGI 脚本(Common Gateway Interface,通用网关接口,简单地讲就是运行在Web服务器上的程序, 但由浏览器的输入触发),让用户在web页面查看git内容。如果我们要启动 GitWeb 可用如下命令:

# 确保lighttpd已安装: brew install lighttpd

$ git instaweb –start

默认会启动 lighttpd 服务并打开浏览器 http://127.0.0.1:1234,页面直接显示当前的 git 仓库名称以及描述。

个人测试上面给出的代码无效:

Hooks文件:

hooks里存放 git 提交的各个阶段文件,用于在 git 命令前后做检查或做些自定义动作。

HEAD:

修改head里面的内容可以更改指针的位置,使其指向所需的工作分区。

Objects:

原文:Git 往磁盘保存对象时默认使用的格式叫松散对象 (loose object) 格式,当你对同一个文件修改哪怕一行,git 都会使用全新的文件存储这个修改了的文件,放在了objects中。Git 时不时地将这些对象打包至一个叫 packfile 的二进制文件以节省空间并提高效率

综上objects相当于temp文件夹。

Ref:

存放git生成文件的分支以及标签的使用。

什么是Git?
lk19910323的博客
05-19 7768
一、Git是一款分布式源代码管理工具(版本控制工具) 1.1、我们写的代码需要使用Git进行管理。 源代码有必要管理起吗? 1.0 2.0 // svn,vss,vcs… git 有必要,因为人工的去处理不同的版本,做相应备份会很麻烦。 Git是linux之父当年为了维护linux—linus之前也是手动维护合并把文件发给Linus linus自己写了一个版本管理的工具(Git) 特点: Git易于学习, 占用空间小,性能快如闪电。它优于 Subversion、CVS、Perforce 和 ClearCas
GitGitHub:从入门到实践,第3部分Git分支简介、GitGitHub日常操作
02-24
从本篇文章开始,我将结合实验和实际的场景详细讲解如何在日常工作中使用GitGitHubGit有六大特性,中介绍了前五个特性,本文将介绍Git的最后一个特性:三种状态和三个工作区,然后介绍Git的核心功能:Git分支,...
mysql数据库初始化脚本
12-12
mysql数据库初始化脚本,这是某个项目的数据库初始化脚本
mysql-授权表的创建-mysql_install_db
01-06 222
mysql_install_db相关介绍 mysql_install_db 脚本的目的是生成新的MySQL授权表。它不覆盖已有的MySQL授权表,并且它不影响任何其它数据。 如果你想要重新创建授权表,首先停止mysq...
Git 全面教程
最新发布
shuai_258的博客
08-21 931
Git是一个分布式版本控制系统,它可以记录文件的变更历史,便于多人协作开发项目。每个开发者的工作目录中都拥有整个项目的完整历史记录,这使得Git在网络连接不稳定或离线情况下也能进行开发。版本控制系统是管理项目变更的工具,它可以跟踪每个文件的修改历史,允许开发者在不同版本之间进行切换、比较、合并等操作。在合并分支时,如果同一文件的同一部分被不同的修改,Git 会提示冲突。此命令将打开一个交互式界面,你可以选择修改、删除、合并提交等。在切换分支时,如果当前分支有未提交的更改,可以使用。
2019-10-09 Spring Boot 2.1.6.RELEASE 设置上传文件大小
jingbotwins的博客
11-11 240
上传20M文件显示 文件超过大小限制,需要修改 yml配置文件 servlet: multipart: max-request-size: 300MB max-file-size: 300MB
mysql_install_db创建空库_MySQL数据库的初始化mysql_install_db
weixin_28947723的博客
02-18 2593
一、mysql_install_db说明当MySQL的系统库(mysql系统库)发生故障或需要新加一个mysql实例时,需要初始化mysql数据库。需要使用的命令:/usr/local/mysql/bin/mysql_install_db#/usr/local/mysql/bin/mysql_install_db --help 可以查看帮助信息如下Usage: /usr/local/mysql/b...
mysql_install_db
du_lijun的博客
07-20 583
mysql_install_dbcat << EOF定义参数栗子 cat << EOF 1.以EOF标准输入为结束 2.cat>filename ,标准输入输出到文件,ctrl+d结束 3.cat>filename<<EOF,以EOF作为输入结束,和ctrl+d的作用一样 定义 mysql_install_db 脚本的目的是生成新的MySQL授权表。它不覆盖已有的MySQL授权表,并且它不影响任何其它数据。 参数 –auth-root-authenticati
最新GitGithub首篇巨作课程 Git&Github极速入门与攻坚实战结合课程 一次搞定Git.txt
09-03
GitGithub教程详细介绍了Git的工作机制,Git命令行的基础学习,Git-Eclipse和Nginx的准备工作,GitGithub分支体系,GitGithub的远程和本地工作原理,GitGithub克隆实战和最后的课程精华总结部分,可以帮助...
gitgithub安装
01-08
关于Git有俩个软件 安装过程我们只需一路NEXT 我们先安装上方的软件 在安装下方软件 3.关于git的使用 1.安装好软件之后 我们右击菜单可以看到关于git 的一些操作 我们首先需要注意的是Git clone 我们在任意文件夹中...
fastdfs直接可用的maven包
04-11
fastdfs直接可用的maven包,解压缩后放入C:\Users\用户名\.m2\repository\org目录下面,然后在本地工程中加入pom代码可在source中的:\fastdfs-yiqing\1.0.0下面的pom文件中复制
mysql_install_db - 初始化MySQL数据目录
热门推荐
c446591512的博客
01-15 1万+
mysql_install_db 会初始化数据目录,并创建它所包含系统表(如果系统表不存在),它还初始化管理表所需的系统表空间和相关的数据结构。 从5.6.8开始mysql_install_db 是个perl脚本,之前是shell脚本。 在安装时,建议使用以下命令安装,mysql_secure_installation,此命令有以下4优点: 您可以为root帐户设置密
mysql install db的作用_mysql通过mysql_install_db初始化数据目录时使用--user选项的作用是什么?...
weixin_30783981的博客
01-27 170
需求描述:mysql数据库通过mysql_install_db初始化数据目录时,使用了--user选项,这里记录下该参数的作用参数解释:1.--user的作用:就是以哪个操作系统用户来执行mysqld进程(使用哪个用户来运行mysql server)2.比如,指定了--user=mysql之后,那么通过mysqld创建的文件或者目录都是被mysql用户拥有的(mysql创建的文件,目录的用户权限是...
Mysql_install_db相关介绍
weixin_34008805的博客
04-13 253
mysql_install_db 脚本的目的是生成新的MySQL授权表。它不覆盖已有的MySQL授权表,并且它不影响任何其它数据。如果你想要重新创建授权表,首先停止mysqld服务器(如果它正运行)。然后重新命名数据目录下的MySQL目录并保存,然后运行mysql_install_db。例如:shell> mv mysql-data-directory/mysql my...
mysql+install+db详解_MySQL安装脚本 mysql_install_db 详解
weixin_39665787的博客
01-20 245
#!/bin/sh# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.## This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Pu...
mysql_install_db的使用
10000day
12-08 1049
–help 显示帮助信息 –basedir=path mysql 安装目录的路径 –builddir=path build 目录的路径,用于out-of-source构建。 –cross-bootstrap 供内部使用。 –datadir=path mysql 数据目录的路径 –defaults-extra-file=file_name 在读取全局选项文件和在读取用户选项文件之前,读取这个文件(选项文件),如果该文件不存在,将会抛出错误。(仅限unix平台) –defaults-file=file_name
ctf:Firefox浏览器下安装一些常用的插件
viviliving的专栏
10-03 3045
一.配置KALI Linux和渗透测试环境 在这一章,我们将覆盖以下内容: l 在Windows和Linux上安装VirtualBox l 创建一个Kali Linux虚拟机 l 更新和升级Kali Linux l 为渗透测试配置web浏览器(即在Firefox浏览器下安装一些常用的插件) l 创建一个属于自己的靶机 l 配置网络使虚拟机正常通信 l 了解靶机上易受攻击的web应用程序 介绍 在第一章中,我们将介绍如何准备我们的Kali Linux安装,以便能够遵循书...
GitCode与GitHub有什么区别?
04-16
GitCode和GitHub是两个不同的概念。 GitCode是一个由CSDN开发的代码托管平台,它提供了代码仓库、版本控制、协作开发等功能。你可以在GitCode上创建自己的代码仓库,将代码上传到仓库中,并与他人进行协作开发。GitCode支持Git作为版本控制系统,可以方便地管理代码的版本。 GitHub是一个全球最大的代码托管平台,它也提供了类似的功能,但规模更大、用户更多。GitHub上有数百万的开源项目,你可以在上面找到各种各样的开源代码,并参与到这些项目中。GitHub也支持Git作为版本控制系统,可以方便地进行代码的管理和协作开发。 总结来说,GitCode是CSDN开发的一个代码托管平台,而GitHub是全球最大的代码托管平台。它们都提供了代码仓库、版本控制、协作开发等功能,但规模和用户群体有所不同。
写文章

热门文章

  • 油猴(Tampermonkey)简介及使用教程 97201
  • 访问后台出现重定向次数过多该怎么办?-建站需知 69415
  • Vmware中虚拟化Intel VT-x、CPU性能计数器、 虚拟化IOMMU到底是什么? 39235
  • 常见的各种字幕内容总结(字幕基础、字幕介绍、字幕种类及常见格式、SRT+ASS+LYC等等) 32604
  • C盘清理--模拟器(夜神为例)占用空间越来越大问题解决方案(本方法适用于安装过多个APK,虽然卸载了但是占用仍然很严重的情况) 20621

分类专栏

  • 网站利用 5篇
  • 网络基础 23篇
  • UE4 4篇
  • 渲染 3篇
  • 建模 1篇
  • 计算机知识 2篇
  • 设置
  • 编程 1篇
  • 影音相关 1篇
  • Python 1篇
  • 网页搭建 42篇
  • Linux基础 7篇
  • Win10 32篇
  • Java 1篇
  • Vmware 9篇

最新评论

  • 详细动态网页、伪静态和静态网页的区别及相关知识(学习笔记)

    Xenon_Robinson: 说得非常清楚,免去了查文档的烦恼,非常感谢

  • 访问后台出现重定向次数过多该怎么办?-建站需知

    直爽的鸭蛋: 在哪里设置呢

  • C盘清理--模拟器(夜神为例)占用空间越来越大问题解决方案(本方法适用于安装过多个APK,虽然卸载了但是占用仍然很严重的情况)

    Bax_Chaos: 得救了大佬

  • 如何使用wget获取整个网站的全部内容

    SpencerRice: 可以的老胸,给你点了

  • 访问后台出现重定向次数过多该怎么办?-建站需知

    骜蛟: 确实,将SSL设置为完全就OK了。谢谢博主帮大忙了

大家在看

  • 代码随想录Day50|图论Part01,leetcode题目:98. 所有可达路径 692
  • spring boot 项目中集成使用 Elasticsearch
  • Spring IoC & DI 之 属性注入 210
  • 基于django+vue基于Android疫情期间旅游助手【开题报告+程序+论文】-计算机毕设
  • C++自助洗衣店-计算机毕业设计源码35120 1454

最新文章

  • 设置WIN10资源管理器文件视图,使其所有列为 合适大小或固定长度
  • WP后台统计异常--独立IP访问量等各种统计数据突然极低的解决方法及记录
  • UE4渲染的整体流程(可视性、GBuffer、反射、动态光照阴影、后期处理)
2021年63篇
2020年51篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司值得信赖的网站优化代理黄埔网站seo推广优化方案潮州网站竞价优化代运营荔湾企业网站推广优化公司商丘网站整站优化蚌埠网站长尾关键词优化静海网站优化排名哪家好孝感很好的网站优化用户体验赣州市网站优化排名怎么做好网站推广优化鹤壁外贸网站优化哪家有名上海搜索引擎优化网站台州网站优化如何金昌靠谱的网站优化网站站外优化有哪些方法莱山区响应式网站优化五莲网站优化大型企业园区网站优化网站自然优化需要软件吗医疗网站关键词优化推荐丹徒网站优化开封网站优化哪家公司好保定网站竞价优化案例海珠网站关键词优化河南靠谱网站优化公司哪家好网站后期优化网站快速排名优化网站优化seo诊断青铜峡门户网站seo优化如何制定网站优化歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化