埋め込みの二重引用符をバックスラッシュでエスケープする必要があります。例えば:
[alias]
next = "!f() { id=$(git rev-list --reverse --ancestry-path ..master | head -1); test -n \"$id\" && git checkout $id || echo 'no more commits'; }; f"
(私は実際にmaster
をハードコーディングするのでコメントアウトしている偽です:これはthis answerから残っています)。
next = "!f() { \
id=$(git rev-list --reverse --ancestry-path ..master | head -1); \
test -n \"$id\" && git checkout $id || echo 'no more commits'; }; f"
(未テストが、動作するはずです):
また、バックスラッシュ、改行で長い行を折り返すことができます。
言ったことすべてが、これは間違っている:基本的には、リモートサーバー上のすべてのブランチを引っ張っのエイリアスを作成している
。
あなたはrefs/remotes/origin/zorg
とrefs/remotes/evil/zorg
の両方を持っている場合あなたのサンプルの別名を使用すると、完全に一般に可能でない限り、それが行くように細かいですが、それぞれのリモート追跡ブランチ(例えばための新しいローカルブランチを作成しようローカルブランチzorg
は両方のリモートトラッキングブランチを追跡できません)。 からフェッチするすべてのリモート(fetch
デフォルトからフェッチを意味し、その後、あなたはgit fetch --all
を実行し、(スクリプトの目的のために、それはここgit for-each-ref
を使用することをお勧めしますが、既存のループはあなたの目的のために十分に機能するはずです。)
しかし、現在のブランチのリモートとはかなりゆるやかに定義されている「現在の」リモート、または現在のブランチにリモートセットがない場合はorigin
となります)。git pull --all
を実行して--all
からgit fetch
に再度渡し、設定されたremote
およびmerge
の設定に基づいて、現在のブランチを変更(またはリベース)します。
したがって、ループで作成したブランチの1つがに更新されます。
各ローカルブランチをマージまたはリベースするには、ローカルブランチをループする必要があります(もう一度、好ましくはgit for-each-ref
を使用します)。
エラーは何ですか? –
あなたのコマンドの外側の区切り文字として一重引用符( '' 'の代わりに' '' ')を使用しようとしましたか、文字列の中にダブルクォート(' ''の代わりに '' '*)*をエスケープしてみましたか? – LeGEC