基本的に、現在のブランチのローカルファイルをリモートファイルと比較したいのですが、GitエイリアスをLinuxコマンドと混合する方法があるかどうかも知りたいです。
私が作成したスクリプトは次のようになります。
git show origin/$(git rev-parse --abbrev-ref HEAD):$1 > /tmp/xxx <br/>
git diff /tmp/xxx $1
スクリプトを作成する代わりに、Gitエイリアスとしてそれを行う方法はありますか?
基本的に、現在のブランチのローカルファイルをリモートファイルと比較したいのですが、GitエイリアスをLinuxコマンドと混合する方法があるかどうかも知りたいです。
私が作成したスクリプトは次のようになります。
git show origin/$(git rev-parse --abbrev-ref HEAD):$1 > /tmp/xxx <br/>
git diff /tmp/xxx $1
スクリプトを作成する代わりに、Gitエイリアスとしてそれを行う方法はありますか?
値が文字で始まる場合、エイリアスは実行のためにシェルに渡されます
!
。したがって、必要なことを実行するためのエイリアスを定義することができます。
[alias]
diff-remote = "!f() { git show origin/$(git rev-parse --abbrev-ref HEAD):$GIT_PREFIX$1 > /tmp/xxx; git diff /tmp/xxx $GIT_PREFIX$1; }; f"
エイリアスは常にリポジトリの最上位ディレクトリから実行され、そこから元のディレクトリへのパスはに保存され$GIT_PREFIX
ます。したがって、エイリアスがリポジトリ内の他のディレクトリから機能するためには、ファイル名の前にそれを追加する必要があります。
ただし、そのためには、実際のコードを関数に入れる必要があります。そうしないと、その変数を最初の引数の直前に挿入する方法がありません。
したがって、このエイリアス定義はf
、目的のコマンドを使用してシェル関数(という名前)を定義し、すぐにそれを実行します。関数が終了した直後にシェルが終了するため、一時関数をクリーンアップする必要はありません。
git 自体ではなく、シェルで実行します。スクリプトを記述してパスに保存するか、シェル関数として記述します。
function diff-remote()
{
git show "origin/$(git rev-parse --abbrev-ref HEAD):$1" > /tmp/diff-remote.$$
git diff /tmp/diff-remote.$$ "$1"
rm /tmp/diff-remote.$$
}
コマンドラインに入力するか、ファイルに保存してソースにするか、.bashrc
.
入力するだけdiff-remote myfile
で使用できます。
git
エイリアスは引数を取ることができないため (例: ) $1
、おそらくエイリアスで直接これを行う方法はありません。ただし、他にもいくつかの選択肢があります。
some_script
設定する、またはgit
git-something
があなたの中にあることを確認してから、またはPATH
として使用できますgit something
git
。ただし、この場合、できるはずだと思いますgit diff origin/master:file master:file
。それは少しスキップするrev-parse
ので、どのリモート ブランチを使用するかを自動的に分類しません。そのため、現在のローカル ブランチの上流にあるものを知るためにもう少し精神的な努力が必要になりますが、ほとんどの場合、それはそれほど骨の折れる作業ではないはずです。 ...