Fish shell:每个目录的别名

Fish shell: Alias per directory basis

目前我的团队在各种项目中使用 Git a.w.a Mercurial,所以我在这里定义我自己的 vcs 命令,使不同 projects/directories 之间的通用事物无缝连接(git & 汞)。

如何在 fish shell 中实现这一点?这样别名就可以根据 directory/subdirectory 触发相应的 git 或 hg 命令。

您的函数可以使用 git rev-parse --show-toplevel 和 Mercurial 的相应函数来检查它是否在 Git 或 HG 文件夹中。根据结果​​,您可以决定执行什么。

您可以通过运行来确定当前的git分支:

set git_branch (git symbolic-ref HEAD ^/dev/null | sed -e 's|^refs/heads/||')

和当前的 hg 分支:

set hg_branch (hg branch)

然后简单地检查哪一个是真的,然后从那里继续:

if test "$git_branch"
    git $argv
else if test "$hg_branch"
    hg $argv
else
    echo "[X] Not in a VCS directory"
    return 1
end

如果您真的想编写一整套 git/hg 不可知的 VCS 命令,则需要做更多的工作来翻译所有等效命令并映射参数等。

虽然这通常不是一个好主意,但您会掩盖底层系统的实际行为。最好只是向开发人员展示您所在的回购类型,或者使用像 hg-git.

这样的真正的兼容层