我想创建一个zsh小部件,用一个按钮执行版本控制系统的常见任务。例如。如果当前目录是Subversion结帐的一部分,按F1键应调用" svn status"。如果它在git存储库中,它应该调用" git status -s"。
现在,创建小部件并不是什么大不了的事。但是,如何确定当前目录中的哪个VCS?
我知道vcs_info
并且我经常使用。但我无法找到任何方法来检索最基本的信息。有什么想法吗?
答案 0 :(得分:2)
如何测试特定元数据目录的存在?
if test -d CVS; then
# CVS
elif test -d .hg; then
# Mercurial
elif test -d .git; then
# Git
elif test -d .svn; then
# Subversion
else
# unknown
fi
答案 1 :(得分:0)
感谢大家的评论。我的解决方案现在看起来像这样:
vcs-status() {
setopt no_autopushd
cmd=""
cur_dir=`pwd`
while [[ `pwd` != "/" ]]; do
if [[ -d .svn ]]; then
cmd="svn status^M"
break
elif [[ -d .git ]]; then
cmd="git status -s^M"
break
fi
cd ..
done
cd $cur_dir
if [[ -n $cmd ]]; then
zle -U $cmd
fi
setopt autopushd
}
zle -N vcs-status
bindkey "\eOP" vcs-status
欢迎提出改进zsh' ish改进的建议: - )
我还使用svn info
和git rev-parse
实施了Thomas的建议。但后来我发现了一个问题:如果我有一个SVN工作副本在某处里面检查了一个GIT工作副本(是的,这是必要的),反之亦然,我只能找到第一个我和#39;检查。通过上面的解决方案,我找到了最里面的"这就是我想要的。事实上,这个问题一直困扰着我vcs_info
一段时间。