Подтвердить что ты не робот

Git -lfs: где хранится файл? как их получить?

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

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

Например, я добавляю и отслеживаю файл tar tar 3.7GB в репо и нажимаю его:

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

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

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

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

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

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

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

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

4b9b3361

Ответ 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, который "не находится в готовом состоянии производства", поэтому для его настройки потребуется определенная работа. так что ваши двоичные файлы загружаются на сервер, который вы администрируете. Если резервное копирование этих файлов является приоритетом, и вы не хотите использовать один из implementations (Amazon S3 и т.д.), Вы можете попробуйте использовать другую систему хранения двоичных файлов, которая работает с git, например git-media, git-annex, git-fat, git-bigstore.... Я не изучал эти параметры в глубину, поэтому не мог сделать рекомендация.

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

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