13

エイリアスを作成しようとすると

[alias]
    my-alias = submodule foreach 'git foo ; git bar'

Git (バージョン 1.7.1) がエラーを吐き出す

user@host:/path/repo.git$ git my-alias
error: unclosed quote
fatal: Bad alias.my-alias string

.gitconfig奇妙な構文解析規則を使用しているように見えるため;、引用符内であっても、行コメントの開始として扱われます。

このエイリアスを指定するにはどうすればよいですか?

4

6 に答える 6

16

エイリアスコマンド全体を二重引用符で囲みます。

my-alias = "submodule foreach 'git foo ; git bar'"

二重引用符を使用すると、.gitconfigパーサーはセミコロンを渡します。submodule foreach引数を;で区切るには、一重引用符が必要です。それらがないと、次のように解析されます

submodule foreach 'git foo'
git bar

そのためgit bar、最後に1回だけ実行されます。

于 2012-02-28T08:31:05.803 に答える
2

完全な柔軟性を得るために、関数を定義して呼び出します。

[alias]
    conf = ! "                                \
        f () {                                \
            git config \"$@\" --get-regexp .  \
            | sort;                           \
        };                                    \
        f"

このエイリアスはgit confgit conf --localまたはとして呼び出すことができgit conf --global、追加のオプションは適切な場所に挿入されます。

于 2016-04-22T17:32:40.640 に答える
2

"単一引用符 ( ) ではなく二重引用符 ( )を使用する必要があります'

[alias]
    foo = "submodule foreach 'echo foo; echo bar'"
    bar = submodule foreach 'echo foo; echo bar'

$ git foo
foo
bar
$ git bar
fatal: Bad alias.bar string: unclosed quote
于 2012-02-28T08:26:40.027 に答える
1

コマンドを二重引用符で囲むだけです。例:

foo       = !"echo foo; echo bar"

にセミコロンを含めるにはfind、次のようにダブル エスケープします。

pull-all  = !"find . -name .git -type d -print -execdir git pull origin \\;"

コマンドと同じ:

my-alias  = "submodule foreach 'git foo; git bar'"

トラブルシューティングのために、コマンドの前に を付けGIT_TRACE=1て、エイリアスをデバッグします。

$ GIT_TRACE=1 git my-alias
18:16:07.904421 git.c:282               trace: alias expansion: my-alias => 'submodule' 'foreach' 'git foo; git bar'
18:16:07.904437 git.c:557               trace: exec: 'git-submodule' 'foreach' 'git foo; git bar'
18:16:07.904443 run-command.c:347       trace: run_command: 'git-submodule' 'foreach' 'git foo; git bar'
于 2016-03-23T18:14:05.923 に答える
0

私は持っている

[alias]
  sm-clean-all = "submodule foreach --recursive 'git clean -fXd'"
于 2013-01-17T10:31:10.417 に答える