如何在git别名中指定'--relative'

时间:2011-09-07 11:09:24

标签: git

我正在尝试编写一个git别名,它将为单个提交创建一个补丁,然后我可以将其应用于上游存储库。

这是我到目前为止所做的:

pa = !sh -c 'git diff --relative "$1"^ "$1"' -

所以在命令行上我说:

$ git pa SHA

我得到了差异输出。

我的问题是--relative选项没有效果。我希望diff相对于当前文件夹,以便补丁在上游存储库中正确应用。例如,我在myproject / libraries / external中,我已在此文件夹中提交了更改。我现在想制作一个我可以提交或提交到外部项目的问题队列的补丁,因此需要--relative选项。

(顺便说一句:我知道格式补丁,但它根本不能做我想要的。我不想要邮件文件,我想要我可以读取的补丁文件并上传到问题跟踪器。)

4 个答案:

答案 0 :(得分:1)

非Git别名(以!开头)总是从回购的顶级目录执行。

因此,对于您定义的别名,您将获得差异,就好像您从未使用过--relative标志

一样

我看到的唯一选择是设置别名:

[alias]
pa = diff --relative

并将其用作git pa SHA^ SHA(这不是更短的别名)

答案 1 :(得分:0)

git diff SHA^ SHA -- .怎么样?那应该是相对于当前的工作目录。我从未听说过--relative选项,也无法在git diff manpage中找到它。

pa = !sh -c 'git diff "$1"^! -- .' -

SHA^!只是一种简洁的说法SHA --not(all of SHA's parents) - 可能不是你期望的合并提交输出)

答案 2 :(得分:0)

尝试将--relative选项与--no-prefix

合并
git diff --no-prefix --relative "$1"^ "$1"

也许你对git diff默认添加到其输出的前缀感到困惑?

答案 3 :(得分:0)

作为manojlds points out,非Git别名(以“!”开头的那些)总是从存储库的顶级目录执行,所以这不会起作用。

相反,您可以使用bash函数(或shell的等效函数):

git-pa() { git diff --relative "$1"^ "$1" "${@:2}"; }

"${@:2}"将所有后续参数保持不变,以防您想要传递其他优化内容 - see documentation)。