Kann ich den folgenden Bash-Shell-Code einbetten:
for name in $(git diff --name-only $1); do git difftool $1 $name & done
direkt in die Erstellung eines Git-Alias:
git config --global alias.diffall ***my-bash-code-here***
Dies führt zu meiner vorherigen Frage / Antwort zu SO, wo ich den Code in eine .sh-Datei eingefügt und dann auf die Datei ausgerichtet habe:
git config --global alias.diffall '!sh diffall.sh'
Aber in der unendlichen Suche nach Einfachheit muss es eine Möglichkeit geben, die Datei zu überspringen und Code direkt in den Alias einzufügen? Ich kann das Format nicht herausfinden ...
! binary
!sh git checkout $(git log --branches -1 --pretty=format:'%D' | sed 's/.*, //g')
führt zu/usr/lib/git-core/git: /usr/lib/git-core/git: cannot execute binary file
. Versuchte essh
am Anfang sowohl mit als auch ohne .Um Befehle innerhalb eines Git-Alias auszuführen und insbesondere Argumente an diese Befehle zu übergeben, müssen Sie wahrscheinlich eine temporäre Funktion erstellen, die Sie dann sofort aufrufen:
$ vim ~/.gitconfig ... [alias] # compare: foo = "! echo begin arg=$1/$2/end" foo2 = "!f() { echo "begin arg=$1/$2/end"; }; f"
In diesem Beispiel ist die Funktion wahrscheinlich genau das, was Sie benötigen (und sie ist auch flexibler, was Sie in einer einzelnen "Anweisung" tun können). und Sie können wahrscheinlich feststellen, dass für beide Optionen die verbleibenden Argumente an den Befehl git einfach als Argumente an den Alias übergeben werden, unabhängig davon, ob es sich um "echo" oder "f" handelt. Das Aufrufen der Funktion verbraucht einfach die Argumente und ignoriert, was nicht explizit verwendet wird:
Ein weiteres Beispiel (listet alle Aliase basierend auf dem übereinstimmenden Muster auf) (Hinweis: Sie können den gleichen Funktionsnamen "f ()" in der gesamten .gitconfig weiterhin verwenden):
[alias] alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
Der erste gibt den Alias für nur "foo $" zurück, der zweite für "foo. *":
$ git alias foo alias.foo ! echo begin arg=$1/$2/end $ git alias 'foo.*' alias.foo ! echo begin arg=$1/$2/end alias.foo2 !f() { echo begin arg=$1/$2/end; }; f
(nb: Die tatsächlichen Ergebnisse können je nach Shell variieren. Ich verwende dies mit Bash unter Linux, Unix und Cygwin (Windows).)
quelle
sh -c
. Auf diese Weise müssen Sie sich keine Gedanken über die Anmeldeshell des Benutzers machen.git status
durch benutzerdefinierte Aliase"Ich konnte es nicht in der Dokumentation finden, aber wenn Sie ein Skript "git- <name>" im Pfad erstellen, können Sie es mit "git name" in Ihrem Repo aufrufen.
Sehen:
$ cd ~/bin $ echo "echo I love this log: >pwd >git log --graph --summary --decorate --all" > git-logg $ chmod +x git-logg $ cd /path/to/your/repo $ git logg I love this log: /path/to/your/repo * commit 3c94be44e4119228cc681fc7e11e553c4e77ad04 (whatever-branch) | Author: myself <my@Laptop.(none)> | Date: Fri Apr 1 16:47:20 2011 +0200 | | would have been better not to do it at all | ... $
Sie können also auch auf diese (eher dunkle) Weise einen beliebigen Alias schreiben.
Darüber hinaus können Sie diesem neuen Befehl, der eine Funktion definiert, die automatische Vervollständigung hinzufügen. Infos hier
$ _git_logg () { # you can return anything here for the autocompletion for example all the branches __gitcomp_nl "$(__git_refs)" }
quelle
Das Hinzufügen dieser 2 Zeilen zu Ihrer .git / config-Datei sollte den Trick tun.
[alias] diffall = '!for name in $(git diff --name-only $1); do git difftool $1 $name & done'
Bearbeiten: Vermutlich funktioniert auch die git-config-Version, aber ich möchte meine Aliase zur einfacheren Verwaltung in der Konfigurationsdatei behalten.
Es gibt eine schöne Seite im Git-Wiki, die Aliase sehr klar erklärt: http://git.or.cz/gitwiki/Aliases Lesen Sie insbesondere "Erweiterte Aliase mit Argumenten".
quelle
(Aus der ProGit-Dokumentation: http://progit.org/book/ch7-3.html )
Haben Sie versucht, ein Skript in .git / hooks hinzuzufügen?
Wenn Sie beispielsweise ein Skript .git / hooks / post-checkout erstellen:
#!/bin/bash echo "This is run after a 'git checkout'"
Führen Sie dann den folgenden Befehl aus:
$ git checkout master Switched to branch 'master' This is run after a 'git checkout'
quelle