2

我使用此命令导出指定提交中的所有文件

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

4 回答 4

1

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

#!/bin/sh
git archive --output="$1" --format=zip HEAD $(git diff --name-only "$2" "$3")

对于它无法识别的子命令,git将在您的路径中搜索名为git-<command>. 最好对参数进行一些健全性检查,并确保chmod +x <path>/<to>/git-he.

于 2012-10-19T14:26:16.147 回答
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. 但这应该给你一个想法。

于 2012-06-22T00:45:47.703 回答
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

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

于 2012-10-19T14:08:41.730 回答
0

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

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

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

于 2012-08-23T05:56:27.517 回答