89

次のbashシェルコードを埋め込むことはできますか?

for name in $(git diff --name-only $1); do git difftool $1 $name & done

gitエイリアスの作成に直接:

git config --global alias.diffall ***my-bash-code-here***

これは、 SOに関する以前の質問/回答から導き出されたもので、コードを.shファイルに入れてから、ファイルのエイリアスを作成しました。

git config --global alias.diffall '!sh diffall.sh'

しかし、単純さを求める終わりのない探求では、ファイルをスキップしてコードをエイリアスに直接挿入する方法が必要ですか?フォーマットがわかりません...

4

5 に答える 5

100
git config --global alias.diffall '!sh diffall.sh'

これはある意味で冗長です。とにかく'diffall.sh'を$PATHに追加する場合は、それを' git-diffall'として保存し、エイリアスを宣言しないようにしてください。はい、「gitdiffall」で実行されます。

于 2009-08-21T01:29:58.207 に答える
39

gitエイリアス内でコマンドを実行するには、特にそれらのコマンドに引数を渡すには、一時的な関数を作成する必要があります。この関数をすぐに呼び出す必要があります。

$ vim ~/.gitconfig
...
[alias]
    # compare:
    foo = "! echo begin arg=$1/$2/end"
    foo2 = "!f() { echo "begin arg=$1/$2/end"; }; f"

この例では、関数はおそらく必要なものです(また、単一の「ステートメント」で実行できることに関してより柔軟です)。どちらのオプションでも、gitコマンドの残りの引数は、「echo」か「f」かに関係なく、単にargsとしてエイリアスに渡されることがわかります。関数を呼び出すと、明示的に使用されていないものを無視して、単に引数を消費します。

$ git foo a b c
begin arg=a/b/end a b c

$ git foo2 a b c
begin arg=a/b/end

別の例(一致するパターンに基づいてすべてのエイリアスを一覧表示します)(注:.gitconfig全体で同じ関数名 "f()"を再利用し続けることができます):

[alias]
    alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"

1つ目は「foo$」のエイリアスを返し、2つ目は「foo。*」のエイリアスを返します。

$ git alias foo
alias.foo ! echo begin arg=$1/$2/end

$ git alias 'foo.*'
alias.foo ! echo begin arg=$1/$2/end
alias.foo2 !f() { echo begin arg=$1/$2/end; }; f

(nb:実際の結果はシェルによって異なる場合があります。Linux、Unix、Cygwin(Windows)のbashでこれを使用しています。)

于 2013-02-21T05:04:57.373 に答える
27

ドキュメントで見つかりませんでしたが、パスに「git- <name>」というスクリプトを作成すると、リポジトリで「gitname」を使用して呼び出すことができます。

見る:

$ cd ~/bin
$ echo "echo I love this log:
>pwd
>git log --graph  --summary --decorate --all" > git-logg
$ chmod +x git-logg
$ cd /path/to/your/repo
$ git logg
I love this log:
/path/to/your/repo
* commit 3c94be44e4119228cc681fc7e11e553c4e77ad04 (whatever-branch)
| Author: myself <my@Laptop.(none)>
| Date:   Fri Apr 1 16:47:20 2011 +0200
| 
|     would have been better not to do it at all
| 
...
$

したがって、この(かなりあいまいな)方法でも、好きなエイリアスを書くことができます。

さらに、関数を定義する新しいコマンドにオートコンプリートを追加できます。ここの情報

$ _git_logg ()
{
  # you can return anything here for the autocompletion for example all the branches
  __gitcomp_nl "$(__git_refs)" 
}
于 2011-07-16T19:29:30.890 に答える
15

これらの2行を.git/configファイルに追加すると、うまくいくはずです。

[alias]
    diffall = '!for name in $(git diff --name-only $1); do git difftool $1 $name & done'

編集:おそらくgit-configバージョンも機能しますが、管理を容易にするために、エイリアスを構成ファイルに保持したいと思います。

git wikiには、エイリアスを非常に明確に説明しているすばらしいページがあります。http: //git.or.cz/gitwiki/Aliases特に、「引数付きの高度なエイリアス」を読んでください。

于 2009-08-21T00:03:07.820 に答える
-4

(ProGitドキュメントから:http://progit.org/book/ch7-3.html

.git / hooksにスクリプトを追加しようとしましたか?

たとえば、スクリプト.git / hooks / post-checkoutを作成する場合:

#!/bin/bash

echo "This is run after a 'git checkout'"

次に、次のコマンドを実行します。

$ git checkout master
Switched to branch 'master'
This is run after a 'git checkout'
于 2011-12-05T13:01:25.020 に答える