基本上我想将当前分支中的本地文件与远程文件进行比较,但我也想知道是否有办法将 Git 别名与 Linux 命令混合。
我创建的脚本如下所示:
git show origin/$(git rev-parse --abbrev-ref HEAD):$1 > /tmp/xxx <br/>
git diff /tmp/xxx $1
有没有办法作为 Git 别名而不是创建脚本?
基本上我想将当前分支中的本地文件与远程文件进行比较,但我也想知道是否有办法将 Git 别名与 Linux 命令混合。
我创建的脚本如下所示:
git show origin/$(git rev-parse --abbrev-ref HEAD):$1 > /tmp/xxx <br/>
git diff /tmp/xxx $1
有没有办法作为 Git 别名而不是创建脚本?
!
如果值以字符开头,则别名将传递给 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
. 因此,有必要将其添加到文件名中,以便别名可以在存储库中的其他目录中工作。
但是,要做到这一点,有必要将实际代码放入函数中。否则,无法将该变量直接插入到第一个参数之前。
因此,这个别名定义定义了一个f
带有所需命令的 shell 函数(名为 ),然后立即运行它。无需清理临时函数,因为该 shell 将在函数完成后立即退出。
在 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
即可使用。
由于git
别名不能带参数(例如$1
),因此可能无法直接使用别名来执行此操作。不过,还有其他几种选择:
some_script
并设置一个git
调用该脚本的别名,或者git-something
,确保它在你的PATH
,然后你可以将它用作git something
,或者git
.但是,在这种情况下,我认为您应该能够git diff origin/master:file master:file
. 这跳过了rev-parse
一点,因此它不会自动排序要使用哪个远程分支,因此需要更多的精力来了解当前本地分支的上游是什么,但在大多数情况下,这不应该是费力的...