2016-01-26 31 views
27

Mam projekt, w którym zapisałem pliki wideo z Git LFS. Teraz wystąpiły pewne komplikacje z moim serwerem kompilacji, który jeszcze nie obsługuje Git LFS. Ponieważ jest to usługa zewnętrzna, tak naprawdę nie mogę wpłynąć na proces kompilacji, a zatem chciałbym przenieść pliki spod Git LFS z powrotem do "zwykłego" Gita. Udało mi się wykasować typy plików za pomocą git lfs untrack '<file-type>', ale git lfs ls-files nadal podaje listę wcześniej dodanych plików.Przenoszenie śledzonych plików LFS pod Git

Wyobrażam sobie, że mogę usunąć pliki, przesłać zmiany, a następnie ręcznie je ponownie dodać, ale czy jest to naprawdę zalecany sposób robienia rzeczy?

Odpowiedz

16

Issue 641 wspomina ten sam problem.

Próbowałam przestać używać Git LFS, ale nie znalazł sposób, aby przywrócić moje wcześniejsze śledzone pliki przy użyciu wskaźnika git lfs uninit, git lfs untrack, git rm ... po tym, jak przenieść te pliki z powrotem nadal wymienia jako śledzone przez Git LFS z git lfs ls-files , jak mogę zrezygnować z całego repozytorium z gry Git LFS?

Odpowiedź brzmiała:

  1. Usuń wszystkie wpisy filter.lfs * git config z git lfs uninit..
  2. Wyczyść wszelkie atrybuty korzystające z filtru LFS w .gitattributes, uruchamiając git lfs untrack dla każdego typu pliku lub usuwając .gitattributes, jeśli LFS jest wszystkim, co kiedykolwiek było używane.

Po tym, wszystkie dodane pliki pójdzie prosto do git.

Ale to nie było takie proste:

I później skończyć plików wskaźnika BAEL w moim katalogu roboczego i muszą odzyskać wszystkie moje zdjęcia z .git/lfs pomocą skrótu SHA1 przechowywanych w tych wskaźników ręcznie.


marcowej aktualizacji 2016 r issue 957 przedstawia możliwe rozwiązanie przez tstephens619:

zrobiłem ten sam błąd w tym kilka małych formatów graficznych na mojej liście git lfs śledzenia.
byłem w stanie przenieść te pliki z powrotem do git, wykonując następujące czynności:

  • Utwórz listę wszystkich plików aktualnie śledzone przez git-lfs, odfiltrować *.gz i *.rpm (Chcę nadal śledzić te rozszerzenia z git-lfs)

    git lfs ls-files | grep -vE "\.gz|\.rpm$" | cut -d ' ' -f 3 > ~/temp/lfs-files.txt 
    
  • Zatrzymaj śledzenie małe grafiki plików

    git lfs untrack "*.tts" 
    git lfs untrack "*.bfx" 
    git lfs untrack "*.ttf" 
    git lfs untrack "*.xcf" 
    git lfs untrack "*.pkm" 
    git lfs untrack "*.png" 
    
  • Tymczasowo uninit git-lfs

    git lfs uninit 
    # Git LFS 2.x+ 
    git lfs uninstall 
    
  • użyć listy plików dotknąć każdego pliku:

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

git status pokaże teraz każdy plik jako zmodyfikowany

  • dodać zmiany w git Indeks (Zrobiłem to poprzez git gui)

  • zatwierdzić zmiany, a następnie ponownie startowych git-LFS

    git commit 
    git lfs init 
    
+0

Dziękujemy za znalezienie właściwego problemu z projektu. Mimo to nawet to rozwiązanie wymaga ręcznego przenoszenia plików. Wydaje się dziwne, gdy przepływ pracy od Git do Git LFS jest w zasadzie 'git rm --cached ' -> 'git add ' -> 'git commit', o ile masz poprawnie skonfigurowany śledzenie. –

+0

@Klipi Zgadzam się: wygląda na to, że scenariusz "untrack" jest nadal możliwy do zrealizowania. – VonC

+1

Zrobiłem nowy problem na ten temat: https://github.com/github/git-lfs/issues/957 –

14

Właśnie niedawno napotkasz ten problem, gdy aktywa zostały przypadkowo dodany do git-lfs na jednej gałęzi, która nie powinna być. Moje rozwiązanie było:

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

Rezultatem jest przepisać z git-LFS oid wskaźników sha256 ze standardowych zawartości plików.

+1

Po ustawieniu '.gitattributes' do śledzenia plików, które chcę, to rozwiązanie działało pięknie.Znacznie prostsze niż niektóre inne opublikowane rozwiązania. –

+0

Dziękuję, to mi bardzo pomogło! Wcześniej głosowałem. –

-1

Nie można tak naprawdę usunąć niczego z GFS LFS i chociaż przedstawione tutaj rozwiązania mogą działać (z modyfikacjami), wymagają dużego nakładu pracy i mogą mieć skutki uboczne w repozytorium.

Jeśli przyszedłeś tutaj, nadszedł czas, aby zadać sobie pytanie, czy chcesz zarządzać dużymi plikami z GIF LFS i czy GIT (który jest z natury zły w zarządzaniu dużymi plikami, ponieważ jest to system kontroli wersji rozproszonej) dobry wybór.

Jeśli masz wiele dużych plików i jesteś pojedynczą organizacją pracującą nad projektem, coś takiego jak Subversion może działać lepiej dla ciebie.