GIT相关

GIT

局限性

不要用git管理二进制文件

所有的版本控制系统,其实只能跟踪文本文件的改动,而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,例如记录图片从 100KB 改成了 120KB,但是并不知道具体文件改了什么。

不要使用git管理word

Microsoft 的 Word 格式是二进制格式,因此,版本控制系统是没法跟踪 Word 文件的改动的。

git下不要使用windows自带的记事本

Microsoft 开发记事本的团队使用了一个不合理的方法来保存 UTF-8 编码的文件,他们在每个文件开头添加了 0xefbbbf(十六进制)的字符,建议使用Notepad++。

命令行不再赘述

理解工作区 暂存区 分支区

git存在一个.git文件,里面存储配置信息和分支,以及一个暂存区
在进行提交时
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
而git diff是查看暂存区和工作区(实际文件夹内容)的区别,所以git add后git diff就不再显示区分
所以我们可以从暂存区、分支区、远程库 这三条途径来还原历史

理解分支管理

分支实际上是以图存储的,而所谓分支也及时master指针和其他分支指针的改动,在A、B分支不平行时则直接改动指针完成分支合并,若存在平行段,会要求显示的指定冲突部分如何确定。

理解文件存储

git中在Objects文件夹存储组件,并利用hash算法SHA-1根据文件内容组件名,即形成键值对管理。
组件分四种:

  1. Commit 分支:
    内有一个tree组件,代表git库根目录,下附带若干对应于库中文件的blob和tree;内还有commit文件,即指向其他commit,即分支图数据结构的指针,新的commit拥有和老commit相同的组件,但是内容改变的部分发生了变换,所以一个blob可能被两组commit/tree共享
  2. Tree 文件夹:内部有若干记录,指向不同的组件
  3. BLOB 文本:若文本内容没有改变,则不会新建blob;blob并不存储文本信息,而是存储其内容
  4. Tag 标签

组件

Git中存在两种对象 - 松散对象和打包对象。
简单的理解就是松散对象存储使用代价低,用来存文件的改变,打包对象代价高用来存储一系列松散对象hash-offset用以组合成文件。
Git使用SHA-1值的前两个字符作为子目录名字, 所以一个目录中永远不会包含过多的对象. 文件名则是余下的38个字符。

github

github是基于git的面向开源及私有软件项目的托管平台,比较方便的github使用方式是利用github推出的GUI GithubDesktop。

原文地址:https://www.cnblogs.com/gjl-blog/p/8511461.html