Zgodność międzyplatformowa usługi Git

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Systemy plików Windows, macOS i Linux mają ograniczenia i zachowania, które nie zawsze obsługują co najmniej jedną platformę. Ponieważ usługa Git to technologia międzyplatformowa, deweloper może wykonać zatwierdzenie zawierające pliki lub foldery, które mają niezgodne nazwy z systemem plików innej platformy. Ochrona repozytorium przed tą niezgodnością jest ważna, ponieważ deweloperzy na innych platformach mogą nieświadomie wyewidencjonować zatwierdzenie, które uszkodzi ich katalogi robocze z powodu nieobsługiwanych nazw plików lub ścieżek.

Usługa Azure Repos oferuje trzy ustawienia zgodności międzyplatformowe, które pomagają chronić repozytorium przed wypychaniem zatwierdzeń niezgodnych z co najmniej jedną platformą. Te ustawienia są związane z następującymi ograniczeniami dotyczącymi systemów plików:

  • Uwzględnij wielkość liter
  • Ograniczenia dotyczące nazw plików i folderów
  • Ograniczenia długości ścieżki

Uwzględnij wielkość liter

Systemy plików systemu Windows i macOS są domyślnie niewrażliwe na wielkość liter (ale zachowywanie wielkości liter). W większości systemów plików z systemem Linux uwzględniana jest wielkość liter. Usługa Git została utworzona pierwotnie jako system kontroli wersji jądra systemu Linux, więc uwzględnia wielkość liter.

Mimo że usługa Git dla systemu Windows rozwiązuje wiele problemów z systemem operacyjnym bez uwzględniania wielkości liter, pozostaje kilka dziwactwa.

Nazwy plików i folderów

W systemie Linux wyewidencjonowanie repozytorium Git zawierającego zarówno File.txt, jak i file.txt nie ma problemu. Są to odrębne nazwy plików. W systemach Windows i macOS wyewidencjonowywanie obu plików powoduje zastąpienie drugiego. Jeśli dwa foldery różnią się tylko wielkością liter, ich zawartość jest mieszana razem w systemach plików bez uwzględniania wielkości liter.

Istnieją dwa sposoby naprawiania repozytorium, które zawiera konflikty przypadków:

  • Zapoznaj się z repozytorium w środowisku z uwzględnieniem wielkości liter. Zmień nazwy plików i folderów, aby nie były już w konflikcie, a następnie wypchnęły te zmiany do repozytorium. Podsystem Windows dla systemu Linux jest jednym z takich środowisk.
  • Użyj polecenia git mv -f <conflicting name> <non-conflicting name> dla każdego konfliktu. Należy zachować ostrożność, aby używać dokładnego wielkich liter w obu nazwach plików.

Warto unikać tworzenia konfliktów przypadków w pierwszej kolejności. Usługa Azure Repos oferuje ustawienie wymuszania wielkości liter, aby zapobiec wypchnięciom, które mogłyby prowadzić do tej sytuacji. W przypadku deweloperów wdrożenie nawyku używania uzupełniania kart do zatwierdzania plików również pomoże. Ponieważ zarówno system Windows, jak i macOS zachowują wielkość liter, te podejścia zapewniają, że wewnętrzne elementy usługi Git będą widzieć dokładnie taką samą wielkość liter, z jaką korzysta system plików.

Nazwy gałęzi i tagów

Można utworzyć dwie gałęzie lub tagi (znane jako odwołania), które różnią się tylko wielkością liter. Wewnętrzne elementy git wraz z usługami Azure DevOps Services i Azure DevOps Server traktują je jako dwa oddzielne odwołania. Na komputerze użytkownika usługa Git używa systemu plików do przechowywania refs. Pobieranie i inne operacje rozpoczynają się niepowodzeniem z powodu niejednoznaczności.

Mały plik reprezentuje każdy element ref. Jeśli nazwa ref zawiera znaki ukośnika (/), foldery reprezentują części przed ostatnim ukośnikiem.

Jednym z prostych sposobów uniknięcia problemów jest zawsze używanie nazw gałęzi i tagów z małymi literami. Jeśli masz już dwa gałęzie lub tagi, które mają ten problem, możesz je rozwiązać w internetowym interfejsie użytkownika usługi Azure Repos.

Aby naprawić nazwy gałęzi:

  1. Na stronie gałęzi przejdź do powiązanego zatwierdzenia.
  2. W menu skrótów wybierz pozycję Nowa gałąź.
  3. Nadaj gałęzi nową nazwę, która nie ma konfliktu przypadków.
  4. Wróć do strony gałęzi i usuń gałąź powodującą konflikt.

Aby naprawić nazwy tagów:

  1. Na stronie tagów przejdź do zatwierdzenia oznakowanego.
  2. W menu skrótów wybierz pozycję Utwórz tag.
  3. Nadaj tagowi nową nazwę, która nie ma konfliktu przypadków.
  4. Wróć do strony tagów i usuń tag powodujący konflikt.

Ograniczenia dotyczące ścieżki i nazwy pliku

Systemy operacyjne Windows, macOS i Linux mają różne ograniczenia dotyczące nazw plików i ścieżek. Te ograniczenia ograniczają nazwy plików lub folderów, które mogą powodować problemy dla zespołów korzystających z usługi Git na wielu platformach.

Załóżmy na przykład, że deweloper na jednej platformie zatwierdza zmianę udostępnionego repozytorium zawierającego nazwę pliku lub długość ścieżki, która jest nieprawidłowa na innej platformie. Później inny deweloper próbuje wyewidencjonować to zatwierdzenie na platformie, na której zawartość jest nieprawidłowa. Taka sytuacja powoduje uszkodzenie uszkodzonego katalogu roboczego, który może uszkodzić repozytorium uszkodzonymi danymi.

Usługa Azure Repos oferuje ustawienia repozytorium, które blokują wypychania zawierające zatwierdzenia naruszające co najmniej jedno z poniższych ograniczeń.

Tabela referencyjna dla nazw plików i ścieżek

Ograniczenia/platformy Windows macOS Linux
Ograniczenia nazw plików Nazwy plików zarezerwowanych: CON, PRN, AUX, NUL, COM1-COM9, LPT1-LPT9

Nazwy plików zarezerwowanych, po których następuje .

Zastrzeżone znaki: \ / : * ? " < >

Nazwy plików, które kończą się . znakiem lub białym znakiem
Nazwy plików, które kończą się na / Nazwy plików, które kończą się na /
Ograniczenia długości ścieżki Ścieżki w systemie Windows mają maksymalną długość 260 znaków (w tym terminator o wartości null).

W przypadku katalogów z platformą .NET w pełni kwalifikowana nazwa pliku musi być mniejsza niż 260 znaków, a nazwa katalogu musi być mniejsza niż 248 znaków.
Nazwy plików są ograniczone do 255 znaków.

Maksymalna liczba ścieżek w HFS+ jest udokumentowana jako nieograniczona, chociaż niektóre ścieżki limitów wersji systemu macOS mają długość 1016 znaków. Niektóre systemy plików obsługują wartość 1016 jako maksymalną ścieżkę.
Nazwy plików są ograniczone do 255 znaków.

Maksymalna ścieżka to 4096.

Obsługa kodowania

Uwaga

Obsługa kodowania opisanej w tej sekcji jest obsługiwana w usłudze Azure DevOps Server 2019.1 i nowszych wersjach.

Firma Microsoft dodała obsługę kodowania UTF-16 i UTF-32 za pośrednictwem internetowego punktu końcowego wypychania. Ta obsługa oznacza, że zachowujemy typ kodowania, więc nie trzeba ponownie pisać plików jako UTF-8. Podczas próby zapisania pliku, który nie jest zakodowany w formacie UTF, jest również wyświetlane ostrzeżenie (które obsługuje tylko kodowanie UTF).

Poniższy zrzut ekranu przedstawia przykład okna dialogowego wyświetlanego podczas wprowadzania zmian kodowania przy użyciu wypychania internetowego.

Zrzut ekranu przedstawiający okno dialogowe dotyczące wprowadzania zmian kodowania za pośrednictwem wypychania internetowego.