git - bashrc 别名,不要混淆 git 和 mercurial

标签 git bash mercurial alias

场景:我更喜欢 Mercurial,但我经常需要处理 git 存储库,所以我最终每天都使用它们。因此,我经常输入:

hg commit -m "message"

...我想要的地方:

git commit -am "message"

...反之亦然。

我希望我的 bashrc 文件足够智能,以便它可以通过先发制人地检查我所在的目录是否有“.git”或“.hg”目录和“修复”来检测这种混淆符合语法。

基本上我认为我正在寻找的是一种通过 bash 函数覆盖这两个命令的方法(我知道该怎么做)并以某种方式检查命令的第一部分是否以“hg ci -m”或“hg ci -m”开头“git ci -am”(这个我不知道)。

我不确定 bashrc 别名/函数是否可以扩展到这样的表达水平,但我确定我不是唯一被这种“混淆”困扰的人,所以我想知道是否有人已经想出了一个解决方案。

最佳答案

我对 hg 了解不够,无法建议如何重写命令,但这里有一些方便的功能:

is_git_repo() { command git rev-parse --git-dir &> /dev/null; }
is_hg_repo() { command hg root &> /dev/null; }

示例用法:

git() { 
  if is_hg_repo
  then
    echo "This is is a hg repo, you silly goose!"
    return 1
  else
    command git "$@"
  fi
}

hg() { 
  if is_git_repo
  then
    echo "Surely you're joking... this is git repo!"
    return 1
  else
    command hg "$@"
  fi
}

关于git - bashrc 别名,不要混淆 git 和 mercurial,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23096996/

相关文章:

git - 将 master 压缩并 merge 到同一个分支

影响子模块的 Git 属性

linux - 输出重定向不适用于某个程序

java - 如何在 bash 变量中存储受计数影响的 PostgreSQL 插入查询行

javascript - 通过URL获取执行本地bash脚本

linux - 如何在不使用 "yum"命令的情况下在我的 Red Hat Linux 机器上安装 Mercurial?

macos - 在 Mac 上,我在哪里可以找到 git-http-backend?

eclipse - Windows 7 64 位 : doesn't install "Windows Binaries for Mercurial" 上的 MercurialEclipse

git - 将 Mercurial 存储库推送到 Git 存储库时出现 "abort: No module named selectors!"

git - 将工作流程从 CVS 概念/限制中解放出来