Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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. 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
  2. „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
  3. Credentials • in jeder Revision enthalten • Credentials müssen geändert

    werden • Filter-Branch um alle Vorkomnisse zu entfernen @svijee Sujeevan Vijayakumaran 4
  4. 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
  5. 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
  6. Force-Push bei der falschen Gelegenheit – Das f steht für

    vorsichtig – @svijee Sujeevan Vijayakumaran 6
  7. 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
  8. 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
  9. 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
  10. Große Commits Was hilft: • git status • git diff

    • git add -p • git commit -m "..." @svijee Sujeevan Vijayakumaran 10
  11. Schlechte Beispiele • Aktueller Stand • A hard days work

    • Typo • Fix bug • Fix test • Updated blafoo • sync • Testfall und Implementierung #1337 @svijee Sujeevan Vijayakumaran 11
  12. 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
  13. Ein riesiges Source Git-Repository • 3,5 Millionen Dateien • 300GB

    Repository • 4000 (tägliche) Nutzer @svijee Sujeevan Vijayakumaran 16
  14. 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
  15. Internal • .git enthält das Repository • Drei Objekt-Typen: •

    Commit • Tree • Blob @svijee Sujeevan Vijayakumaran 19
  16. 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
  17. Git GUI Tools • Git ist ein Kommandozeilentool • Verwirrend

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

    • Interaktiver Rebase • uvm @svijee Sujeevan Vijayakumaran 24
  19. 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
  20. git reflog git reflog • Medikament gegen „Ich hab nichts

    getan“ • zeigt die getätigten Änderungen an • rettet „verlorene Commits“ @svijee Sujeevan Vijayakumaran 31
  21. CRLF vs. LF Lokal: git config --global core.autocrlf true Repository-weit:

    .gitattributes: * text=auto @svijee Sujeevan Vijayakumaran 33
  22. 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
  23. 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