如何制作这个git别名?

时间:2012-06-22 00:39:56

标签: git alias

我使用此命令导出指定commit(s)

中的所有文件
git archive --output=export.zip --format=zip HEAD $(git diff --name-only COMMIT1 COMMIT2)

我想创建一个别名,所以我不需要每次都输入这个长命令。

我试过了:

git config --global alias.he "archive --output=\"$1\" --format=zip HEAD \$(git diff --name-only \"$2\" \"$3\")

但是,当我运行git he 1.zip COMMIT1 COMMIT2时,它会提示

error: unknown option `name-only'

有人可以帮我吗?

由于

4 个答案:

答案 0 :(得分:1)

别名通常不采用位置参数。更好的方法是编写一个简短的脚本 - 假设您要使用您提到的语法(git he 1.zip COMMIT1 COMMIT2),将脚本命名为git-he并将其放在路径中的某个位置(例如{{ 1}}如果您是唯一的预期用户,或${HOME}/bin以获得更广泛的可访问性):

/usr/local/bin

对于无法识别的子命令,#!/bin/sh git archive --output="$1" --format=zip HEAD $(git diff --name-only "$2" "$3") 将在您的路径中搜索名为git的脚本。最好对参数进行一些健全性检查,并确保git-<command>

答案 1 :(得分:0)

我建议使用shell别名。我在bash配置文件中定义了几个别名。

alias gs='git status '
alias ga='git add '
alias gb='git branch '
alias gc='git commit'
alias gd='git diff'
alias go='git checkout '

我大多只使用gs代替git status。但这应该会给你一个想法。

答案 2 :(得分:0)

将命令本身的双引号更改为单引号,如下所示:

git config --global alias.he "archive --output='$1' --format=zip HEAD \$(git diff --name-only '$2' '$3')

无需在双引号内转义单引号。

答案 3 :(得分:0)

只需打开终端并输入

即可
pico ~/.gitconfig

并将其粘贴到您的凭据

[alias]
    ci = commit
    cm = commit -am
    br = branch
    newbr = checkout -b
    delbr = branch -d
    showbr = for k in `git branch|sed s/^..//`;do echo -e `git log -1 --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" "$k" --`\\t"$k";done|sort
    co = checkout
    df = diff
    dfc = diff --staged
    changes=diff --name-status -r
    diffstat=diff --stat -r
    lg = log --graph --oneline --pretty=format:'%Cred%h%Creset - %C(yellow)%s%Creset %C(green)<%an<%Creset' --abbrev-commit
    new = !sh -c 'git log $1@{1}..$1@{0} "$@"'
    llog = log --date=local
    fork = remote add -f

当你想要添加或删除别名时,只需编辑它。