【问题标题】:How to get file's relative path in git aliases with parameters?如何在带有参数的git别名中获取文件的相对路径?
【发布时间】:2015-11-26 10:32:34
【问题描述】:

我的.gitconfig 中有以下别名:

[alias]
  lg = log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
  log-between = "!f() { git lgl `git merge-base $2 $1`..$2 -- $3 ; }; f"
  log-between-p = "!g() { git lgl -p $(git merge-base $2 $1)..$2 -- $3 ; }; g"
  diff-between = "!h() { echo $(pwd); git diff $(git merge-base $2 $1) $2 -- $3 ; }; h"

虽然它在大多数情况下都可以正常工作,但当我想获取将第三个参数 ($3) 传递给 diff-between 的文件(或路径)的日志时,就会出现问题。

问题是命令(在此示例中为 h)正在此存储库的根目录中执行(这就是我添加 pwd 打印以进行检查的原因)并且我传入了文件名或带有名称但并不总是绝对路径的路径。

例如

当我运行这个别名时(添加命令打印以检查它将扩展的命令):

  diff-between = "!h() { echo $(pwd); echo "git diff $(git merge-base $2 $1) $2 -- $3" ; }; h"

repo_root_dir/src/ 下像这样:

git diff-between origin/master my_branch

我会得到:

git diff 66efa91ba8c74aa624d05d9ec0b13cc93cbfb6d3 my_branch --

这很好。但是当我这样运行时(使用文件):

git diff-between origin/master my_branch some_other_subdir/src/Base.cpp

我会得到:

git diff 66efa91ba8c74aa624d05d9ec0b13cc93cbfb6d3 my_branch -- some_other_subdir/src/Base.cpp

不管这个命令是从哪里运行的(注意:记住这是从这个 repo 的 root_dir 运行的)


如何正确获取当前目录以便:

  • 有文件root_dir/src/some_other_subdir/Base.cpp
  • 当我在 root_dir/src 并使用 some_other_subdir/Base.cpp 参数运行我的别名时,我得到以下结果
  • 注意pwd 内的 git 别名将返回 root_dir

【问题讨论】:

  • 对此不太确定。但是,您可以尝试将diff-between 别名更改为这样的名称吗? "!h() { echo $(pwd); git diff $(git merge-base $2 $1) $2 -- $(git rev-parse --show-toplevel)\/$3 ; }; h"
  • @kucing_terbang $(git rev-parse --show-toplevel) 这将显示回购根目录的绝对路径,这很容易获得,例如$(pwd),因为这将是执行命令的目录。
  • aaa。好的,我想我对你在这里想要什么感到困惑。

标签: git parameters relative-path git-alias


【解决方案1】:

Git 别名通常在当前目录中执行。除了在 shell 中执行的 git 别名(以 ! 开头)。如果启动了 shell,则 shell 的工作目录将是存储库根目录。

使用${GIT_PREFIX:-./} 变量。它将解析为当前目录的绝对存储库路径。

diff-between = "!h() { git diff $(git merge-base $2 $1) $2 -- ${GIT_PREFIX:-./}$3 ; }; h"

【讨论】:

  • 你先生是个真正的天才 :) 你从哪里得到关于那个“变量”的信息?
  • 来自发行说明... ;) 见github.com/git/git/blob/…
  • 但是你也可以使用git命令git rev-parse --show-prefix
  • 谢谢!我不得不将 cd ${GIT_PREFIX:-./}; 添加到别名的开头,因为它没有采用相对路径。
猜你喜欢
  • 2023-04-04
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多