如何创建一个Git别名与参数嵌套的命令?(How to create a Git alias wit

2019-09-27 17:49发布

在我的点文件,我有以下功能,工作原理:

function undelete {
  git checkout $(git rev-list -n 1 HEAD -- "$1")^ -- "$1"
}

......我用这样的:

$ undelete /path/to/deleted/file.txt

我想这一范围的命令,因为它是一个git命令。

如何创建一个git的别名,这样我可以用这个混帐alias命令?

$ git undelete /path/to/deleted/file.txt

这里有两个我尝试它不工作的,:

git config --global alias.undelete "!f() { git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1; }; f"
git config --global alias.undelete "!sh -c 'git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1' -"

Answer 1:

可能的别名(见做到这一点jthill的评论 ):

git config --global alias.undelete '!f() { git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1; }; f'
git config --global alias.undelete '!sh -c "git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1" -'

我建议写复杂的事情作为一个shell脚本:

#! /bin/sh
#
# git-undelete: find path in recent history and extract
. git-sh-setup # see $(git --exec-path)/git-sh-setup

... more stuff here if/as appropriate ...
for path do
    rev=$(git rev-list -n 1 HEAD -- "$path") || exit 1
    git checkout ${rev}^ -- "$path" || exit 1
done

(将for循环的目的是使其允许多个路径名“不删除”)。

脚本命名git-undelete ,把它放在你的$PATH (我把脚本$HOME/scripts ),并在运行的任何时间git undelete ,Git会发现你的git-undelete脚本并运行它(用$PATH修改为具有git --exec-path前面,这样. git-sh-setup工程)。



文章来源: How to create a Git alias with nested commands with parameters?
标签: git shell