Удаление отсутствующих объектов LFS из репозитория git - PullRequest
5 голосов
/ 04 апреля 2019

Я пропускаю кучу объектов LFS в моем git-репозитории *, как на клиентах, так и на сервере. Я знаю, что эти объекты потеряны, и это нормально. К сожалению, это означает, что git lfs fetch --all или даже git lfs push --all origin потерпит неудачу.

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

Как лучше всего поступить?

* Чтобы уточнить, мне не хватает некоторых файлов LFS на сервере, но не всех и не всех ревизий этих файлов.

Например, у меня есть файл foo.png, который был изменен в 3 коммитах:

  • foo.png (Версия 1, LFS Sha: 03cfd743)
  • foo.png (Версия 2, LFS Sha: 661f0797)
  • foo.png (Версия 3, LFS Sha: 5fa2f122)

На сервере LFS больше нет версии 2 файла foo.png, поэтому я хотел бы удалить этот коммит из истории. К сожалению, git lfs не сообщает мне, какой коммит нарушен, он просто говорит, что 661f0797 отсутствует.

(Для записи я нашел отсутствующие файлы, поэтому у меня больше нет этой проблемы, но решение все еще должно быть интересным!)

Ответы [ 3 ]

1 голос
/ 16 апреля 2019

Вы можете untrack файлы, руководство здесь .

Примеры:

Всего один файл:

git lfs untrack "/path/to/my-file.gif"

СПодстановочный знак: вы можете поймать несколько файлов одной командой:

git lfs untrack "*.gif"
0 голосов
/ 17 апреля 2019

Сделайте git reindex и создайте новые записи в файлах, пожалуйста, прочитайте следующее

git reset [-q] [<tree-ish>] [--] <paths>...
       This form resets the index entries for all <paths> to their state at <tree-ish>. (It does not
       affect the working tree or the current branch.)

       This means that git reset <paths> is the opposite of git add <paths>.

       After running git reset <paths> to update the index entry, you can use git-checkout(1) to check
       the contents out of the index to the working tree. Alternatively, using git-checkout(1) and
       specifying a commit, you can copy the contents of a path out of a commit to the index and to the
       working tree in one go.

источник: man git-reset

0 голосов
/ 16 апреля 2019

Вы пробовали простое ( Рекомендуется сделать резервную копию перед использованием следующей команды ):

rm -f .git/index
git reset
...