$30 off During Our Annual Pro Sale. View Details »

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.

Sujeevan Vijayakumaran

May 31, 2019
Tweet

More Decks by Sujeevan Vijayakumaran

Other Decks in Programming

Transcript

  1. Dinge, die man nicht mit Git tun sollte
    Sujeevan Vijayakumaran
    @svijee svij.org
    11. August 2019

    View Slide

  2. $ whoami
    Sujeevan Vijayakumaran
    Castrop-Rauxel, Ruhrpott
    @svijee
    svij.org
    [email protected]
    Consultant
    „Versionskontrolle mit Git“ (2019)
    – – –
    / 2

    View Slide

  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

    View Slide

  4. Alle Fit in Git?
    @svijee Sujeevan Vijayakumaran 2

    View Slide

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

    View Slide

  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

    View Slide

  7. Credentials
    @svijee Sujeevan Vijayakumaran 3

    View Slide

  8. Credentials
    • in jeder Revision enthalten
    • Credentials müssen geändert werden
    • Filter-Branch um alle Vorkomnisse zu entfernen
    @svijee Sujeevan Vijayakumaran 4

    View Slide

  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

    View Slide

  10. Unnötiges Historie neuschreiben mit Filter-Branch
    @svijee Sujeevan Vijayakumaran 5

    View Slide

  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

    View Slide

  12. Force-Push bei der falschen Gelegenheit
    – Das f steht für vorsichtig –
    @svijee Sujeevan Vijayakumaran 6

    View Slide

  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

    View Slide

  14. Ganz große Commits! (aka git commit -a)
    @svijee Sujeevan Vijayakumaran 7

    View Slide

  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

    View Slide

  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

    View Slide

  17. Große Commits
    Was hilft:
    • git status
    • git diff
    • git add -p
    • git commit -m "..."
    @svijee Sujeevan Vijayakumaran 10

    View Slide

  18. Unlesbare Commit-Messages
    @svijee Sujeevan Vijayakumaran 10

    View Slide

  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

    View Slide

  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

    View Slide

  21. Binärdateien
    @svijee Sujeevan Vijayakumaran 12

    View Slide

  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

    View Slide

  23. Binärdateien
    @svijee Sujeevan Vijayakumaran 14

    View Slide

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

    View Slide

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

    View Slide

  26. Ein riesiges Source Git-Repository
    • 3,5 Millionen Dateien
    • 300GB Repository
    • 4000 (tägliche) Nutzer
    @svijee Sujeevan Vijayakumaran 16

    View Slide

  27. Welches Projekt tut sowas?
    @svijee Sujeevan Vijayakumaran 17

    View Slide

  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

    View Slide

  29. Internal
    • .git enthält das Repository
    • Drei Objekt-Typen:
    • Commit
    • Tree
    • Blob
    @svijee Sujeevan Vijayakumaran 19

    View Slide

  30. Internal
    @svijee Sujeevan Vijayakumaran 20

    View Slide

  31. Internal
    @svijee Sujeevan Vijayakumaran 21

    View Slide

  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

    View Slide

  33. Git GUI Tools vertrauen
    @svijee Sujeevan Vijayakumaran 22

    View Slide

  34. Git GUI Tools
    • Git ist ein Kommandozeilentool
    • Verwirrend für Anfänger
    • Verwirrende und andere Begriffe
    • Fehlende Funktionen
    @svijee Sujeevan Vijayakumaran 23

    View Slide

  35. Git GUI Tools
    • „Sync“ Button in Visual Studio Code
    • Interaktiver Rebase
    • uvm
    @svijee Sujeevan Vijayakumaran 24

    View Slide

  36. Git auf Deutsch
    @svijee Sujeevan Vijayakumaran 24

    View Slide

  37. @svijee Sujeevan Vijayakumaran 25

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  42. Git auf Sächsisch
    Source: https://github.com/danielauener/git-auf-deutsch
    @svijee Sujeevan Vijayakumaran 30

    View Slide

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

    View Slide

  44. git reflog
    git reflog
    • Medikament gegen „Ich hab nichts getan“
    • zeigt die getätigten Änderungen an
    • rettet „verlorene Commits“
    @svijee Sujeevan Vijayakumaran 31

    View Slide

  45. Bezahlen bei Ransomware-Angriffe auf Git-Repositorys
    @svijee Sujeevan Vijayakumaran 31

    View Slide

  46. Ransomware-Angriffe auf Git-Repositorys bezahlen
    Git ist ein verteiltes Versionsverwaltungsprogramm
    git push origin HEAD:master --force
    @svijee Sujeevan Vijayakumaran 32

    View Slide

  47. Mischen von CRLF und LF am Zeilenende mischen
    @svijee Sujeevan Vijayakumaran 32

    View Slide

  48. CRLF vs. LF
    Lokal: git config --global core.autocrlf true
    Repository-weit:
    .gitattributes:
    * text=auto
    @svijee Sujeevan Vijayakumaran 33

    View Slide

  49. Weitere blöde Ideen
    @svijee Sujeevan Vijayakumaran 33

    View Slide

  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

    View Slide

  51. Fragen?
    @svijee Sujeevan Vijayakumaran 34

    View Slide

  52. Vielen Dank für die Aufmerksamkeit!
    Folien: https://speakerdeck.com/svij/
    Fragen, Feedback und Fehler gerne per E-Mail an [email protected].
    Blog: svij.org
    Twitter: @svijee
    @svijee Sujeevan Vijayakumaran 35

    View Slide