Till KTH:s startsida Till KTH:s startsida

Visa version

Version skapad av Per Austrin 2016-09-04 15:30

Visa < föregående | nästa >
Jämför < föregående | nästa >

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 text
    austrin@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