使用linux命令的Git别名

时间:2012-12-11 17:05:00

标签: git

基本上我想将当前分支中的本地文件与远程文件进行比较,但我也想知道是否有办法将Git别名与Linux命令混合使用。

我创建的脚本如下所示:

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

有没有办法将其作为Git别名而不必创建脚本?

3 个答案:

答案 0 :(得分:2)

如果值以。开头,别名将传递给shell执行 !字符。因此,可以定义一个别名来做你想做的事。

[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中的原始目录。就是这样 必须将其添加到文件名以便使用别名 存储库中的其他目录。

但是,要做到这一点,有必要将实际代码放入函数中。 否则,之前不能插入该变量 第一个论点。

所以这个别名定义定义了一个带有所需的shell函数(名为f) 命令,然后立即运行它。没有必要清理 临时函数,因为该shell将在函数之后立即退出 确实

答案 1 :(得分:1)

在shell中执行,而不是git本身。编写脚本并将其保存在路径中,或将其写为shell函数:

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即可使用。

答案 2 :(得分:0)

由于git别名不能接受参数(例如$1),因此可能无法直接使用别名执行此操作。不过还有其他几种选择:

  1. 创建脚本some_script并设置调用该脚本的git别名,或
  2. 为脚本git-something命名,确保它在PATH中,然后您可以将其用作git something
  3. 只需使用git以外的脚本。
  4. 但是,在这种情况下,我认为您应该能够git diff origin/master:file master:file。跳过rev-parse位,因此它不会自动排除要使用的远程分支,因此需要更多的精力去了解当前本地分支的上游,但在大多数情况下,这不应该不要那么费劲......