2017-11-08 1 views
0

Ich bin eine Website zu entwickeln, und ich benutze git die Website zu aktualisieren, und ich habe zwei Zweig so geht es:Wie erstelle ich eine persönliche Git-Funktion, die jedes Mal benutzbar ist, wenn ich Bash starte?

  • git add.
  • git commit "etwas"
  • git push
  • git checkout "prod"
  • git merge --no-ff dev
  • git push
  • git checkout "dev"

Ich brauche eine Lazygit-Funktion, die aussieht wie

function lazygit(){ 
    git add . 
    git commit "$1" 
    git push 
    git checkout "prod" 
    git merge --no-ff dev 
    git push 
    git checkout "dev" 
} 

Und würde meine Frage wie

lazygit("CSS UPDATE") 

Nun ist, wie kann ich speichern Sie diese Funktion in die Datei oder was auch immer, so kann ich es überall benutzen verwenden werden?

alot des Thank

+1

Siehe https://unix.stackexchange.com/a/106606/6666 –

Antwort

2

Sie Bash Funktionen bestehen bleiben können, Aliase und Einstellungen in Ihren ~/.bashrc, ~/.bash_profile, ~/.bash_login oder ~/.profile Dateien (unter anderen Optionen). Es ist System-abhängig, aber die meisten Systeme haben eine ~/.bashrc und so wird im Allgemeinen, was Leute sich beziehen.

würde ich auch diese Befehle mit && Verkettungs vorschlagen, so dass, wenn man die Funktion fehlschlägt stoppt, während Ihre aktuelle Funktion laufen halten, alle Fehler zu ignorieren:

function lazygit(){ 
    git add . && 
    git commit "$1" && 
    git push && 
    git checkout prod && 
    git merge --no-ff dev && 
    git push && 
    git checkout dev 
} 

Beachten Sie auch, dass Bash verwendet nicht () Beim Aufrufen von Funktionen sind Argumente genauso wie andere Shell-Befehle durch Leerzeichen getrennt. So würden Sie laufen:

$ lazygit "CSS UPDATE" 
1

Eine weitere Option ist ein Git-Alias ​​anstelle einer Shell-Funktion zu definieren.

Aliases sind Teil der Konfiguration, so schauen wir uns die gitconfig(7) Handbuch Seite aussehen (git help config lokal ausgeführt):

alias.*

Befehlsaliasnamen für den git(1) Befehl Wrapper - z.B. Nach dem Definieren von "alias.last = cat-file commit HEAD" entspricht der Aufruf "git last" dem "git cat-file commit HEAD". Um Verwechslungen zu vermeiden und Probleme mit der Skriptverwendung zu vermeiden, werden Aliase, die vorhandene Git-Befehle verbergen, ignoriert. Argumente werden durch Leerzeichen getrennt, das übliche Shell-Quoting und Escaping wird unterstützt. Ein Zitat-Paar oder ein umgekehrter Schrägstrich kann verwendet werden, um sie zu zitieren .

Wenn der Alias-Erweiterung ein Ausrufezeichen vorangestellt ist, wird sie als Shell-Befehl behandelt. Für Beispiel definieren "alias.new =!gitk --all --not ORIG_HEAD "entspricht der Aufruf" git new " mit dem Shell-Befehl" gitk --all --not ORIG_HEAD ". Beachten Sie, dass Shell-Befehle von dem obersten Verzeichnis von ausgeführt werden ein Repository, das nicht unbedingt das aktuelle Verzeichnis sein kann. GIT_PREFIX wird durch Ausführen git rev-parse --show-prefix aus dem ursprünglichen aktuellen Verzeichnis als zurück gesetzt. git-rev-parse(1) See.

so können Sie

$ git config --add alias.whatever '!set -eu; git add . && 
    git commit "$1" && 
    git push && 
    git checkout prod && 
    git merge --no-ff dev && 
    git push && 
    git checkout dev' 

tun und dann einfach

Die set -eu; würde das ganze zum Absturz bringen, wenn Sie den erforderlichen Parameter nicht einreichen. Ein anderer Ansatz wäre, stattdessen etwas wie test $# -gt 0 || exit 1; dort zu stecken.

+0

Vielen Dank das hilft und eine bessere Alternative. Aber jetzt, nach dem Commit sogar durch habe ich schon einen Kommentar abgegeben: als $ 1 = comment, habe ich immer noch dieses https://imgur.com/a/L29RO und ich finde gerade heraus, wie man aus dieser Box herauskommt, indem man folgendes eingibt: wq! ? benutze ich diesen alias? oder weil ich auf Windows bin? –

+0

@JonelleAmio, nicht ganz sicher, was passiert, aber ich habe zwei Ideen. 1) Setzen Sie den 'shift' Befehl nach dem' git commit "$ 1" 'statement - um' git commit "$ 1" && shift' zu lesen - das sollte das von Git übergebene Argument an die Shell "konsumieren", die es zum Verarbeiten des Skripts aufgerufen hat . 2) Fügen Sie dem Befehl 'set -eu' die Option '-x' hinzu: Es wird die" Ausführungsverfolgung "in der Shell aktiviert, so dass jeder Befehl, den es aufruft, mit einem" + "- Zeichen versehen wird. Das zeigt Ihnen die genauen Befehle, die von der Shell ausgeführt werden. – kostix

+0

@JonelleAmio Beachten Sie, dass 'git config' etwas seltsam ist, da es keine' --set'-Option hat. Um also Ihren Alias ​​zu "ersetzen", müssen Sie 'git config --unset alias.whatever' gefolgt von ' git config --add alias.whatever '! set ...' " – kostix

Verwandte Themen