2012-06-17 2 views
29

Quando clono un repository, c'è qualche differenza tra questi due URL?Perché alcuni URL di repository terminano con .git mentre altri no?

  1. senza estensione .git:

    git clone http://foo/repo 
    
  2. Con estensione .git:

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

se si fa riferimento a URL Github, il file .git è opzionale – gorelative

+5

La risposta potrebbe essere [questa] (http://stackoverflow.com/a/1734421/164966). Specificamente * La convenzione di denominazione di reponame.git di solito è riservata ai repositori nudi ... * – R0MANARMY

risposta

30

La convenzione è che il .git estensione deve essere usato per bare repository e lasciato fuori dalle directory con un albero di lavoro. Git non gli interessa molto, ma ha alcuni metodi di convenienza che lo rendono abbastanza trasparente.

Ad esempio, se si dispone di un repository chiamato /tmp/foo.git e vi invito git clone file:///tmp/foo, Git in primo luogo cercare di trovare /tmp/foo. Se non esiste, proverà invece /tmp/foo.git.

Questo corrisponde a non al contrario. Se la directory è denominata /tmp/foo e si tenta di clonare da /tmp/foo.git ti sarà detto:

fatale: '/tmp/foo.git' non sembra essere un repository git

La maggior parte delle funzionalità HTTP/HTTPS proviene dal server Web, non da Git. Anche se stai utilizzando Smart HTTP transport, sospetto che la maggior parte della magia avvenga in una direttiva LocationMatch lato server. A parte la teoria, alcuni test rapidi contro GitHub dimostrano che funziona allo stesso modo dei procotoli SSH e Git sotto questo aspetto, ma il tuo chilometraggio può variare su altri server web.

+1

Ho pensato che la funzionalità HTTP intelligente fosse un wrapper sul lato git, in modo che il lato server fornisse semplicemente una risposta HTTP. https://github.com/blog/642-smart-http-support ma http://www.kernel.org/pub/software/scm/git/docs/v1.7.3/git-http-backend.html suggerire Ho sbagliato ed è un po 'di funzionalità del server. –