bashrc别名,不会混淆git和mercurial

时间:2014-04-16 00:40:55

标签: git bash mercurial alias

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

hg commit -m "message"

...而我想要的地方:

git commit -am "message"

......反之亦然。

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

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

我不确定bashrc别名/功能是否可以扩展到如此高水平的表达能力但我确信我不是唯一被这种“混乱”所困扰的人,所以我想知道是否有人已经想出了解决方案。

2 个答案:

答案 0 :(得分:3)

我不太了解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
}

答案 1 :(得分:1)

如何让脚本检查是否存在.git.hg目录,然后在.bashrc中使用常用命令别名来运行脚本?

因为这是选择一个或另一个的问题,可能是

的内容
#!/bin/bash

if [ -d ./.git ]
  then
    cmd='git commit -am '
  else
    cmd='hg commit -m '
fi

cmd=$cmd+$1
echo $cmd
$cmd

将其另存为~/.scripts/commit.sh,并为bashrc添加别名

alias commit='~/.scripts/commit.sh'

现在,当你想要提交时,只需使用commit 'awesome bugfixes',它就会回显并为你运行正确的命令。