2016-05-08 7 views
1

Ich versuche, Systembefehle in bash auf meine Git-Befehle zu ketten.Verketten von Systembefehlen auf Git-Befehle

Zum Beispiel: git commit -m cat commit_message.txt.

Ich habe bemerkt, ich exakt die gleichen 4 Befehle wiederholt verwenden, und ich möchte einen Aliasnamen erstellen, das tut:

git add -A && git commit -m cat ~/my_project/commit_message.txt && git push origin dev && git push heroku-staging master.

Ich protokolliere gerne die Änderungen, die ich an meiner App in meiner Datei commit_message.txt vorgenommen habe, und aktualisiere sie jedes Mal, wenn ich eine Änderung vornahm, also wäre es ideal, wenn ich dieses Protokoll einfach aus der Terminal jedes Mal, wenn ich eine Änderung vornehmen möchte.

Ich bin auf keinen Fall ein Terminal-Wizard, also hoffe ich, dass dies eine einfache Lösung ist, die ich noch nicht entdeckt habe. Ich habe ziemlich viel gesucht und habe keinen ähnlichen Nutzen gefunden.

+0

'git commit -m" $ ( andlrc

+0

Das Duplizieren des gesamten vorherigen Verlaufs in jedem Commit scheint etwas merkwürdig. Verwenden Sie einfach 'git log --format ="% b "', wenn Sie alle Änderungen bis einschließlich des aktuellen Commits anzeigen möchten. – chepner

Antwort

4

git commit hat eine -F (--file), das genau das tut, was Sie wollen, ohne jegliche Shell-Magie: nur git commit -F commit_message.txt verwenden.

+0

Danke, wusste nicht, dass :-) – andlrc

+0

Dies ist perfekt! Vielen Dank! – Doug

0

ein System Alias ​​erstellen Sie tun können:

alias myName=myCommand 

oder wenn Sie nur einen Sitzungs-Alias ​​(nur während Ihres Terminal zur Verfügung alive) möchten, können Sie tun:

myName=myCommand 

es zu starten Sie können $myName

tun dann mehrere Befehl zu starten, können Sie versuchen, Rohr zu verwenden:

command 1 | command 2 ... 
+0

Immer noch falsch, sollte es 'alias myName = MyCommand' sein – Jahid

+0

ja und nein es wird davon abhängen, ob wir alle Systemstart neu schreiben oder nur einen schnellen benutzerdefinierten Befehl Alias ​​ tun möchten, wenn Sie test = 'apt-get moo' in einem Bash-Terminal wird es den korrekten Befehl spielen, wenn Sie $ test versuchen –

+0

Das ist kein Alias, und ich sagte, es ist falsch, weil es so etwas wie 'myName = myCommand' nicht gibt, müssen Sie zumindest die Leerzeichen entfernen. – Jahid

2

Sie müssen Befehl Ersatz für von einem Befehl als Argument für eine andere Verwendung Ausgabe:

git commit -m "$(< commit_message.txt)" 

Sie auch git commit -a verwenden können, um alle Dateien hinzufügen, so dass keine Notwendigkeit git add nennen:

git commit -am "$(< commit_message.txt)" 

Ich würde eine Funktion dafür erstellen:

Um es zusammen zu binden:

do_git_stuff() { 
    git commit -am "$(< commit_message.txt)" \ 
    && git push origin dev \ 
    && git push heroku-staging master 
} 

Was ist "$(< file.txt)"?

Der Operator < bedeutet, dass Sie Standard von file.txt nehmen sollten. Eine Befehlsersetzung ($(...)) gibt zurück, was in stdout geschrieben wird. Die Anführungszeichen werden verwendet, um eine Worttrennung zu vermeiden.

+0

Fantastic! Ich wusste nichts davon, und ich freue mich sehr über die detaillierte Erklärung :) – Doug

+0

@Doug Bitte sehen Sie, wie Matthieu Moy empfehlen 'git commit -F ' – andlrc

1

Sie können einfach ein Skript schreiben.

erstellen $HOME/bin Verzeichnis für ausführbare Dateien:

mkdir -p ~/bin 

Fügen Sie das Verzeichnis zu $PATH in Ihrem ~/.bashrc.

export PATH=$PATH:$HOME/bin 

Aktualisieren Sie die Umgebung, in der aktuellen Terminalsitzung:

source ~/.bashrc 

das Skript erstellen:

git_commit_file="$HOME/bin/git-commit" 
cat > "$git_commit_file" <<'EOS' 
#!/bin/bash - 
message_file="$1" 
# Add your commands here ... 
EOS 
chmod +x $git_commit_file 

Jetzt können Sie git-commit message.txt laufen.

By the way, Aliase schaffen, ist so einfach wie ein alias name=command in ~/.bashrc Zugabe, z.B .:

alias ls='ls --color=auto' 

Aber ich würde empfehlen, ein Skript zu schreiben.