Где хранятся файлы git-lfs?

Я пытаюсь понять, как использовать git-lfs. Я использую сервер gitlab EE.

Возможно, я что-то упустил, но мне не удалось найти никакой документации по git-lfs, кроме очень короткого руководства, в котором представлена ​​команда «track» и милые минутные видеоролики.

Например, я добавляю и отслеживаю tar-файл размером 3,7 ГБ в репо и нажимаю его:

git lfs track "*.tar"
cp <a folder>/a.tar .
git add a.tar 
git commit -m "add a.tar"
git push origin master

Вопрос 1: был ли загружен файл .tar на сервер gitlab в конце этого процесса? Неясно, поскольку команды «добавить» и «зафиксировать» заняли некоторое время (может быть, недостаточно, чтобы я мог задаться вопросом, были ли за это время загружены 3,7 ГБ), но отправка вообще не заняла времени (часть второй).

Вопрос 2: если файл был загружен на сервер, то где? Очевидно, не в том же месте, что и репо (в том-то и дело). Я спросил, потому что на моем сервере выполняется резервное копирование, и мне нужно знать, требует ли использование git-lfs обновления его каким-либо образом.

Вопрос 3: если файл не был загружен, означает ли это, что другие пользователи репозитория получат ссылку на файл на исходном компьютере, на который этот файл был добавлен? Есть ли способ изменить это место на сервере? (вернуться к вопросу 2)

Вопрос 4: после клонирования репозитория действительно не существует полного файла 3.4G, а "просто" текстовый файл с содержимым:

version https://git-lfs.github.com/spec/v1
oid sha256:4bd049d85f06029d28bd94eae6da2b6eb69c0b2d25bac8c30ac1b156672c4082
size 3771098624

Это конечно круто, и в этом все дело. Но что, если требуется доступ к полному файлу? как его скачать?

Я был бы рад получить прямой ответ на этот вопрос или ссылку на соответствующую документацию.


person Vince    schedule 09.12.2015    source источник


Ответы (1)


Ответ 1 Как объяснено в этом видео (на 1:27 ), когда вы отправляете файл, отслеживаемый git lfs, он перехватывается и помещается на другой сервер, оставляя указатель в вашем репозитории git. Как вы видите в ссылке, которую вы предоставляете в вопросе 4, это сработало для вас.

Ответ 2. Это немного сложнее. Читая документацию для git lfs smudge, мы имеем:

Считайте файл указателя Git LFS со стандартного ввода и запишите содержимое соответствующего большого файла в стандартный вывод. При необходимости загрузите содержимое файла из конечной точки Git LFS. Аргумент, если он указан, используется только для индикатора выполнения.

Конечную точку git lfs можно найти по выходным данным git lfs env. Моя «конечная точка» - это папка в моем репозитории (но не в нем), что заставляет меня думать, что GitLab создает репозиторий git на сервере в пространстве нашей учетной записи для хранения двоичных файлов.

Тем не менее, я не знаю, как бы вы это поддержали. GitHub предоставляет git lfs server, который «не находится в состоянии готовности к производству», поэтому он потребует некоторой работы с вашей стороны, чтобы настроить его таким образом, чтобы ваши двоичные файлы загружались на сервер, который вы администрируете. Если резервное копирование этих файлов является приоритетом, и вы не хотите использовать одну из реализаций (Amazon S3 и т. д.), вы можете попробовать другую систему хранения двоичных файлов, которая работает с git, например git-media, git-annex, git-fat, _9 _.... Я не изучал эти параметры подробно, поэтому не смог ' Я рекомендую.

Ответ 3. Если бы файл не был загружен с использованием git lfs, он был бы отправлен с использованием git, и у вас был бы двоичный файл в вашем репозитории git. Но ваш был загружен с использованием git lfs, как вы сказали в вопросе 4.

Ответ 4. Другие пользователи вашего репозитория после установки git lfs на свои локальные машины могут просто ввести git lfs pull, чтобы ввести двоичные файлы, которые вы отправили с помощью git lfs.

person houtanb    schedule 09.12.2015
comment
question1: сбивает с толку, потому что на видео файл загружается во время git push. На моей стороне git push занимает долю секунды. Вроде ничего не закачивает. git lfs push origin master, по-видимому, ничего не делает. Вопрос 4: git lfs pull display Git LFS: (0 из 2 файлов) 0 B / 3,85 ГБ, но больше ничего не делает. Файлы не скачиваются. - person Vince; 10.12.2015
comment
Значит файлы в свежем клоне не скачиваются? Тогда что-то не так с вашей настройкой. Я не знаю, что сказать вам о толчке, потому что он работает так, как описано в видео для меня. - person houtanb; 10.12.2015
comment
Не OP, но git lfs pull было тем, что я искал. :) Спасибо! (впервые в git-lfs) - person Zack; 19.02.2016
comment
Также новинка в git-lfs. git lfs pull работал у меня. Но что теперь, если я хочу преобразовать их обратно в указатели? Будет ли git lfs push работать? - person Vincent; 16.01.2018
comment
Что касается вопроса №4, начиная с версии git 2.15.0, обычная команда git clone имеет поддержку LFS встроенный. - person Dusklight; 16.07.2020