¿Qué significa el ".git" en una URL de git?

Configuré un git repo en foo

cd mkdir foo cd foo git init 

Ahora quiero hacer reference a eso remotamente

 git clone git+ssh://me@somemachine/home/me/foo.git fatal: git remote error '/home/me/foo.git' does not appear to be a git repository 

Así que me quito .git y funciona. Pero casi todos los ejemplos que veo tienen ".git" al final. ¿Qué significa ese ".git"?

Además, ¿cuál es la diferencia entre ssh: // … y git + ssh: // … (tanto en términos prácticos como de significado)

¿Qué significa ese ".git"?

.git al final de una carpeta de repository de git es solo una convención de nomenclatura que generalmente significa que la carpeta es un server y no un cliente. Creo que está determinado por el hecho de que el repository está vacío o no (los repositorys no tienen directory de trabajo). La URL de clonación solo apunta a una carpeta, si la carpeta tiene un .git al final, agrégalo. De lo contrario, no.

Además, ¿cuál es la diferencia entre ssh: // … y git + ssh: // … (tanto en términos prácticos como de significado)

En términos prácticos, son prácticamente lo mismo. En sentido, están usando diferentes protocolos para conectarse al server. ssh:// abre una connection SSH a un server con un usuario específico y ejecuta los commands git en el server (por lo general, el server restringirá los commands configurando el shell del usuario en /usr/bin/git-shell ). git+ssh:// significa que el server ejecuta git daemon localmente y que los clientes primero deben abrir una connection SSH para interactuar con el daemon.

Es una convención común (pero ciertamente no universal) que los repositorys de git al descubierto se creen en directorys cuyos nombres terminen en .git . Esa es la razón por la que generalmente ves .git al final de las URL del repository.

No estoy seguro del esquema de git+ssh ; de hecho, no puedo encontrar una reference en las páginas de git man. De acuerdo con los foros de Eclipse, el protocolo ha sido eliminado a favor de old ssh . (Los foros de Eclipse no son, por supuesto, una fuente oficial de información sobre git, pero eso tendría sentido. Nunca supe cuál era la diferencia).

El sufijo .git es simplemente una convención para indicar que el directory en cuestión es un repository bare git (es decir, uno en el que no hay una copy de trabajo). En realidad no es obligatorio.

En cuanto a git+ssh:// , de acuerdo con la página de manual de git-fetch , no está permitido:

Git admite nativamente los protocolos ssh, git, http, https, ftp, ftps y rsync. Las siguientes syntax se pueden usar con ellos:

  • ssh: // [user @] host.xz [: port] /path/to/repo.git/
  • git: //host.xz [: port] /path/to/repo.git/
  • http [s]: //host.xz [: port] /path/to/repo.git/
  • ftp [s]: //host.xz [: port] /path/to/repo.git/
  • rsync: //host.xz/path/to/repo.git/

    También se puede usar una syntax similar a scp con el protocolo ssh:>

  • [usuario @] host.xz: ruta / a / repo.git /

.git no tiene ningún significado especial, el clima que necesita agregar depende de dónde se encuentre el repository en el server, con o sin .git.

a veces un repository con .git implica que es un repository simple.