Dela via


Git skiftlägeskänslighet

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020

Windows- och macOS-filsystemen är skiftlägesokänsliga (men skiftlägesbevarande) som standard. De flesta Linux-filsystem är skiftlägeskänsliga. Git skapades ursprungligen för att vara Linux-kernelns versionskontrollsystem, så föga förvånande är det skiftlägeskänsligt.

Även om många av problemen med ett skiftlägesokänsligt operativsystem har åtgärdats i Git för Windowsfinns det några egenheter kvar.

Fil- och mappnamn

I Linux är det inga problem att checka ut en Git-lagringsplats som innehåller både "File.txt" och "file.txt". Det är distinkta filnamn. Om du checkar ut båda filerna i Windows och macOS kommer den andra att skriva över den första. Om två mappar endast skiljer sig åt från fall till fall blandas innehållet i skiftlägesokänsliga filsystem.

Åtgärda skiftlägeskonflikter

Ett sätt att åtgärda en lagringsplats med det här problemet är att checka ut den i en skiftlägeskänslig miljö. Byt namn på filer och mappar så att de inte längre är i konflikt och skicka sedan ändringarna till lagringsplatsen. Windows-undersystem för Linux är en sådan miljö. En annan metod är att använda kommandot git mv -f <conflicting name> <non-conflicting name> för varje konflikt och vara noga med att använda exakta versaler för båda filnamnen.

Att undvika skiftlägeskonflikter

Det är bra att undvika att skapa den här situationen i första hand. Azure Repos erbjuder en tvångstilståndsinställning för att förhindra pushar som kan leda till denna situation. För utvecklare kan det också hjälpa att använda tabbkomplettering för att göra commit av filer. Eftersom både Windows och macOS är skiftlägesbevarande ser detta till att Gits interna enheter ser exakt samma hölje som filsystemet använder.

Gren- och taggnamn

Du kan skapa två grenar eller taggar (kallas "referenser") som bara skiljer sig åt i höljet. Gits interna, samt Azure DevOps Services/TFS, behandlar dem som två separata refs. På en användares dator använder Git filsystemet för att lagra referenserna. Hämtningar och andra åtgärder börjar misslyckas på grund av tvetydigheten. Varje referens representeras av en liten fil och om ett referensnamn innehåller / tecken representeras delarna före den sista / av mappar.

Ett enkelt sätt att undvika problem är att alltid använda gren- och taggnamn med gemener. Om du redan har skapat två grenar eller taggar med det här problemet kan du åtgärda det i webbgränssnittet för Azure Repos.

Korrigera grennamn

Från grenar-sidan navigerar du till den relaterade ändringen. I snabbmenyn väljer du "Ny gren". Ge grenen ett nytt namn som inte har en ärendekonflikt. Gå tillbaka till sidan grenar och ta bort den gren som är i konflikt.

Åtgärda taggnamn

Stegen för att åtgärda ett taggnamn liknar grenar. Från taggsidan navigerar du till den taggade commit. I snabbmenyn väljer du "Skapa tagg". Ge taggen ett nytt namn som inte har en ärendekonflikt. Gå tillbaka till sidan taggar och ta bort taggen som är i konflikt.