0%

简介

LFS 全称 Large File Storage,顾名思义是用来存储大文件的。在 Git 中,每次提交都会将改动转为二进制文件保存起来,但是对于图片、视频、音频等本来就是二进制的文件,Git 无法识别出差异,所以每次提交都会生成一个新的拷贝。也就是说,一个 100M 的图片,哪怕只改了一点点,提交新版本后它都会在仓库里占用 200M 的空间。

为了解决这个问题,GitHub 提出了 LFS,将图片、视频、音频等大文件存储到主仓库外的一个仓库里。

原理

LFS 的原理是将大型二进制文件存储到主仓库外的另外一个仓库里,本地仓库并不会存储这些大文件,仅仅是保留一个指向大文件的指针,当用户切换到某一分支时,LFS 会根据当前分支的情况下载对应的大文件。

使用

下载 LFS

可以官网下载安装

Mac 用户可以通过 homebrew 安装

install git-lfs```。
1
2
3
4
5
6
7
8

### 安装 LFS
进入目标仓库目录,然后运行 ```git lfs install``` 安装 LFS。

### 使用 LFS
通过下面命令选择你希望 LFS 管理的文件类型或者目录。

```git lfs track "*.psd"

选择好后别忘了添加 .gitattributes。

add .gitattributes```
1
2

一切就绪,后面当我们提交的文件中包含 .psd 类型的文件时,Git 会自动使用 LFS 对其进行管理。

git add file.psd
git commit -m “Add design file”
git push origin master
```

结论

建议二进制文件都使用 LFS 进行管理,避免频繁的改动使仓库越来越大,如果当前 Git 仓库已经提交了很多大文件变得很大,还有个后悔药可以吃。

变基本名 rebase ,也不知道是谁给它起了这么拗口的名字。

上一篇文章我们学习了 merge 操作,知道了两个分支之间同步代码可以使用git merge命令,但是 merge 命令有一个小缺点让一部分完美主义者无法接受,那就是每次 merge 完成之后,都会生成一个新的 commit。

假如频繁的从 master 分支同步代码到 develop 分支,那 develop 分支上会多出来很多 merge 节点,这些节点有些人觉得很多余,污染了提交历史,让它阅读起来很困难。也有一部分人觉得应该保留开发过程中的每一个操作,方便追踪问题,所以不应该去掉这些节点。两种想法没有对错,仅看个人习惯,如果想同步代码后不产生新的节点,那可以使用一个新的命令git rebase

阅读全文 »

在 develop 分支开发完成后,需要将 develop 分支的代码同步到 master,这时 merge(合并)就派上了用场。

merge 是 Git 中非常常用的一个命令,并行开发中各个分支代码的同步基本都要使用 merge。

阅读全文 »

简介

每次提交新版本,Git 都会把新版本连接到上一个版本的后面,串成一条时间线,这个时间线就是分支。

分支管理是 Git 的强项,有别于 SVN 的分支是整个项目的一个拷贝,Git 的分支仅仅是一个指向某次提交的指针。所以 Git 创建、删除分支有天然的优势,仅仅创建、删除一个指针即可,成本极低。

阅读全文 »

背景

随着项目的不断开发,仓库自然而然会变得越来越大,如果项目中只是纯文本文件,那仓库的大小增加的会非常缓慢。但是如果仓库中存放了视频、图片、音频等比较大的二进制文件,那这个仓库估计经历几次提交就爆炸了。尤其 clone 仓库时,如果你面对几十个 G 的仓库,估计还没开发心态就崩了。

阅读全文 »

远端

根据 Git 的特点,每个人本地都是一个完整的版本库,没有服务器其实也是可以工作,只要两台电脑能够互相连接上,就可以进行数据的交换。但是在实际使用时,没人会通过这种方式互相推送修改,因为两台电脑很有可能不在一个局域网下。所以 Git 一般也会有一个中央服务器,他的存在就是为了方便大家进行数据的交换。

远端指的就是这台中央服务器上的版本库。

阅读全文 »

git commit 会将暂存区的所有文件拿出来,生成一个新的版本。那么在背后 git commit 都做了哪些操作呢,下面详细介绍下。

阅读全文 »

前文有了解到,git add fileName 命令会将指定文件加入到暂存区,那么 git add 背后都做了哪些操作,下面详细介绍下。

阅读全文 »

工作流程

Git 的本地仓库主要由三部分构成:

  1. 工作目录,持有实际文件。
  2. 暂存区,类似于缓存区域,存放临时修改。
  3. HEAD 指针,一般指向最后一次提交。
阅读全文 »