2012-06-17 121 views
29

當我克隆一個存儲庫時,這兩個URL是否有區別?爲什麼某些存儲庫URL以.git結尾而其他存儲庫URL不存在?

  1. 沒有git的擴展:

    git clone http://foo/repo 
    
  2. 隨着git的擴展:

    git clone http://foo/repo.git 
    
+0

如果您指的是Github的URL,那麼.git是可選的 – gorelative

+5

您可能對[此](http://stackoverflow.com/a/1734421/164966)感興趣。特別是* reponame.git的命名約定通常保留給裸存儲器...... * – R0MANARMY

回答

30

的約定是git的擴展應該用於裸露的存儲庫,並使用工作樹離開目錄。 Git並不在意,但有一些便利方法可以使它相當透明。

舉例來說,如果你有一個名爲庫/tmp/foo.git和你打電話git clone file:///tmp/foo,Git會首先嚐試找到的/ tmp /富。如果它不存在,它將嘗試使用/tmp/foo.git

這是的不是工作的其他方式。如果您的目錄被命名爲的/ tmp/foo的,並嘗試從/tmp/foo.git克隆你會被告知:

致命的:「/tmp/foo.git」不會出現成爲一個git倉庫

大多數HTTP/HTTPS功能是從您的Web服務器,而不是Git。即使你使用的是Smart HTTP transport,我懷疑大部分的魔法都發生在服務器端的LocationMatch指令中。除了理論之外,對GitHub的一些快速測試表明它在這方面與SSH和Git協議的工作方式相同,但其他Web服務器上的里程可能會有所不同。

+1

我認爲智能http功能是git端的包裝,因此服務器端僅提供HTTP響應。 https://github.com/blog/642-smart-http-support但http://www.kernel.org/pub/software/scm/git/docs/v1.7.3/git-http-backend.html建議我錯了,它有點服務器功能。 –