2016-10-11 3 views
1

Ich versuche einen benutzerdefinierten Befehl für git zu schreiben. Ich möchte, dass es sich wie git rebase -i verhält, wo eine Datei in VIM geöffnet wird und das Schreiben + Beenden dieser Datei mehr Code auslöst.Wie man den Befehl "git rebase -i" ähnlich macht

Beispiel dessen, was, was ich bin auf

Wenn Sie git rebase -i laufen, diese Datei öffnet:

noop 

# Rebase 3ffddbe..3ffddbe onto 3ffddbe (1 command(s)) 
# 
# Commands: 
# p, pick = use commit 
# r, reword = use commit, but edit the commit message 
# e, edit = use commit, but stop for amending 
# s, squash = use commit, but meld into previous commit 
# f, fixup = like "squash", but discard this commit's log message 
# x, exec = run command (the rest of the line) using shell 
# d, drop = remove commit 
# 
# These lines can be re-ordered; they are executed from top to bottom. 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# 
# However, if you remove everything, the rebase will be aborted. 
# 
# Note that empty commits are commented out 

Normalerweise gibt es Hashes dort begehen und Sie können oder was auch immer quetschen. Ich möchte etwas Ähnliches, wo ich meinen benutzerdefinierten git edmund Befehl ausführen könnte, und es würde die Ergebnisse in einer Datei öffnen.

So ist mein Ziel:

1) git edmund

2) bearbeiten Sie die Datei, die sich öffnet. Ich möchte den Inhalt wie folgt aussehen (im Wesentlichen das Ergebnis der git log -n 3 --pretty=format:"%H %cN"):

3ffddbebbfb8eef48e69ca455628bd8b94f00eed Edmund 
5ae79d3d7b0e8b33d0f3dcc366439e62e5703e1d Charlie 
2063a5fce18972fee0bfa589ee2e2668f5a026f9 Kevin 

3) Run-Code, parst die Datei

Antwort

3

ein Skript erstellen Namen git-edmund, legen Sie sie irgendwo in Ihrem $PATH und machen sicher, dass es ausführbar ist. Das Skript sollte wohl so etwas wie ...

#!/bin/sh 
tmpfile=$(mktemp gitXXXXXX) 
trap "rm -f $tmpfile" EXIT 
git log -n 3 --pretty=format:"%H %cN" > $tmpfile 
${VISUAL:-${EDITOR:-vi}} $tmpfile 
...do stuff with $tmpfile here... 

Wenn Sie jetzt git edmund ausführen, wird es Ihr git-edmund Skript ausführen, in denen Sie ausführen können, was Logik, die Sie benötigen.

+0

Sie die echte MVP. Vielen Dank!! – Edmund

+0

Verwendet dies git's konfigurierten 'core.editor'? – rubenvb

+0

Nicht wie geschrieben, aber natürlich könnten Sie die Zeile ändern, die den Editor aufruft, um 'git config' für diese Information zu fragen. – larsks

1

Was Sie tun können, ist Ihre eigene Git alias mit einer benutzerdefinierten Shell-Funktion zu erstellen. Es könnte wie folgt aussehen:

[alias]  
edmund = "!ed() { git log -n 3 --pretty=format:\"%H %cN\" | vim - ; }; ed" 

so, wenn Sie git edmund ausführen wird es den Editor vim mit 3 neuesten Commits öffnen. Es ist nicht das gewünschte Verhalten, aber Sie können damit beginnen und es verbessern. Ich hoffe, es hilft.

Verwandte Themen