【问题标题】:bashrc alias for not confusing git and mercurialbashrc 别名,用于不混淆 git 和 mercurial
【发布时间】:2014-05-30 14:11:27
【问题描述】:

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

hg commit -m "message"

...我想要的地方:

git commit -am "message"

...反之亦然。

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

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

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

【问题讨论】:

  • 到目前为止你尝试过什么?
  • +1 非常好的问题。很遗憾,我无法为您提供任何答案。
  • 与其使用这些丑陋的hack,不如考虑使用shell readline history 功能。
  • 编写一个使用正确系统(基于当前目录中的存储库)执行基本版本控制操作的 shell 脚本对我来说几乎不像是“丑陋的 hack”。
  • 阅读历史记录听起来很有希望:您能详细说明一下吗?

标签: git bash mercurial alias


【解决方案1】:

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

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
}

【讨论】:

  • 这在实践中不是很有用,因为它只会更改您收到的错误消息(而不是“做正确的事情”)。
  • @GiampaoloRodolà 好吧,只是修改这个 sn-p 以满足您的需求,而不是抱怨它不是 100% 您正在寻找的东西......
  • 我只是说这不是我想要的根本(问题不同)。 is_git_repo() 和 is_hg_repo() 函数是一个有价值的贡献,因此我为你投票。
【解决方案2】:

如何编写一个脚本来检查.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',它就会回显并为您运行正确的命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 2011-03-07
    • 1970-01-01
    • 2023-03-03
    • 2018-05-22
    • 2012-04-23
    相关资源
    最近更新 更多