2016-01-26 2 views
27

У меня есть проект, в котором я хранил видеофайлы с Git LFS. Теперь я столкнулся с некоторыми осложнениями с моим сервером сборки, который еще не поддерживает Git LFS. Поскольку это внешняя служба, я не могу повлиять на процесс сборки и поэтому хочу переместить файлы из Git LFS обратно в «обычный» Git. Мне удалось разобрать типы файлов с git lfs untrack '<file-type>', но git lfs ls-files по-прежнему предоставляет список ранее добавленных файлов.Переместить Git LFS в файлы отслеживания под обычным Git

Я предполагаю, что я мог бы удалить файлы, внести изменения, а затем вручную добавить их повторно, но действительно ли это рекомендуется делать?

ответ

16

Issue 641 упоминает ту же проблему.

Я попытался прекратить использование Git LFS, но не нашел способ убрать мои предыдущие отслеживаемые файлы указателя с помощью git lfs uninit, git lfs untrack, git rm ... после того, как я переместить эти файлы обратно все еще списки, как отслеживается Git LFS с git lfs ls-files , как я могу отказаться от всего материала Git LFS из своего репо?

Ответ:

  1. Удалить все filter.lfs * записи мерзавец конфигурации с git lfs uninit..
  2. Очистить любые атрибуты, которые используют фильтр lfs, в .gitattributes, запустив git lfs untrack для каждого типа файла или удалив .gitattributes, если LFS - это все, что вы когда-либо использовали.

После этого любые добавленные файлы будут отправляться прямо в git.

Но это было не так просто:

позже я в конечном итоге LFS файлы указатели в моем рабочем каталоге и должен восстановить все мои фотографии из .git/lfs используя SHA1 хэш хранящегося в этих указателях вручную.


Update марта 2016 года issue 957 иллюстрирует возможное решение по tstephens619:

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

  • Создать список всех файлов в настоящее время отслеживаемых git-lfs, отфильтровывать *.gz и *.rpm (я хочу еще отслеживать тех, расширения с git-lfs)

    git lfs ls-files | grep -vE "\.gz|\.rpm$" | cut -d ' ' -f 3 > ~/temp/lfs-files.txt 
    
  • остановка отслеживания небольших графических файлов

    git lfs untrack "*.tts" 
    git lfs untrack "*.bfx" 
    git lfs untrack "*.ttf" 
    git lfs untrack "*.xcf" 
    git lfs untrack "*.pkm" 
    git lfs untrack "*.png" 
    
  • Временно uninit git-lfs

    git lfs uninit 
    # Git LFS 2.x+ 
    git lfs uninstall 
    
  • Используйте список файлов, чтобы коснуться каждого файла:

    cat ~/temp/lfs-files.txt | xargs touch 
    

git status теперь будет отображаться каждый файл как модифицированный

  • добавить изменения в git Индекс (я сделал это через git gui)

  • совершить изменения, а затем повторно инициализации GIT-LFS

    git commit 
    git lfs init 
    
+0

Благодарим за обнаружение правильной проблемы из проекта. Тем не менее, даже это решение требует перемещения файлов вручную. Кажется странным, когда рабочий процесс от Git до Git LFS в основном «git rm --cached ' -> 'git add ' -> 'git commit', если у вас правильно настроено отслеживание. –

+0

@Klipi Я согласен: кажется, что нетрадиционный сценарий по-прежнему идеален. – VonC

+1

Я сделал новую проблему: https://github.com/github/git-lfs/issues/957 –

14

Я только недавно столкнулись с этой проблемой, когда активы были случайно добавлены git-lfs на одной ветке, которой не должно было быть. Мое решение было:

git lfs untrack '<file-type>' 
git rm --cached '<file-type>' 
git add '<file-type>' 
git commit -m "restore '<file-type>' to git from lfs" 

В результате переписывание мерзавца-LFS OID SHA256 указателей со стандартным содержимым файлов.

+1

С '.gitattributes' правильно настроен для отслеживания файлов, которые я хочу, это решение прекрасно работало.Гораздо проще, чем некоторые другие опубликованные решения. –

+0

Спасибо, это мне очень помогло! Я проголосовал. –

-1

Вы ничего не можете удалить из GIT LFS, и хотя представленные здесь решения могут работать (с изменениями), они требуют больших усилий и могут иметь побочные эффекты в вашем репозитории.

Если вы пришли сюда, пришло время спросить себя, хотите ли вы управлять своими большими файлами с помощью GIF LFS и сам GIT (который по своей сути плохо управляет большими файлами, потому что это распределенная система контроля версий) хороший выбор.

Если у вас много больших файлов, и вы являетесь одной организацией, работающей над вашим проектом, что-то вроде Subversion может работать лучше для вас.