複数のGitコマンドと位置パラメーターの両方を使用するエイリアスを作成しようとしています。それぞれにStackoverflowページがあり、両方を行うのは痛々しいほど明らかですが、私は問題を抱えています。
例として、ブランチfooに切り替えてステータスを実行します。だから私の.gitconfig
には、次のものがあります。
[alias]
chs = !sh -c 'git checkout $0 && git status'
動作しません。一方、このようなものは機能します。
chs = !sh -c 'git checkout $0'
echoes = !sh -c 'echo hi && echo bye'
どんな洞察もありがたいです。
これは動作します(zshとbashでテスト済み):
[alias] chs = !git checkout $1 && git status
シェル関数を定義できます。
[alias] chs = "!f(){ git checkout \"$1\" && git status; };f"
これは、Windowsバッチ/ msysgit bashを対象としています。他の環境では機能しない可能性があります。
オリヴィエ・ヴェルディエとケビン・バラードが言ったように
[alias] chs = !git checkout $1 && git status
ほとんど動作しますが、引数の偽の余分な挿入を与えます...
git chs demo -> git checkout demo && git status demo
ただし、エイリアスの最後に&& :
を追加すると、偽の引数がロケーションタグで消費されます。
そう
[alias] chs = !git checkout $1 && git status && :
正しい出力を提供します... git chs demo -> git checkout demo && git status
複数行の非常に複雑なgitエイリアスを作成できました。これらはWindowsでも正常に動作しますが、他の場所でも動作すると想定しています。たとえば、
safereset = "!f() { \
trap 'echo ERROR: Operation failed; return' ERR; \
echo Making sure there are no changes...; \
last_status=$(git status --porcelain);\
if [[ $last_status != \"\" ]]; then\
echo There are dirty files:;\
echo \"$last_status\";\
echo;\
echo -n \"Enter Y if you would like to DISCARD these changes or W to commit them as WIP: \";\
read dirty_operation;\
if [ \"$dirty_operation\" == \"Y\" ]; then \
echo Resetting...;\
git reset --hard;\
Elif [ \"$dirty_operation\" == \"W\" ]; then\
echo Comitting WIP...;\
git commit -a --message='WIP' > /dev/null && echo WIP Comitted;\
else\
echo Operation cancelled;\
exit 1;\
fi;\
fi;\
}; \
f"
私は投稿を書き、さらにいくつかの例を持っています こちら 。
[alias]
chs = !git branch && git status
これを試してください:
[alias]
chs = "!sh -c 'git checkout \"$0\" && git status'"
次のように呼び出します:git chs master
各行の末尾に\
を追加することにより、複数行のgitエイリアスを使用することができます。
[alias]
chs = "!git checkout $1 \
; git status \
"
ここでの問題は、位置パラメーターがシェルコマンドに2回送信されるように見えることです(git 1.9.2以降)。意味を確認するには、これを試してください:
[alias]
test = !git echo $*
次に、git test this is my testing string
を実行します。次の出力を確認する必要があります(わかりやすくするために、最後の2行をここで編集します)。
03:41:24 (release) ~/Projects/iOS$ git test this is my testing string
this is my testing string this is my testing string
^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^
#1 #2
これを回避する1つの方法は
[alias]
chs = !git checkout $1 && git status && git echo x >/dev/null
これは、最後のエコーコマンドに適用されるときに追加の位置パラメーターを消費し、結果には影響しません。