从URL检测存储库的类型

时间:2015-07-03 13:55:45

标签: git svn version-control mercurial

有没有办法以编程方式检测(可能通过向服务器发送一些请求)存储库的类型是什么(例如Git,SVN,Mercurial)?

我已经考虑过解析网址,但似乎不可能。例如:

  • Mercurial repo:bitbucket.org/bos/hg-tutorial-hello
  • SVN:vegastrike.svn.sourceforge.net/svnroot/vegastrike/trunk

2 个答案:

答案 0 :(得分:2)

没有办法明确地做到这一点。您可以使用一些启发式方法来确定它可能是哪一个:

  • 如果它在URL中包含'svn','subversion'或'svnroot'或'trunk',它可能是SVN存储库
  • 如果它在网址中包含'git','master'或'.git',则可能是Git存储库
  • 如果网址中包含'hg'或'mercurial',则可能是Mercurial存储库
  • 如果它在URL中包含'cvs','CVSROOT'或'HEAD',那么它可能是一个CVS存储库。

但是,在尝试克隆它之前,你不会真正知道它是哪一个。您可以执行HEAD操作(如果它是一个http / s站点),但这可能不一定有效 - 并且无论如何,如果您尝试此操作,您将无法访问日志。

请注意,某些服务器(如GitHub和BitBucket)将允许您通过多种机制进行克隆(例如,将Git存储库检出为Git存储库或SVN存储库)。

答案 1 :(得分:1)

如果您只需检测这3种类型的回购:

    如果$ url指向Git repo ,则
  • git ls-remote $URL返回true 如果$ url指向Mercurual仓库,则
  • hg id $URL会返回提示ID,否则会返回错误代码255