GITconfig optimieren

Weitere Pflege auf Github: gitconfig.sh


DEPRECATED


GIT für Windows
Möchte man GIT zum ersten mal auf einer Maschine einrichten, muss Name und Email gesetzt werden:
git config --global user.name "user"
git config --global user.email user@asdf.com

Ansonsten können keine Commits gemacht werden.
git config --global core.editor nano
# windows
# 32 bit
git config --global core.editor "'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -nosession"
# 64bit
git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -nosession"

Editor würde ich auch ändern, sonst muss man mit vi klarkommen.

Im Homeverzeichnis des Benutzers gibt es eine Datei, .gitconfig, in welcher die Einstellungen für GIT gespeichert werden. Es ist mehr oder weniger eine ini.
Sie sieht zum Beispiel so aus:
[user]
email = asdf@ghjk.com
name = example
[merge]
tool = meld
[core]
editor = nano
autocrlf = true
[push]
default = simple
[fetch]
prune = true
[alias]
lg = !"git lg1"
lg1 = !"git lg1-specific --all"
lg2 = !"git lg2-specific --all"
lg3 = !"git lg3-specific --all"

lg1-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)'
lg2-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'
lg3-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset) %C(bold cyan)(committed: %cD)%C(reset) %C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset)%n'' %C(dim white)- %an <%ae> %C(reset) %C(dim white)(committer: %cn <%ce>)%C(reset)'

pl = pull --no-edit
ps = push -u --all


Bei [alias] passiert das Interessante, statt
git log --graph --oneline --all --decorate

für eine Baumansicht eingeben zu müssen, zeigt lg eine kompakte Übersicht mit Zeit und Datum, lg2 für ein ausführlicheres Datum.
Meld als Mergetool, bei einem Merge-Konflikt kann dann mit git mergetool Meld geöffnet werden, ein Programm mit GUI, was das Mergen vereinfacht.

pl als pull Abkürzung, fetched alle Branches und merged den aktuellen, ohne mich bei fast-forward mit einer commit-Message zu nerven.
ps als push, pusht alle Branches, auch lokal neu erstellte. Für größere Teams wohl eher nicht empfehlenswert.

Update 14.09.2016:
Für die .bashrc oder .zshrc:
alias gs='(git fetch && git pull --no-edit && git push -u --all) >/dev/null'
alias git-sync='gs'
alias gitsync='gs'

Hiermit kann durch Eingabe des Befehls gs, bzw. git-sync oder gitsync (wer Abkürzungen nicht mag 😝), das übliche Pull/Push Prozedere in einem Kommando vereint werden, dass nur fehlschalgen wird, wenn es Merge-Konflikte gibt, die nicht automatisch gelöst werden können.

prune muss hier zwingend aktiviert werden (s.o.), damit auf Remote gelöschte Branches auch lokal gelöscht werden, andernfalls würde dieser erneut per push -u --all hinzugefügt werden.

Soll ein Branch endgültig gelöscht werden, muss dieser nicht nur lokal (git branch -d branchname), sondern auch auf dem Server gelöscht werden: git push origin --delete branchname. Danach gitsync.

autocrlf true nur bei Windows, ansonsten false.

Update 25.11.2016:
Man muss leider zwei mal fetchen (fetch && pull, was ja auch fetch macht intern), da --prune nur vor dem fetchen ausgeführt wird. Ansonsten würde er Remote gelöschte und lokal noch existierende Branches wieder hochladen.

Update 10.01.2017:
Weitere Pflege auf Github, Skript Link eingefügt.

Quellen:
How line ending conversions work with git core.autocrlf between different operating systems
Getting Started First Time Git Setup
Push all branches
Visualizing branch topology in git