如何检测当前存储库类型和位置?

时间:2013-07-26 14:46:50

标签: git bash mercurial

我正在寻找一个简单的bash脚本,我可以用它来检测我当前所在的scm存储库(git或hg)(当前目录)。

主要的逻辑是从当前目录开始查找第一个.git.hg目录。为了正确,逻辑应该停在文件系统边界。

现在的主要问题似乎是检测文件系统边界。

目前的实施:

LOC=`pwd`

while [ $LOC != '/' ]; do
  if [ -d "$LOC/.git" ]; then
    require_clean_work_tree_git
    break
  elif [ -d "$LOC/.hg" ]; then
    require_clean_work_tree_hg
    break
  else
    LOC=`dirname $LOC`
  fi
done

当前实现的问题是它将跨越FS边界,这可能会触发一些不需要的错误。

1 个答案:

答案 0 :(得分:6)

此功能已在git和hg中实现。为什么不使用他们的实现?

if git status &> /dev/null ; then
    repo=git
    root=$( git rev-parse --show-toplevel )
elif hg status &> /dev/null ; then
    repo=hg
    root=$( hg root )
else
    echo Not in a repo. >&2
    exit 1
fi
echo $repo "$root"