Как распечатать старую версию Git LFS-файла на стандартный вывод (git show / git cat-file для LFS)? - PullRequest
0 голосов
/ 08 июня 2018

Другим названием этого вопроса может быть «Как получить несколько версий управляемого файла Git-LFS?»

Я хотел бы проверить несколько версий файла, хранящегося в Git-LFS.Поэтому я хотел бы, чтобы несколько версий этого файла бок о бок в моем рабочем каталоге.Что-то вроде этого я имею в виду:

git show v1:./myfile.ipynb > myfile-v1.ipynb
git show v2:./myfile.ipynb > myfile-v2.ipynb

Это не работает должным образом: файл управляется Git-LFS, поэтому для git show его содержимое в каждой версии выглядит как

version https://git-lfs.github.com/spec/v1
oid sha256:62aafe00ec8b61a37dd729e7d3a723382...
size 20439

Меня интересует «истинное» содержимое файла, управляемого Git-LFS, а не файл указателя, который LFS хранит в собственном дереве Git.

Как я могу создать неотслеживаемый пользовательскийименованные файлы, каждый из которых содержит определенную версию файла, отслеживаемого Git-LFS?Это не обязательно должна быть одна команда, я смирился с Git, которому требуются многошаговые сценарии для одноэтапных действий.

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Обновление : @ Ответ Маркониуса - это правильный способ сделать это.

Вот скрипт, который делает это на основе экспериментов с репозиторием LFS.Я не рассматривал протокол LFS в деталях, поэтому, возможно, были и неучтенные причуды, но он работал для моего простого случая.

git-lfs-cat-file

Соответствующие данные:

  • Файлы LFS хранятся в индексе со следующей структурой:

    version https://git-lfs.github.com/spec/v1
    oid sha256:abcdeffffffffffffff
    size nnnnnnnn
    
  • Фактический объект LFSбудет тогда под .git/lfs/objects/ab/cd/abcdeffffffffffffff.

0 голосов
/ 06 февраля 2019

Ввод указателя lfs в git lfs smudge даст вам то, что вы хотите.Например:

git cat-file blob <blob-sha> | git lfs smudge

Или, если у вас есть коммит (хеш коммита, имя ветви, просто HEAD и т. Д.) И имя файла:

git cat-file blob <commit-ish>:path/to/my-large-file.name | git lfs smudge

Вы можете перенаправить вывод в файл.

0 голосов
/ 08 июня 2018

Когда я в последний раз работал с LFS, на странице проекта были разговоры о лучшей интеграции - например, о написании инструментов сравнения и / или слияния, которые можно подключить через .gitattributes.Похоже, что они не считаются приоритетными, поскольку основной предполагаемый вариант использования LFS - защита больших двоичных файлов (но, конечно, я сталкивался с несколькими случаями, когда у меня был большой текстовый файл,или единственный разумный способ установить правила отслеживания LFS - достаточно широкая сеть для перехвата небольших текстовых файловЯ не уверен, был ли достигнут какой-либо прогресс в этих инструментах, так как я давно не смотрел на страницу проекта.

В отсутствие этих вещей, нет особо «изящного» способа сделать то, что выспрашиваешь.Вы можете настроить два рабочих дерева и проверить разные версии.Вы можете проверить одну версию, переименовать ее, а затем проверить другую.

...