2015-07-03 61 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如果不是