zshプラグインのgitエイリアスを使用しています。https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git
したがって、次のようなgitエイリアスがあります。
gst # git status
ga # git add
gc "commit" # git commit -v "commit"
...
...また、git bare repoを使用してすべてのドットファイルをバックアップします。https://github.com/Anthonyive/dotfiles/blob/0706bc81daa3aeb7899b506cd89d4ab78fc7b176/USAGE.md
特に、git bare repoテクノロジは、gitコマンドのエイリアスを次のように指定しますdotfiles
。
alias dotfiles='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
alias d='dotfiles'
それでは、すべてのgit aliasコマンドをどのようにマッピングしますかd
?良い:
dst # similar to gst, but uses the dotfiles alias
da # similar to ga
dc "commit" # similar to gc "commit"
...
一つずつマッピングするのは面倒そうです...
答え1
連想配列aliases
すべてのエイリアス定義を含みます。
for name in "${(@k)aliases}"; do
if [[ $name == g* && $aliases[$name] == 'git '* ]]; then
alias d${name#g}="dotfiles ${aliases[$name]#git }"
fi
done
または、d
エイリアスを次のgitコマンドが必要な関数に変更することもできますが、最初にシェルエイリアスを展開して先行しますgit
。
alias d='d ' # expand aliases after d
function d {
if [[ $1 == "git" ]]; then shift; fi
dotfiles "$@"
}
その後d gst
実行されますdotfiles status
。d gc myfile
実行されますdotfiles commit myfile
。d ls-tree
実行されますdotfiles ls-tree
。完了は可能ですが、簡単ではありません。
答え2
git
すべての呼び出しをに置き換えるには、git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME
次の関数を使用できます。
git() {
command git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME "$@"
}
しかし、この場合、実際にそうする必要はありません。git
これらのオプションフラグを次に渡す代わりに:
export GIT_DIR=$HOME/.dotfiles/
export GIT_WORK_TREE=$HOME
バラよりhttps://www.git-scm.com/docs/git#Documentation/git.txt---git-dirltpathgt
ところで、多くのエイリアスを維持して記憶しようとする代わりに、次のものを使用できます。zsh-autocomplete
記録完了モード。 (免責事項:私はこのプラグインの管理者です。)