Redigera

Dela via


Vanliga frågor och svar om Git

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

I den här artikeln hittar du svar på vanliga frågor om Git, som är särskilt anpassade för Azure Repos. Oavsett om du vill hantera fjärrgrenar, identifiera din aktuella gren eller hantera andra mindre vanliga Git-uppgifter ger den här guiden användbara tips och lösningar. Gå in i följande avsnitt för att förbättra ditt Git-arbetsflöde och lösa vanliga problem.

Hur kan jag enkelt ladda ned en fjärrgren till min lokala lagringsplats?

Kontrollera först att du har en origin konfigurerad lagringsplats. Du bör ha detta om du klonade lagringsplatsen med .git clone När du checkar ut en gren som inte finns lokalt kontrollerar Git om det finns en fjärrgren med samma namn. I så fall skapar Git en lokal gren som refererar till fjärrgrenen. Använd git pull för att ladda ned incheckningarna och uppdatera grenhistoriken lokalt.

Hur tar jag reda på vilken gren jag arbetar i?

Kör git branch utan argument för att visa de lokala grenarna och markera den du har checkat ut. I Visual Studio visar statusfältet även den aktuella grenen när du arbetar med ett projekt som lagras på en lokal Git-lagringsplats.

När ska jag göra Git-incheckningar?

Det är bästa praxis att göra separata incheckningar för logiskt distinkta ändringar. Tänk på incheckningar som poster i en loggbok. När du gör en ändring som är värd att notera registrerar du den i en incheckning. Ett populärt tillvägagångssätt är att tillåta frekventa lokala incheckningar, men krossa dem genom rebasing innan du pushar. Detta ger flexibilitet samtidigt som incheckningshistoriken effektiviseras.

Om varje gren behåller sin fullständiga incheckningshistorik, gör inte det incheckningshistoriken för *main* svår att följa över tid?

Stora projekt med många incheckningar och deltagare kan resultera i en main grenhistorik som återspeglar utvecklingen av ämnesgrenar mer än det övergripande projektet. Med Git kan du komprimera incheckningar på grenar genom att krossa incheckningar och ombasera. Genom att krossa incheckningar blir grenhistoriken mindre utförlig, vilket förenklar incheckningshistoriken på huvudgrenen när den har sammanfogats.

Hur kan jag ta reda på vem som gjorde en specifik ändring i en fil?

git blame Använd kommandot för att ta reda på vem som gjorde en viss ändring i en fil. Från din lokala lagringsplats kan du köra git blame med parametern -L och ange vilka intresserader. Blame genererar formaterade utdata som visar incheckningen som senast uppdaterade raden och namnet på den person som gjorde incheckningen.

> git blame Example_repo -L 20,+40  # show the blame output for the next 40 lines starting at line 20

215d1108 (Example User 2015-11-21 09:54:23 -0800 20) line 20 of the code
215d1108 (Example User 2015-11-21 09:54:23 -0800 21) line 21 of the code
215d1108 (Example User 2015-11-21 09:54:23 -0800 22) line 22 of the code

Blame söker i incheckningshistoriken åt dig. Du kan också granska en fils historik i webbportalen för att avgöra vem som gjorde en ändring och när. Öppna Code Explorer för din lagringsplats och gren och välj sedan filen av intresse. Azure Repos visar en fullständig incheckningshistorik för filen på den aktuella grenen.

Jag har gjort ändringar i vissa filer och nu kan jag inte checka ut till en annan gren eller ombasera mitt arbete.

Att checka ut till en annan gren i Git påverkar tillståndet för filer i filsystemet. Git använder incheckningshistoriken för att se till att du arbetar med de filer som representerar tillståndet för din gren. Om du försöker ändra grenar medan du har icke-bakåtkompatibla ändringar skrivs dessa ändringar över under utcheckningen. Eftersom Git inte vill att du av misstag ska förlora dina ändringar förhindrar det att utcheckningen sker. Du har två alternativ:

Pull-begäran kan inte sammanfogas med det här meddelandet: "Det går inte att sammanfoga automatiskt: Ett av interna git-objekt (blob, träd, incheckning eller tagg) är för stort vilket orsakade TF401022 undantag. Du kan försöka använda LFS, dela upp din sammanslagning eller stora incheckning i flera små."

Det här problemet gäller sammanslagningskonflikter i stora binära filer. Den aktuella gränsen för filer är 100 MB. Lösningen är att lösa sammanslagningskonflikter lokalt genom att slå samman målet till källan lokalt, lösa konflikter och push-överföra ändringarna.

Git LFS (Large File Storage) rekommenderas för lagring av stora binära filer, inte bara för att undvika konflikter utan även för att hantera den totala lagringsplatsens storlek, vilket påverkar klonings- och push-tider.

Jag gjorde lite arbete men måste byta till något annat. Hur kan jag spara mitt arbete för senare utan att genomföra ändringarna?

Om du vill spara ändringarna utan att checka in dem använder du Git stash. Stash sparar de aktuella mellanlagrade och otaglade ändringarna i din gren och återställer din gren till tillståndet för den senaste incheckningen. Du kan sedan växla till en annan gren, utföra ditt arbete och senare köra stash apply för att återställa ändringarna.

git stash
Saved working directory and index state WIP on feature1: be26067 updated endpoint docs
HEAD is now at be26067

När du kör [git stash apply] tillämpas de senast undangömda ändringarna på din aktuella gren. Om det finns en konflikt återställer [stash] ändringarna för de filer som inte står i konflikt och skapar konfliktmarkörer i filerna som gör det. Du bör sammanfoga ändringarna manuellt i det här fallet.

När du är klar med stashen tar du bort den med [git stash drop]. Det här kommandot tar bort den senaste uppsättningen med ändringar som har sparats.

Du kan ha flera stashes, men att hantera dem kräver mer manuell manipulering eftersom du uttryckligen måste tillämpa och släppa stashes. Läs mer i Git Stash-dokumentationen.

Hur ändrar jag standardredigeraren för Git-kommandoradsverktyg?

Som standard använder kommandorads-Git en kommandoradsredigerare när du ber om incheckningsmeddelanden, utför ombaser och annat arbete som kräver ytterligare information för att slutföra. Standardredigeraren konfigureras med :git config

> git config core.editor _path_to_editor_ _options_to_editor_

Git för Windows gör det enkelt att ange anteckningar som redigeringsprogram:

> git config core.editor notepad

Det här kommandot konfigurerar Windows Notepad för att redigera Git-information efter behov och korrekt skicka igenom texten från Git till Anteckningar. Du kan också ange

> git config format.commitMessageColumns 72 

För att behålla textkolumnerna i incheckningsmeddelandena till önskad 72 och radbrytning efter att ha nått den teckengränsen på en rad.

Hur ändrar jag användarnamnet och e-postmeddelandet som visas i mina incheckningar?

Git placerar användarnamn och e-postadressinformation i varje incheckning, och Azure Repos använder den här informationen när du visar incheckningar och när du arbetar med pull-begäranden. Om du arbetar på kommandoraden kan du uppdatera namn- och e-postinformationen git config som visas med kommandot :

> git config --global user.email "example-user@example-site.com"
> git config --global user.name "Example User"

Alternativet --global anger e-post och namn som ingår i incheckningar för alla Git-lagringsplatser i det här systemet. Om du vill ändra inställningarna för en enskild lagringsplats måste du ändra till katalogen där Git-lagringsplatsen finns och köra ovanstående kommandon utan --global flaggan.

Du kan också ändra namn- och e-postinställningarna från Visual Studio. På Git-menyn väljer du Inställningar I dialogrutan Alternativ väljer du Globala Inställningar för Git eller Inställningar för Git-lagringsplats>Allmänt.

Visual Studio 2019 version 16.8 och senare versioner ger en Git-versionskontroll samtidigt som du underhåller Git-användargränssnittet för Team Explorer . Om du vill använda Team Explorer avmarkerar du Verktyg>Alternativ>Förhandsgranskning Funktioner>Ny Git-användarupplevelse från menyraden. Du kan använda Git-funktioner från något av gränssnitten på ett och samma sätt.

I Team Explorer väljer du Inställningar och under Git väljer du länken Globala inställningar eller Inställningar för lagringsplats.