Почему некоторые URL-адреса репозитория заканчиваются на .git, а другие нет?
Когда я клонирую репозиторий, есть ли разница между этими двумя URL-адресами?
Без расширения .git:
git clone http://foo/repo
С расширением .git:
git clone http://foo/repo.git
Ответ 1
Соглашение состоит в том, что расширение .git должно использоваться для голых репозиториев и прекращено из каталогов с рабочим деревом. Git все равно, но имеет несколько удобных методов, которые делают это достаточно прозрачным.
Например, если у вас есть репозиторий с именем /tmp/foo.git, и вы вызываете git clone file:///tmp/foo, Git сначала попытается найти /tmp/foo. Если он не существует, он попробует /tmp/foo.git.
Это не работает наоборот. Если ваш каталог имеет имя /tmp/foo, и вы пытаетесь клонировать от /tmp/foo.git, вам будет сказано:
fatal: '/tmp/foo.git' не является репозиторием Git
Большинство функций HTTP/HTTPS от вашего веб-сервера, а не Git. Даже если вы используете смарт-HTTP-транспорт, я подозреваю, что большая часть магии происходит в директиве LocationMatch на стороне сервера. Теория в сторону, некоторые быстрые тесты против GitHub показывают, что она работает так же, как SSH и Git procotols в этом отношении, но ваш пробег может отличаться на других веб-серверах.