基本上我想比较当前分支中的本地文件与远程文件,但我想知道是否有方法将Git别名与Linux命令混合。Git别名与Linux命令
剧本我创建看起来像这样:
git show origin/$(git rev-parse --abbrev-ref HEAD):$1 > /tmp/xxx <br/>
git diff /tmp/xxx $1
有没有办法做到这一点作为一个Git别名,而不必创建脚本?
基本上我想比较当前分支中的本地文件与远程文件,但我想知道是否有方法将Git别名与Linux命令混合。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
原来的目录。因此,为了使别名在存储库中的其他目录中工作,需要将其前置到文件名中,这是 。
但是,要做到这一点,有必要把实际的代码放入一个函数中。 否则,该变量无法在第一个参数 之前立即插入。
因此,此别名定义使用所需的 命令定义了一个shell函数(名为f
),然后立即运行该函数。没有必要清理临时函数,因为该函数将在函数 之后立即退出。
由于git
别名不能带参数(例如$1
),因此可能无法直接使用别名来做到这一点。有一对夫妇其他选择,但:
some_script
并成立了git
别名调用脚本或git-something
,确保它在你的PATH
,然后你就可以将其用作git something
或git
以外的脚本即可。然而在这种情况下,我认为你应该可以git diff origin/master:file master:file
。这会跳过rev-parse
位,所以它不会自动分类使用哪个远程分支,因此需要更多精力来知道当前本地分支的上游是什么,但在大多数情况下,这不应该是费劲......
在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
即可使用。
这是我正在寻找的答案。感谢您抽出宝贵的时间。 – CCC