0

基本的に、現在のブランチのローカルファイルをリモートファイルと比較したいのですが、GitエイリアスをLinuxコマンドと混合する方法があるかどうかも知りたいです。

私が作成したスクリプトは次のようになります。

git show origin/$(git rev-parse --abbrev-ref HEAD):$1 > /tmp/xxx <br/>
git diff /tmp/xxx $1

スクリプトを作成する代わりに、Gitエイリアスとしてそれを行う方法はありますか?

4

3 に答える 3

2

値が文字で始まる場合、エイリアスは実行のためにシェルに渡されます !。したがって、必要なことを実行するためのエイリアスを定義することができます。

[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、目的のコマンドを使用してシェル関数(という名前)を定義し、すぐにそれを実行します。関数が終了した直後にシェルが終了するため、一時関数をクリーンアップする必要はありません。

于 2012-12-11T21:02:41.570 に答える
1

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で使用できます。

于 2012-12-11T18:17:11.140 に答える
0

gitエイリアスは引数を取ることができないため (例: ) $1、おそらくエイリアスで直接これを行う方法はありません。ただし、他にもいくつかの選択肢があります。

  1. スクリプトを作成し、そのスクリプトを呼び出すエイリアスをsome_script設定する、またはgit
  2. スクリプトに名前を付け、それgit-somethingがあなたの中にあることを確認してから、またはPATHとして使用できますgit something
  3. の外部でスクリプトを使用するだけですgit

ただし、この場合、できるはずだと思いますgit diff origin/master:file master:file。それは少しスキップするrev-parseので、どのリモート ブランチを使用するかを自動的に分類しません。そのため、現在のローカル ブランチの上流にあるものを知るためにもう少し精神的な努力が必要になりますが、ほとんどの場合、それはそれほど骨の折れる作業ではないはずです。 ...

于 2012-12-11T17:22:23.513 に答える