Till KTH:s startsida Till KTH:s startsida

Ändringar mellan två versioner

Här visas ändringar i "Git: vanliga frågor" mellan 2016-09-04 15:30 av Per Austrin och 2016-09-04 15:39 av Per Austrin.

Visa < föregående | nästa > ändring.

Git: vanliga frågor

Här är några vanliga frågor och bekymmer som kan dyka upp i samband med användning av Git i kursen.

SSH-nyckel och kloning av repon Om du har problem med att testa att du satt upp din SSH-nyckel korrekt, tänk på att vi i kursen avänder KTH Git, gits-15.sys.kth.se (i motsats till Github, github.com). Det betyder att korrekt kommando för att testa att man har satt upp sin SSH-nyckel korrekt är:

ssh -T git@gits-15.sys.kth.se När du sedan ska klona ditt repo, tänk på att använda SSH-klonings-länken, som du hittar längst till höger och ganska långt ner på webb-sidan för ditt repo. Detta är en URL som ska börja med "git@gits-15.sys.kth.se:". Om du försöker klona URL:en till webb-sidan för repot (som börjar med "https://gits-15.sys.kth.se/") använder du inte SSH och kommer tvingas autentisera dig manuellt.

Inte samma fil på Kattis som i Git? En del studenter har haft problem med att automatgranskningen av en inlämning fått komplettering med kommentaren att en fil som lämnats in i Git inte är samma fil som skickats in i Kattis, trots att exakt samma fil som skickades in i Kattis har lagts till i Git.

Den vanligaste (enda?) anledningen till att detta händer är att man har en inställning i Git som gör att Git automatiskt konverterar om filer som läggs till i Git. Mer specifikt är det vanligt att man har Git-inställningen "core.autoclrf" aktiverad, vilket har effekten att Windows-radbrytningar konverteras till Linux-radbrytning. Om man har denna aktiverad, arbetar på Windows, och skickar in en lösning på Kattis, så kommer denna lösning förmodligen ha Windows-radbrytningar. När man sedan lägger till filen i git konverteras dessa till Linux-radbrytningar, och det är inte längre samma fil, och automatgranskningen av inlämningen kommer att klaga.

Händer detta finns några olika saker man kan göra:


* Ta filen från Git och skicka in på Kattis igen (via filuppladdnings-gränssnittet, inte via editorn i Kattis!).
* Ovanstående metod verkar inte fungera för alla. Om du inte får det att fungera, kör sed -i 's/\r//' <filnamn> Om <filnamn> har Windows-radbrytningar kommer detta kommando att konvertera radbrytningarna i filen till Linux-radbrytningar. Den uppdaterade filen kan sedan skickas in till Kattis (återigen, via fil-uppladdning, EJ via editorn!).
* Stänga av "core.autoclrf"-inställningen i Git:
* Skriver man "git config core.autoclrf false" i sitt klonade repo så stängs inställningen av i aktuellt repo.
* Skriver man "git config --global core.autoclrf false" så stängs det av globalt i Git och man måste då manuellt aktivera det i de repon där man vill använda det. (Detta är antagligen inte en bra idé.)

För att ytterligare diagnosticera den här typen av problem är det bra att känna till följande två Linux-kommandon:


* file: detekterar filtyp på en fil. T.ex: austrin@tcs59:~$ file fil-med-linux-rader.txt fil-med-linux-rader.txt: ASCII textaustrin@tcs59:~$ file fil-med-windows-rader.txt fil-med-windows-rader.txt: ASCII text, with CRLF line terminators
* sha1sum: beräknar sha1-checksumman för en fil. När automatgranskningen ger komplettering på att fel fil lämnats in talar den om vilka sha1-summor de två olika filerna har, och det kan vara bra att kunna beräkna dem lokalt för att felsöka. T.ex: austrin@tcs59:~$ sha1sum fil-med-linux-rader.txt 12187f183a253dce023589648b05e27fbf0adf22 fil-med-linux-rader.txt
"Merge Pull Request"? När ni lämnat in en labb via Git och fått den godkänd av Kodkod (vilket visar sig genom att etiketten "inväntar granskning" lagts till, och att dykerk upp en liten grön check), då ska ni inte göra Merge på er hämtbegäran själva. Om ni gör det så är det väsentligen som att ni tar bort er inlämning, och den kommer inte granskas, och ni kommer inte få tid för redovisning av den, och den kommer därför inte bli godkänd.¶

Om ni trots allt råkat göra Merge på hämtbegäran (vilket är lätt hänt, eftersom den gröna "Merge pull request"-knappen är väldigt inbjudande), så är det dock som tur är inte så svårt att återställa:¶


* Klicka på den lilla knappen "Revert" som dyker upp i händelseloggen för hämtbegäran på raden där det står att den mergades.
* Detta resulterar i att en ny hämtbegäran öppnas som återställer repot (dvs tar bort er lösning). Merga denna nya pull request för at återställa repot.
* Ni behöver nu uppdatera er fork av repot för att kunna skapa en ny inlämning.
* När ni gjort det, skapa en ny inlämning.