Подтвердить что ты не робот

Почему некоторые URL-адреса репозитория заканчиваются на .git, а другие нет?

Когда я клонирую репозиторий, есть ли разница между этими двумя URL-адресами?

  • Без расширения .git:

    git clone http://foo/repo
    
  • С расширением .git:

    git clone http://foo/repo.git
    
4b9b3361

Ответ 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 в этом отношении, но ваш пробег может отличаться на других веб-серверах.