2010-03-25 41 views
13

Biểu thức chính quy thích hợp cho kho lưu trữ git là gì?Biểu thức chính quy cho kho git

dụ link: [email protected]: ai/someproject.git

nên nó sẽ như thế nào [user] @ [server]: [Dự ​​án] .git

máy chủ có thể được url hoặc ip Dự án có thể chứa một số ký tự khác ngoài chữ và số như '-' Tôi không chắc vai trò của '/'

bất kỳ đề xuất nào?

+0

Tôi không thuyết phục một biểu thức chính quy là giải pháp tốt nhất cho phân tích cú pháp này, mặc dù nhiều người sẽ không đồng ý. Xem https: //blog.codinghorror.com/regular-expressions-now-you-have-two-problems/ –

Trả lời

11

Git chấp nhận một phạm vi rộng lớn của các biểu URL kho:

* ssh://[email protected]:port/path/to/repo.git/ 
* ssh://[email protected]/path/to/repo.git/ 
* ssh://host.xz:port/path/to/repo.git/ 
* ssh://host.xz/path/to/repo.git/ 
* ssh://[email protected]/path/to/repo.git/ 
* ssh://host.xz/path/to/repo.git/ 
* ssh://[email protected]/~user/path/to/repo.git/ 
* ssh://host.xz/~user/path/to/repo.git/ 
* ssh://[email protected]/~/path/to/repo.git 
* ssh://host.xz/~/path/to/repo.git 
* [email protected]:/path/to/repo.git/ 
* host.xz:/path/to/repo.git/ 
* [email protected]:~user/path/to/repo.git/ 
* host.xz:~user/path/to/repo.git/ 
* [email protected]:path/to/repo.git 
* host.xz:path/to/repo.git 
* rsync://host.xz/path/to/repo.git/ 
* git://host.xz/path/to/repo.git/ 
* git://host.xz/~user/path/to/repo.git/ 
* http://host.xz/path/to/repo.git/ 
* https://host.xz/path/to/repo.git/ 
* /path/to/repo.git/ 
* path/to/repo.git/ 
* ~/path/to/repo.git 
* file:///path/to/repo.git/ 
* file://~/path/to/repo.git/ 

Đối với một ứng dụng mà tôi đã viết rằng đòi hỏi phân tích của các biểu thức (YonderGit), tôi đã đưa ra các biểu thức chính quy sau (Python):

(1) '(\w+://)([email protected])*([\w\d\.]+)(:[\d]+){0,1}/*(.*)' 
    (2) 'file://(.*)'  
    (3) '([email protected])*([\w\d\.]+):(.*)' 

Để phục hồi tối đa URL của pository gặp phải "trong tự nhiên", tôi nghi ngờ (1) đủ.

+1

Điều này không hoạt động với một url như [email protected]: group/project.git – Anonymous

2

Gần

^[^@][email protected][^:]+:[^/]+/[^.]+\.git$ 
+0

Điều này không xử lý git uri của Gerrit. –

0

Các kho lưu trữ Git có thể có nhiều hình dạng và kích thước trông không giống như ví dụ đó. Xem trang người dùng git-clone để biết danh sách đầy đủ.

Một số loại phổ biến hơn bao gồm sử dụng giao thức http hoặc git thay vì SSH (hoặc, thực sự, chỉ định giao thức ssh:// theo cách thủ công). Tên người dùng là tùy chọn, không cần phải là số / hoặc .git, cổng có thể được chỉ định, v.v.

Hiện tại, về cơ bản, bạn chỉ cho phép bản repo Github riêng tư hoặc những người giống như vậy . Đó là điều bạn muốn? Nếu vậy, câu trả lời của S. Mark có vẻ tốt!

Nếu bạn muốn chấp nhận bất kỳ kho git nào, đặt cược tốt nhất có thể là đảm bảo rằng nó là một URI hợp lệ, và sau đó sử dụng git hoặc thư viện git để đảm bảo có thể truy cập vào repo thực tại URI đó.

30

Tôi đang sử dụng các biểu thức chính quy sau đây cho kho từ xa trực tuyến:

((git|ssh|http(s)?)|([email protected][\w\.]+))(:(//)?)([\w\[email protected]\:/\-~]+)(\.git)(/)?

View on Debuggex

Regular expression visualization

+5

Tôi đến đây tìm kiếm một câu lệnh regex vì vậy tôi không phải mất thời gian trên đó và tôi đã tìm thấy trình sửa lỗi regex tốt nhất từ ​​trước đến nay thực hiện. Cảm ơn bạn. – blockloop

+0

Tôi đồng ý về Debuggex. Thật không may, nhóm 4 trong biểu thức trên không đối phó với người dùng khác với "git". –

+0

tinh chỉnh một chút để sử dụng javascript: /((git|ssh|http(s)?)|([email protected][\w.]+))(:(\/\/)?)([\[email protected]: /\-~]+)(\.git)(\/)?/ – Alexee

Các vấn đề liên quan