0

我正在寻找一个简单的 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 边界,这可能会触发一些不希望的错误。

4

1 回答 1

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"
于 2013-07-26T14:56:11.983 回答