2012-06-17 4 views
29

Khi tôi sao chép một kho lưu trữ, có sự khác biệt nào giữa hai URL này không?Tại sao một số URL của kho lưu trữ kết thúc bằng .git trong khi một số khác thì không?

  1. Nếu không có phần mở rộng .git:

    git clone http://foo/repo 
    
  2. Với phần mở rộng .git:

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

nếu bạn đang đề cập đến URL Github .git là tùy chọn – gorelative

+5

Bạn có thể quan tâm đến câu trả lời này [http://stackoverflow.com/a/1734421/164966). Cụ thể * Quy ước đặt tên của reponame.git thường được dành riêng cho các đối tượng trần ... * – R0MANARMY

Trả lời

30

Quy ước là .git phần mở rộng nên được sử dụng cho trần kho lưu trữ, và trái tắt của thư mục với một cây làm việc. Git không thực sự quan tâm, nhưng có một vài phương pháp tiện lợi mà làm cho điều này khá minh bạch.

Ví dụ, nếu bạn có một kho lưu trữ tên /tmp/foo.git và bạn gọi git clone file:///tmp/foo, đầu tiên Git sẽ cố gắng tìm /tmp/foo. Nếu nó không tồn tại, nó sẽ thử /tmp/foo.git thay thế.

Điều này làm không hoạt động theo cách khác. Nếu thư mục của bạn được đặt tên /tmp/foo và bạn cố gắng sao chép từ /tmp/foo.git bạn sẽ được thông báo:

gây tử vong: '/tmp/foo.git' không xuất hiện để là một kho lưu trữ git

Hầu hết chức năng HTTP/HTTPS là từ máy chủ web của bạn, chứ không phải Git. Ngay cả khi bạn đang sử dụng Smart HTTP transport, tôi nghi ngờ hầu hết các phép thuật xảy ra trong chỉ thị LocationMatch phía máy chủ. Lý thuyết sang một bên, một số thử nghiệm nhanh chóng chống lại GitHub cho thấy nó hoạt động theo cách tương tự như SSH và Git procotols trong khía cạnh đó, nhưng mileage của bạn có thể khác nhau trên các máy chủ web khác.

+1

Tôi nghĩ rằng khả năng http thông minh là một trình bao bọc ở phía git, do đó phía máy chủ chỉ đơn giản là cung cấp phản hồi HTTP. https://github.com/blog/642-smart-http-support nhưng http://www.kernel.org/pub/software/scm/git/docs/v1.7.3/git-http-backend.html đề xuất Tôi đã sai và nó là một chút chức năng máy chủ. –