-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path10.git_lfs.qmd
More file actions
99 lines (74 loc) · 6.35 KB
/
10.git_lfs.qmd
File metadata and controls
99 lines (74 loc) · 6.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
---
title: "Git LFS"
author: "Lev Kovalenko"
format:
revealjs:
theme: dark
self-contained: true
echo: true
source: true
jupyter: "epml"
---
## {background-image="images/git-lfs.jpg" background-size="80%"}
::: {.notes}
Git-LFS предназначен для хранения [относительно] больших файлов в Git серверах, и является расширением Git. Изначально он появился что бы решить проблему, когда дизайнеры добавляли свои макеты в репозиторий, при большом количестве таких файлов гит начинал тормозить, поэтому появился git large file system. LFS позволяет перенести большие файлы на отдельный удаленный сервер. Вместо них он сохраняет легковесные указатели в репозиторий. Когда вы извлекаете версию с таким указателем, LFS просто ищет исходный файл (возможно, на сервере, если он не находится в своем собственном, специальном кэше) и загружает его для вас.
:::
## Установка^[Не все службы размещения кода уже поддерживают LFS. Однако пользователю [GitLab](https://about.gitlab.com/blog/2015/11/23/announcing-git-lfs-support-in-gitlab/) и [GitHub](https://docs.github.com/en/repositories/working-with-files/managing-large-files/configuring-git-large-file-storage)]
Установить расширение командной строки git
```sh
sudo apt install git-lfs
```
Инициализировать в репозитории
```sh
git lfs install
```
::: {.notes}
Как установить git lfs? По сути вам нужно сначала добавить бинарный модуль в систему. Точно также, как и git. После этого его надо инициализировать в репозитории.
:::
## Использование
Добавить правила для **больших файлов**
```sh
git lfs track "*.csv"
```
Добавить в индекс `.csv` файл
```sh
git add path/to/file.csv
```
Закомитить и отправить в удаленный репозиторий
```sh
git commit -m "add file.csv"
git push
```
::: {.notes}
Как его использовать. Тут тоже все просто - добавляем правило для отслеживания больших файлов. Их может быть несколько, а потом все просто, работаем как с обычным файлом, добавляем в индекс, комитим и пушим. Только тут наш файл полетит в lfs хранилище.
:::
## Ограничения
- По объему lfs хранилища
- На трафик к lfs хранилищу
- Для CI инструментов
::: {.notes}
Этот инструмент был бы прекрасен, если бы владельцы площадок типа gitlab или github не вводили жесткие ограничения на размер хранилища и объем трафика.
Если вы отправите файл размером 500 МБ в Git LFS, вы будете использовать 500 МБ выделенного вам хранилища и не использовать трафик. Если вы измените 1 байт и снова отправите файл, вы будете использовать еще 500 МБ хранилища и не будете использовать трафик, в результате чего общее использование для этих двух отправок составит 1 ГБ хранилища.
Если вы спулите файл размером 500 МБ, который отслеживается с помощью LFS, вы будете использовать 500 МБ трафика, выделенного владельцем репозитория. Если соавтор вносит изменение в файл, а вы скачиваете новую версию в свой локальный репозиторий, вы будете использовать еще 500 МБ трафика, в результате чего общее использование для этих двух загрузок составит 1 ГБ трафика.
Если GitHub Actions скачивает файл размером 500 МБ, который отслеживается с помощью LFS, он будет использовать 500 МБ трафика, выделенной владельцем репозитория.
Если вы используете более 1 ГБ пропускной способности в месяц без покупки пакета данных, поддержка Git LFS отключается в вашей учетной записи до следующего месяца.
Конечно можно использовать [selfhosted](https://github.com/git-lfs/git-lfs/wiki/Implementations) версию для lfs хранилища и для pet проектов никто не мешает вам это сделать, но все-таки это специализированные хранилища с определенным апи и в компании потребуется дополнительные ресурсы для поддержки такого решения. А в популярных системах размещения репозиториев за это надо платить денежку.
:::
## Pros&Cons
:::: {.columns}
::: {.column width="50%"}
**Pros**
- Git extention
- Self-hosted версия
- Любые данные
- Не требует изменений в коде
:::
::: {.column width="50%"}
**Cons**
- Требует LFS хранилище
- Нет анализа diff версий
- Не переиспользуемо в прод
- Мало документации
- Полностью зависит от репозитория
:::
::::