六、Git简史
Linux内核开源项目有着众广的参与者,绝大多数的Linux内存维护工作都花在提交补丁和保存归档的繁杂事务上(1991-2002年间)。
到2002年,整个项目组开始启用分布式版本控制系统BitKeeper来管理和维护代码。
到了2005年,开发BitKeeper的商业公司同Linux内核开源社区合作关系结束,他们收回了免费BitKepper的权利。迫使Linux开源社区(特别是Linux的缔造者LinusTorvalds)不得不吸取教训,只有开发一套属于自己的版本控制系统才不至于重蹈覆辙。
自从2005年以来,Git日臻成熟完善,在高度易用的同时,仍然保留着初期的设计的目标。极其适合管理大项目,有着令人难以置信的非线性分支管理系统,可以应付复制的项目开发需求。
七、Git基础
大多数其他系统:则只关心文件内容具体差异。这类系统(CVS、Subversion、Perforce、Bazaar等)每次记录有哪些文件做了更新,以及都更新了哪些行的什么内容。
Git:只关心文件数据的整体是否发生变化,并不保存这些前后的差异数据。实际上,Git更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为了提高性能,若文件没有变化,Git不会再次保存,而只是对上次保存的快照作一链接。
CVCS:用CVCS的话,差不多所有操作都需要连接网络。
Git:绝大多数操作都只需要访问本地文件和资源,不同连网。因为它在本地磁盘上就保存着所有当前项目的历史更新,所以处理起来速度飞快。
如果要浏览项目的历史,Git不同跑到外面的服务器上去取回数据,而直接从本地数据库读取后展示给你看。
如果想看一个当前版本和一个月前的版本之间有何差异,Git会取出一个月前的快照和当前文件作一次差异运算,而不同请求远程服务器来做这件事情。
如果CVCS的话,没有网络或者断开VPN你就无法做任何事情。使用Git话,就算你在飞机或者火车上,都可以非常愉快地频繁提交更新,等到有了网络的时候在上传到远程仓库。
保存数据方式:在保存到Git之前,所有数据都要进行内容的校验和计算,并将此结果作为数据的唯一标示和索引。换句话说,不可能在你修改了文件或目录之后,Git一无所知。如果文件在传输时变得不完整,或者磁盘损坏导致文件缺失,Git都能察觉。
算法原理:Git使用SHA-1算法计算数据校验和,通过对文件的内容或目录的结构计算出一个SHA-a哈希值,作为指纹字符串。该字符串由40个十六进制字符(0-9及a-f)组成,看起来是:24b9da6552252987aa493b52f8696cd6d3b00373。
实际应用:Git的工作完全依赖于这类指纹字符串,所有保存在Git数据库中的东西都是由此哈希值来做索引的,而不是靠文件名。
因为任何一种不可逆操作,比如删除数据,都会使回退或重现历史版本变得困难重重。
在别的VCS中,若还未提交更新,就有可能丢失或者混淆一些修改的内容。
但在Git里,一旦提交快照之后,就安全不用担心丢失数据,特别养成定期推送到其它仓库习惯的话。
九、文件流转的三个工作区域
Git管理项目时,文件流转的三个工作区域:Git的工作目录、暂存区域、以及本地仓库。
Git目录:每项目都有一个Git目录,它是Git用来保存元数据和对象数据库的地方,该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。
工作目录:从项目中取出某个版本的所有文件和目录,用以开始后续的工作的目录。这些文件实际上都是从Git目录中的压缩对象数据库汇总提取出来的,接下来就可以在工作目录中对这次文件进行编辑。
暂存区域:只不过是个简单文件,一般都放在Git目录中。有时候人们会把这个文件叫做索引文件,不过标准的说话是叫暂存区域。
如果是Git目录中保存着的特定版本文件,就属于已提交状态;
如果自上次取出后,做了修改单还没有放到暂存区域,就是已修改状态;
十二、初次运行Git前的配置
Git提供了一个叫做gitconfig的工具(实际是git-config命令,只不过可以通过git加一个名字来呼叫此命令),专门用来配置或读取相应的工作环境。而正是这些环境变量,决定了Git在各个环节具体工作方式和行为。
1./etc/gitconfi文件:系统中对所有用户都普遍适用的配置,若使用gitconfig--system读写的就是这个文件。
2.~/.gitconfig文件:用户目录下的配置文件只适用于该用户,若使用gitconfig--global读写的就是这个文件。
3.当前项目的git目录的配置文件(也就是工作目录中的.git/config文件):这里的配置仅仅对当前项目有效,每一个级别的配置都会覆盖上层相同的配置,所以.git/config文件里的配置会覆盖/etc/gitconfig中的同名变量。
在Windows系统上,Git会找寻用户主目录下的.gitconfig文件,主目录即$Home变量指定的牡蛎,一般是C:\Documents
and Settings\$USER。此外,Git还会尝试寻找/etc/gitconfig文件,只不多看当初Git装在什么位置,此目录作为根目录来定位。
第一个要配置的是你的个人用户名称和电子邮件。这两条配置非常重要,每次Git提交时都会引用者两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:
git config -global user.name "Peng CX"
git config -global user.email xiang18610224709@live.com
使用--global选项,那么更改的配置文件就位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果在某个特定的项目中使用其他名字或邮件,只要去掉--golable宣子昂重新配置即可,新的设定保存到当前项目的.git/config文件里。
接下来要设置的是默认使用的文本编辑器。Git需要输入一些额外的消息的时候,会自动调用一个外部文本编辑器给你用。默认会使用操作系统指定的默认编辑器,一般可能是Vi或Vim。如果你有其它偏好,比如Emacs的话,可以重新设置:
git config --global core.editor emacs
还有一个比较常用的是,在解决合并冲突使用哪种差异分析工具,比如要改用vimdiff的话:
git config --global merge.tool vimdiff
Git可以理解kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和opendiff等合并工具的输出信息。当然你也可以指定自己的开发工具。
有时会看到重复的变量名,那就说明它们来自不同的配置文件(比如/etc/gitconfig和~/.gitconfig),不过最终Git实际采用最后一个。
可以直接查阅谋个环境变量的设定,只要把特定的名字跟在后面即可,如下:
想了解Git的格式工具该怎么用,可以阅读它们的使用帮助,方法有:
相关推荐
完全学会Git、GitHub、Git Server的24堂课
GitHub高级特性:GitHooks与GitLFS.docx
GitHub:版本控制与Git基础.docx
【标题】"live-git-gitHub:Git-GitHub-Rocketseat" 涉及到的知识点主要集中在Git和GitHub这两个核心工具的使用上,以及它们在软件开发中的应用,特别是与JavaScript相关的项目管理。Rocketseat是一家知名的在线教育...
github使用工具:Git-2.30.1-64-bit+TortoiseGit-2.12.0.0-64bit
读书笔记:git github学习指南
git基本操作从GitHub上克隆代码git clone [url]从GitHub或者gitee上克隆代码git pull从GitHub更新克隆的代码本地操作GitHubgit init在对应的文件夹git init创建git库git status查看项目的当前状态。记住每次修改项目...
个人github、git学习笔记。包含Github和git的基础命令和介绍。由于网络问题在国外很难插入图片,把源文件的pdf导出版本进行上传。
Introduction-git-and-github 你好 git和GitHub简介
Git 和 GitHub 课程 :cat_face: 数字创新一平台课程 了解 Git 是什么及其重要性 良好终端性能的基本命令 突出操作系统之间的主要差异 了解 Git 工作原理的基本主题 Git 内部对象 启动 Git 并创建提交 在生命周期中...
解决fatal:remote error:You can’t push to git://github.com/username/*.git问题的办法 今天Git push的时候 fatal:remote error: You can't push to git://github.com/username/*.git Use git@github....
4-Git和GitHub Git和GitHub专业课程
4. **推送到GitHub**: 使用`git push -u origin main`(或你的主分支名)将本地仓库的更改推送到GitHub。 5. **克隆仓库**: 如果要获取别人的项目,可以使用`git clone https://github.com/用户名/仓库名.git`将...
使用github以及git共享代码的方法,和命令详解,来自官方
接下来,我们将使用**git bash**,这是一个模拟Linux命令行环境的工具,让你在Windows系统上也能方便地使用Git命令。安装Git后,它会自动包含Git Bash。打开Git Bash,你将在Windows环境下获得类似于Linux终端的体验...
### 如何将本地代码推送到GitHub:详尽指南 #### 一、理解GitHub的重要性 **GitHub**是全球最大的代码托管平台之一,对于开发者而言,它不仅是一个存储代码的地方,更是一个促进协作、学习和交流的强大社区。通过...
全文辅以生动的实际案例,旨在让初学者甚至是小学生们都能理解版本控制的重要性和实际应用技巧,进而熟练运用Git和GitHub。 适用人群:初学者或有意向深入了解Git和GitHub的操作和应用场景的技术爱好者。 使用场景及...
2. **git**:Git 是由 Linus Torvalds 开发的版本控制系统,它的主要特性包括: - 分布式:每个开发者的本地都有一份完整的仓库副本,可以离线工作。 - 数据完整性:Git 使用 SHA-1 哈希算法确保数据的完整性和...
Git与Github教程详细介绍了Git的工作机制,Git命令行的基础学习,Git-Eclipse和Nginx的准备工作,Git与Github分支体系,Git与Github的远程和本地工作原理,Git与Github克隆实战和最后的课程精华总结部分,可以帮助...
本文来自ibm,文章介绍Git的最后一个特性:三种状态和三个工作区,然后介绍Git的核心功能:Git分支,最后介绍Git的一些日常操作。在本系列的前两篇文章讲解了Git的和。从本篇文章开始,我将结合实验和实际的场景详细...