Pro Yearly is on sale from $80 to $50! »

GPN19/FrOSCon: Dinge, die man nicht mit Git tun sollte

GPN19/FrOSCon: Dinge, die man nicht mit Git tun sollte

Ständig versuchen Leute Git richtig zu erklären. So auch ich, schließlich hat sich Git schon seit einigen Jahren als Standard festgesetzt. Viele nutzen zwar Git, kennen aber nicht alle Funktionen oder verstehen die Arbeit damit richtig. Nichtsdestotrotz ist Git nicht für alle Probleme eine Lösung.

DIeser Vortrag stellt einige schlechte Ideen vor, die Menschen schon mit Git Repositorys getrieben haben. Es werden einige Beispiele genannt, die man ausdrücklich nicht machen sollte. Darüber hinaus wird natürlich auch noch darauf eingegangen, warum solche Aktionen nicht sinnvoll mit Git umzusetzen sind und was für Alternativen es gibt.

09487d5e2518b0f18972d70b4641c15f?s=128

Sujeevan Vijayakumaran

May 31, 2019
Tweet

Transcript

  1. Dinge, die man nicht mit Git tun sollte Sujeevan Vijayakumaran

    @svijee svij.org 11. August 2019
  2. $ whoami Sujeevan Vijayakumaran Castrop-Rauxel, Ruhrpott @svijee svij.org mail@svij.org Consultant

    „Versionskontrolle mit Git“ (2019) – – – / 2
  3. Ziel • Ihr lernt an praktischen negativ Beispielen, wie Git

    funktioniert • Ihr lernt ein paar ((un)bekannte) Dos and Don’ts kennen @svijee Sujeevan Vijayakumaran 2
  4. Alle Fit in Git? @svijee Sujeevan Vijayakumaran 2

  5. Nein? Also das ist ganz einfach … @svijee Sujeevan Vijayakumaran

    2
  6. „If that doesn’t fix it, git.txt contains the phone number

    of a friend of mine who understands git. Just wait through a few minutes of ’It’s really pretty simple, just think of branches as...’ and eventually you’ll learn the commands that will fix everything.“ »xkcd: Git«, © Randall Munroe (xkcd.com/1597) ist lizenziert unter der Creative Commons Lizenz CC BY-NC 2.5 @svijee Sujeevan Vijayakumaran 3
  7. Credentials @svijee Sujeevan Vijayakumaran 3

  8. Credentials • in jeder Revision enthalten • Credentials müssen geändert

    werden • Filter-Branch um alle Vorkomnisse zu entfernen @svijee Sujeevan Vijayakumaran 4
  9. Filter-Branch • Neuschreiben der Historie • git filter-branch --tree-filter 'rm

    -f password.ini' HEAD • Resultat: neu-geschriebenes Repository ohne Datei password.ini • Need to use the force to push @svijee Sujeevan Vijayakumaran 5
  10. Unnötiges Historie neuschreiben mit Filter-Branch @svijee Sujeevan Vijayakumaran 5

  11. Filter-Branch Nach einem Filter-Branch: • (fast) jeder Commit wurde angefasst

    • Jede Person muss neu Klonen • Nicht für Open Source Projekte geeignet @svijee Sujeevan Vijayakumaran 6
  12. Force-Push bei der falschen Gelegenheit – Das f steht für

    vorsichtig – @svijee Sujeevan Vijayakumaran 6
  13. Force-Push • nur auf privaten Forks • nur auf gepushten

    Branches, wo man allein drauf arbeitet • nicht auf Branches, wo mehrere Personen dran arbeiten @svijee Sujeevan Vijayakumaran 7
  14. Ganz große Commits! (aka git commit -a) @svijee Sujeevan Vijayakumaran

    7
  15. Don’t! Niemand hat die Absicht git commit -a auszuführen! Warum?

    Ihr schaut nicht, was ihr getan habt! Ihr wisst nicht, was ihr getan habt! @svijee Sujeevan Vijayakumaran 8
  16. Große Commits ... sollten klein sein: • Ein Commit ==

    eine Änderung • Gewährleistung der Nachvollziehbarkeit • Nützlich beim Einsatz von git bisect und git blame @svijee Sujeevan Vijayakumaran 9
  17. Große Commits Was hilft: • git status • git diff

    • git add -p • git commit -m "..." @svijee Sujeevan Vijayakumaran 10
  18. Unlesbare Commit-Messages @svijee Sujeevan Vijayakumaran 10

  19. Schlechte Beispiele • Aktueller Stand • A hard days work

    • Typo • Fix bug • Fix test • Updated blafoo • sync • Testfall und Implementierung #1337 @svijee Sujeevan Vijayakumaran 11
  20. Große Commits Vortrag: „How To Commit: Nachvollziehbare Git-Historien“ • https://chemnitzer.linux-tage.de/2019/de/programm/beitrag/196

    @svijee Sujeevan Vijayakumaran 12
  21. Binärdateien @svijee Sujeevan Vijayakumaran 12

  22. Binärdateien • Git speichert Dateien vollständig (und komprimiert) • je

    häufiger die Binärdatei angefasst wird, desto höher der Speicherbedarf @svijee Sujeevan Vijayakumaran 13
  23. Binärdateien @svijee Sujeevan Vijayakumaran 14

  24. Binärdateien Lösung: Git-LFS @svijee Sujeevan Vijayakumaran 15

  25. Viel zu viele Dateien und Verzeichnisse @svijee Sujeevan Vijayakumaran 15

  26. Ein riesiges Source Git-Repository • 3,5 Millionen Dateien • 300GB

    Repository • 4000 (tägliche) Nutzer @svijee Sujeevan Vijayakumaran 16
  27. Welches Projekt tut sowas? @svijee Sujeevan Vijayakumaran 17

  28. Windows Source Git-Repository • git clone: 12h • git checkout:

    3h • git status: 8min • git commit: 30min Mehr Infos unter https://www.youtube.com/watch?v=g_MPGU_m01s @svijee Sujeevan Vijayakumaran 18
  29. Internal • .git enthält das Repository • Drei Objekt-Typen: •

    Commit • Tree • Blob @svijee Sujeevan Vijayakumaran 19
  30. Internal @svijee Sujeevan Vijayakumaran 20

  31. Internal @svijee Sujeevan Vijayakumaran 21

  32. Windows Source Git-Repository Lösung: VFS for Git (by Microsoft, vsforgit.org)

    Lädt nur ausgewählte Git-Files on demand. @svijee Sujeevan Vijayakumaran 22
  33. Git GUI Tools vertrauen @svijee Sujeevan Vijayakumaran 22

  34. Git GUI Tools • Git ist ein Kommandozeilentool • Verwirrend

    für Anfänger • Verwirrende und andere Begriffe • Fehlende Funktionen @svijee Sujeevan Vijayakumaran 23
  35. Git GUI Tools • „Sync“ Button in Visual Studio Code

    • Interaktiver Rebase • uvm @svijee Sujeevan Vijayakumaran 24
  36. Git auf Deutsch @svijee Sujeevan Vijayakumaran 24

  37. @svijee Sujeevan Vijayakumaran 25

  38. Git GUI ... auf Deutsch @svijee Sujeevan Vijayakumaran 26

  39. Git GUI ... auf Englisch @svijee Sujeevan Vijayakumaran 27

  40. Git auf Deutsch Source: https://github.com/danielauener/git-auf-deutsch @svijee Sujeevan Vijayakumaran 28

  41. Git auf Deutsch • „Gabeln Sie auf Deppendrehkreuz!“ • „Nein,

    drücke das gleich zum Meister im Ursprung!“ • „Mach ein Ziehbegehren, wenn du mit der Vereinigung fertig bist!“ @svijee Sujeevan Vijayakumaran 29
  42. Git auf Sächsisch Source: https://github.com/danielauener/git-auf-deutsch @svijee Sujeevan Vijayakumaran 30

  43. Alles kaputt!!111elf! rm -rf $REPOSITORY @svijee Sujeevan Vijayakumaran 30

  44. git reflog git reflog • Medikament gegen „Ich hab nichts

    getan“ • zeigt die getätigten Änderungen an • rettet „verlorene Commits“ @svijee Sujeevan Vijayakumaran 31
  45. Bezahlen bei Ransomware-Angriffe auf Git-Repositorys @svijee Sujeevan Vijayakumaran 31

  46. Ransomware-Angriffe auf Git-Repositorys bezahlen Git ist ein verteiltes Versionsverwaltungsprogramm git

    push origin HEAD:master --force @svijee Sujeevan Vijayakumaran 32
  47. Mischen von CRLF und LF am Zeilenende mischen @svijee Sujeevan

    Vijayakumaran 32
  48. CRLF vs. LF Lokal: git config --global core.autocrlf true Repository-weit:

    .gitattributes: * text=auto @svijee Sujeevan Vijayakumaran 33
  49. Weitere blöde Ideen @svijee Sujeevan Vijayakumaran 33

  50. Weitere blöde Ideen • Remote-Branches genauso benennen wie lokale Branches

    • Mitten im Rebase-Vorgang sein, ohne es zu merken • Mergen durch das Kopieren von einzelnen Dateien • Nicht baubare/ausführbare Commits @svijee Sujeevan Vijayakumaran 34
  51. Fragen? @svijee Sujeevan Vijayakumaran 34

  52. Vielen Dank für die Aufmerksamkeit! Folien: https://speakerdeck.com/svij/ Fragen, Feedback und

    Fehler gerne per E-Mail an mail@svij.org. Blog: svij.org Twitter: @svijee @svijee Sujeevan Vijayakumaran 35