2016-11-05 4 views
1

Ich habe eine globale .gitconfig-Datei auf der installierten Version fo git abhängt, in dem ich als Alias ​​Ist es möglich, eine git Konfiguration zu haben, die

alias.tree=log --pretty="format:%C(auto)%h %ad%d [%aN, %G?] - %s %N" --all --decorate --graph --color --date=short 

Allerdings definiert die Standardversionen von git installiert auf die meisten meiner Systeme (Debian 7), ist 1.7. Mit denen bin ich generell zufrieden. Dieser Alias ​​funktioniert jedoch nicht wie mit dieser älteren Version von Git definiert.

Also gibt es eine Möglichkeit in .gitconfig die git --version zu testen und den Alias ​​entsprechend zu definieren?

Antwort

3

Nein, oder genauer, nicht ganz so, wie Sie denken. Was Sie können tun ist ein bisschen Shell-Skript verwenden. Am deutlichsten, wenn auch am wenigsten effizienten, kann Art und Weise drei Aliase zu schreiben sein:

[alias] 
    tree = "!f() { set -- $(git --version | \ 
      sed -e 's/git version //' -e 's/\\./ /g'); \ 
      if [ $1 -eq 1 -a $2 -le 7 ]; then git tree17 \"[email protected]\"; \ 
      else git tree18plus \"[email protected]\"; fi; }; f" 
    tree17 = whatever you want here 
    tree18plus = whatever you want here 

Die tree alias ruft nun der kurze Shell-Skript-Test: Diese Version ist 1.7 oder früher (Zählung 1.7.x als „1,7 oder früher“), oder ist diese Version 1.8 oder später? Wenn 1.7 oder früher, führen Sie git tree178 aus, andernfalls führen Sie git tree18plus aus. Sie können dann diese Aliase tun, was immer Sie möchten.

Natürlich, wenn Sie so weit gehen, dann kann man auch schreiben Sie einfach ein Shell-Skript git-tree benannt und setzen das in Ihrem $PATH (ich es in meinem $HOME/scripts Verzeichnis setzen würde, das ist, wo ich Skripte, die man das sind Dies gilt unabhängig vom Betriebssystem und der CPU, während $HOME/bin.amd64, $HOME/bin.sparc usw. OS- und/oder architekturabhängige Binärdateien enthalten. Das Skript kann dann lesen:

#! /bin/sh 
# 
# test git version, are we less than or equal to $1.$2? 
gitvers_le() { 
    local maj=$1 min=$2 
    set -- $(git --version | sed -e 's/git version /' -e 's/\./ /g') 
    if [ $1 -lt $maj ]; then return 0; fi # e.g., 1.x < 2.* 
    [ $1 -eq $maj -a $2 -le $min ] 
} 

if gitvers_le 1 7; then 
    git ... 
else 
    git ... 
fi 

Wenn Sie laufen git tree (oder in der Tat nichts mit git beginnend Git kann nicht in einem Standard-Platz finden), und Sie haben eine ausführbare git-tree geschrieben (oder git- was) In Ihrem $PATH wird Git das ausführen. Das "Frontend" git analysiert einfach einige universelle Optionen, wie -c und -C und --work-tree und so weiter und ruft dann das "Backend" git-was auch immer Programm auf, um die Arbeit zu tun, mit diesen universellen Optionen irgendwie gehandhabt (normalerweise durch einige Umgebungsvariablen einstellen).


Beachten Sie, dass alle diese Optionen bei Laufzeit wechseln, was gut ist, wenn Sie ein Admin haben ständig aktualisieren und/oder Herabstufung unter Ihnen Ihre Binärdateien. Eine weitere Methode besteht darin, Ihre Einrichtung einmal zu machen, zuerst Elemente umherzuwechseln (zB Skripte in $HOME/scripts umzubenennen oder .gitconfig Alias-Einstellungen neu zu setzen), passend für alles, was gerade installiert ist, und dann das "check and shuffle" erneut auszuführen "command - ein separates Skript, das Sie selbst schreiben, das alles tut, was Sie brauchen - ob und wann Ihr Administrator Ihre Binärdateien aktualisiert oder heruntergestuft.

Das heißt, die "out of the box" Konfiguration ist "rekonfigurieren und ausführen". Die bereits konfigurierte Konfiguration wird "ausgeführt". Wenn der konfigurierte Lauf fehlschlägt, sagst du zu dir selbst: Aha, meine Box wurde auf mich geändert, ich muss sie explizit neu konfigurieren. Wenn Sie von Grund auf neu installieren, versetzen Sie sich in den "out of the box" -Modus zurück, in dem Sie automatisch neu konfiguriert und ausgeführt werden.

Dies ist effizienter (kein konstanter Laufzeittest), erfordert aber, dass Sie sich daran erinnern, was zu tun ist, um sich neu zu konfigurieren, wenn sich die Dinge ändern.

Verwandte Themen