zsh:找出当前目录的VCS

zsh: Find out VCS of current directory

我想创建一个 zsh 小部件,以通过一个按钮执行版本控制系统的常见任务。例如。如果当前目录是 Subversion 签出的一部分,则按 F1 应该调用 "svn status"。如果它在 git 存储库中,它应该调用 "git status -s".

现在,创建小部件没什么大不了的。但是如何判断当前目录下是哪个VCS呢?

我知道 vcs_info 而且我经常使用。但是我找不到任何方法来检索它提供的最基本的信息。有什么想法吗?

如何测试特定元数据目录的存在?

 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

感谢大家的评论。我的解决方案现在看起来像这样:

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 改进的建议:-)

我也实现了 Thomas 的建议,使用 svn infogit rev-parse。但后来我注意到一个问题:如果我有一个 SVN 工作副本在 内部 某个地方检出 GIT 工作副本(是的,这是偶尔需要的),反之亦然,我只会找到我正在检查的第一个。通过上面的解决方案,我找到了 "inner-most",这就是我想要的。其实这也是困扰我一段时间的问题vcs_info