2015-07-03 39 views
0

是否有任何方法通过编程方式检测(可能通过向服务器发送一些请求)存储库的类型(例如Git,SVN,Mercurial)?从URL中检测存储库的类型

我已经想过解析URL,但它似乎不可能。例如:

  • 水银回购:bitbucket.org/bos/hg-tutorial-hello
  • SVN:vegastrike.svn.sourceforge.net/svnroot/vegastrike/trunk
+0

您可以举一个例子,您寻找的信息不在URL中吗?当然,@JonathonReinhart, –

+0

。 Mercurial repo:https://bitbucket.org/bos/hg-tutorial-hello。 SVN:https://vegastrike.svn.sourceforge.net/svnroot/vegastrike/trunk。这是我在网上找到的一些示例链接。我已经想过解析链接,但似乎不可能。 –

+0

我会将这些例子添加到您的问题本身(而不是在评论中)。 –

回答

2

有ISN”这是明确做到这一点的一种方式。你可以使用一些试探法来确定哪一个可能是:

  • 如果它包含“SVN”,“颠覆”或“svnroot”或URL“树干”,它可能是一个SVN仓库
  • 如果它包含URL中的'git','master'或'.git',它可能是一个Git存储库
  • 如果URL中包含'hg'或'mercurial',则可能是Mercurial存储库
  • 如果它包含'cvs','CVSROOT'或'HEAD',它可能是一个CVS库。

但是,在尝试克隆它之前,您不会真正知道它是哪一个。您可以执行HEAD操作(如果它是http/s站点),但这可能不一定正常工作 - 无论如何,如果您尝试使用这种方法,则会遇到失败的访问日志。请注意,某些服务器(如GitHub和BitBucket)可让您通过多种机制进行克隆(例如,将Git存储库作为Git仓库或SVN仓库签出)。

+0

但是[SourceTree](https://www.sourcetreeapp.com/)呢?它在克隆对话框窗口中通过URL检查存储库类型。 –

+0

如果提供HTTP或SSH存储库,它几乎可以肯定会尝试Git作为第一次尝试,并且如果缺少Git支持或Git文件,那么它将回退到Mercurial--除非上述其他提示中的其中一个提供了关于什么的概念结账。 – AlBlue

1

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

  • git ls-remote $URL返回true,如果$ URL指向一个Git回购
  • hg id $URL返回ID为提示如果$ URL指向Mercurual回购或错误代码255如果不是