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