Praca z dużymi plikami w repozytorium Git

Usługi Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

Użyj usługi Git dla plików źródłowych, Azure Artifacts dla zależności i usługi Git LFS w przypadku dużych plików binarnych, które często się zmieniają. Jeśli repozytorium zawiera już duże pliki, ten artykuł pomaga zdecydować, co zachować w usłudze Git, co należy wyprowadzić i kiedy usunąć pliki binarne z historii.

Wybieranie miejsca przechowywania każdego pliku

Jeśli decydujesz, co zrobić z plikami, które znajdują się już w repozytorium, zacznij tutaj:

  • Zachowaj pliki źródłowe, skrypty i pliki tekstowe w usłudze Git.
  • Przenieś zależności i pakiety do ponownego użycia do zarządzania pakietami Azure Artifacts.
  • Użyj Git LFS do dużych plików binarnych, które często się zmieniają i słabo nadają się do porównywania różnic.
  • Usuń duże pliki binarne z historii repozytorium, jeśli są już zaewidencjonowane i nie należą już do nich. Zobacz Usuwanie dużych plików z repozytorium.

Jeśli repozytorium jest już duże, przed wybraniem sposobu przechowywania sprawdź repozytorium i limity wypychania zmian. Zobacz ograniczenia Git dotyczące plików, wypchnięć i ścieżek, które mają wpływ na duże repozytoria.

Wybieranie odpowiedniej opcji magazynowania dla usługi Git, zarządzania pakietami i usługi Git LFS

Użyj tej tabeli, aby wybrać najlepsze dopasowanie.

Typ pliku lub scenariusz Użyj
Kod źródłowy, skrypty i pliki tekstowe Git
Zależności i pakiety do ponownego użycia zarządzanie pakietami Azure Artifacts
Duże pliki binarne, które często się zmieniają Git LFS
Azure DevOps Server Git LFS i Kerberos Zobacz wskazówki dotyczące protokołu Kerberos w tym artykule i połączony artykuł na końcu

Usługa Git działa najlepiej w przypadku plików źródłowych opartych na tekście i innej zawartości, która zmienia się w małych, czytelnych przyrostach.

Duże pliki binarne nie nadają się do zwykłego magazynu Git, ponieważ:

  • Usługa Git efektywnie przechowuje różnice wersji dla kodu źródłowego, skryptów i plików tekstowych.
  • Duże pliki, które zmieniają się całkowicie z wersji na wersję, słabo się kompresują i słabo nadają się do porównywania różnicowego.
  • Duże pliki binarne wydłużają czas klonowania, pobierania, tworzenia gałęzi i przełączania.

W przypadku dodawania dużych, nieszyfowalnych plików, takich jak pliki binarne do repozytorium, należy zachować pełną kopię tych plików w repozytorium za każdym razem, gdy zatwierdzisz zmianę. Jeśli w repozytorium istnieje wiele wersji tych plików, znacznie zwiększają one czas na wyewidencjonowanie, rozgałęzienie, pobieranie i klonowanie kodu.

Które pliki należą do usługi Git?

Użyj najprostszej opcji, która odpowiada typowi pliku i częstotliwości jego zmian.

Zachowaj kod źródłowy w usłudze Git, a nie zależności

Użyj narzędzia Git dla plików, które zespół edytuje bezpośrednio. Nie przechowuj zależności w repozytorium i udostępniaj je za pomocą menedżera pakietów.

  • Umieść pliki źródłowe w usłudze Git.
  • Przechowuj biblioteki DLL, pliki bibliotek i inne zależności poza repozytorium.
  • Użyj zarządzania pakietami do obsługi wersji i wdrażania zależności.

Zarządzanie pakietami łączy zależności i instaluje pliki w systemie podczas wdrażania pakietu. Pakiety są wersjonowane w celu zapewnienia, że kod testowany w jednym środowisku działa tak samo w innym środowisku, o ile środowiska mają te same zainstalowane pakiety.

Nie zatwierdzaj danych wyjściowych kompilacji

Użyj narzędzia Git dla źródła, a nie kompiluj danych wyjściowych ani artefaktów testowych.

  • Nie zapisuj w repozytorium plików binarnych, logów, wyników śledzenia ani danych diagnostycznych.
  • Udostępniaj logi i informacje śledzenia za pośrednictwem śledzenia elementów roboczych lub przez udostępnianie plików w zespole.

Przechowywanie małych plików binarnych w usłudze Git

Usługa Git służy do obsługi małych plików binarnych tylko wtedy, gdy zmieniają się rzadko.

  • Dobrymi przykładami są obrazy internetowe, ikony i inne małe zasoby sztuki.
  • Przechowywanie tych plików w usłudze Git zachowuje spójny przepływ pracy dla zespołu.

Ważne

Nawet małe pliki binarne mogą powodować problemy, jeśli są często aktualizowane. Na przykład 100 zmian w pliku binarnym o rozmiarze 100 KB zużywa tyle samo miejsca co 10 zmian w pliku binarnym o rozmiarze 1 MB. Ze względu na częstotliwość aktualizacji mniejszy plik binarny spowalnia wydajność rozgałęziania częściej niż duży plik binarny.

Unikaj dużych, często aktualizowanych zasobów binarnych

Usługa Git nie może efektywnie przechowywać dużych plików binarnych, ponieważ te pliki często zmieniają się między wersjami i są zwykle kompresowane.

  • Usługa Git przechowuje pełną zawartość każdej wersji.
  • Rozmiar repozytorium rośnie wraz z upływem czasu.
  • Operacje klonowania, tworzenia gałęzi, pobierania i przełączania stają się wolniejsze.

Ponieważ Git musi przechowywać pełną zawartość każdej wersji, deltafikacja i kompresja niewiele pomagają. W miarę gromadzenia się tych plików repozytorium staje się większe, rozgałęzianie staje się wolniejsze i wydłuża czas klonowania.

Strategie dla dużych plików źródłowych binarnych

  • Nie przesyłaj skompresowanych archiwów do repozytorium. Rozpakuj dane, a zamiast tego zatwierdź pliki źródłowe, które można porównywać.
  • Unikaj zatwierdzania skompilowanego kodu i innych zależności binarnych. Twórz je lub dostarczaj za pomocą zarządzania pakietami.
  • Przechowuj konfigurację i inne dane ustrukturyzowane w różnych formatach zwykłego tekstu, takich jak JSON.

Co to jest usługa Git Large File Storage (Git LFS)?

Użyj usługi Git Large File Storage (LFS) dla plików źródłowych, które często zmieniają się i znacznie różnią się między wersjami.

Git LFS:

  • Przechowuje wskaźniki do dużych plików w repozytorium zamiast pełnej zawartości pliku.
  • Przechowuje zawartość binarną w oddzielnym magazynie zdalnym.
  • Pobiera poprawną wersję podczas klonowania lub przełączania gałęzi.
  • Zachowuje standardowy sposób pracy z Git w przypadku dużych plików binarnych, bez konieczności przenoszenia pełnej zawartości tych plików przy każdym klonowaniu i przełączaniu gałęzi.

Korzyści z usługi Git LFS

Usługa Git LFS utrzymuje przepływ pracy usługi Git podczas przenoszenia dużej zawartości pliku z repozytorium głównego.

  • Twój zespół może nadal korzystać z tego samego kompleksowego przepływu pracy usługi Git.
  • Duże pliki pozostają poza główną historią repozytorium, co pomaga zachować możliwość zarządzania repozytorium.
  • Blokowanie plików obsługuje współdzieloną pracę na dużych, nieszyfowalnych zasobach, takich jak filmy wideo, dźwięki i mapy gier.

Azure DevOps Services w pełni obsługuje usługę Git LFS i oferuje ją bezpłatnie. Aby użyć LFS, zainstaluj klienta Git LFS, skonfiguruj śledzenie plików, które chcesz przechowywać w LFS, a następnie wypchnij zmiany do Azure Repos.

Aby uzyskać wskazówki dotyczące Azure DevOps Server i protokołu Kerberos, zobacz Kerberos i Git LFS.

Ograniczenia usługi Git LFS

Git LFS nadal wiąże się z kilkoma kompromisami, które trzeba uwzględnić:

  • Każdy klient usługi Git musi zainstalować klienta usługi Git LFS i zrozumieć jego konfigurację śledzenia.
  • Jeśli klient nie jest zainstalowany lub poprawnie skonfigurowany, podczas klonowania pobierane są dane wskaźnika zamiast pliku binarnego.
  • Usługa Git nie może scalić różnych wersji pliku binarnego, więc koledzy z zespołu nadal muszą koordynować zmiany.
  • Usługa Git LFS zapewnia blokowanie plików, ale użytkownicy nadal muszą ściągnąć najnowszą kopię przed rozpoczęciem pracy.
  • Azure Repos nie obsługuje protokołu Secure Shell (SSH) dla repozytoriów z plikami śledzonymi przez Git LFS.
  • Przeciągnięcie pliku binarnego do interfejsu internetowego powoduje zapisanie pliku binarnego w repozytorium, a nie wskaźnika LFS.
  • Duże przekazywanie może być ograniczone przez dostępne wolne miejsce, bieżące obciążenie i limit przekazywania na godzinę.

Format pliku Git LFS

Plik zapisywany do repozytorium dla pliku śledzonego przez Git LFS zawiera kilka wierszy, przy czym każdy wiersz zawiera parę klucz/wartość:

version https://git-lfs.github.com/spec/v1
oid a747cfbbef63fc0a3f5ffca332ae486ee7bf77c1d1b9b2de02e261ef97d085fe
size 4923023

Uwaga

Planowanie dotyczące Azure DevOps Server i protokołu Kerberos

Jeśli używasz Azure DevOps Server i uwierzytelniania systemu Windows, uwzględnij protokół Kerberos podczas korzystania z Git LFS. Usługa Git LFS 2.10.0 lub nowsza obsługuje uwierzytelnianie Kerberos.

Jeśli musisz zaktualizować starsze wskazówki dotyczące Azure DevOps Server, zacznij od protokołu Kerberos i git LFS oraz powiązanych wskazówek dotyczących uwierzytelniania Azure DevOps Server.