2012-02-15 3 views
12

Vài ngày trước, tôi bắt đầu thử nghiệm với Mercurial, và mọi thứ trở nên tuyệt vời, cho đến khi tôi quyết định thử một chương trình nhỏ, nhận danh sách các kho và danh sách ID thay đổi cho mỗi kho lưu trữ từ máy chủ từ xa, cho phép người dùng chọn kho lưu trữ và thay đổi, sao chép và cập nhật bản sửa đổi đã chọn. Điều này dẫn đến hai câu hỏi:Mercurial: nhận được thông tin về kho lưu trữ mà không cần nhân bản chúng

  1. Có cách nào để có danh sách các kho lưu trữ từ máy chủ (ngoài phân tích cú pháp HTML) không?
  2. Có cách nào để lấy thông tin, chẳng hạn như thẻ, chi nhánh, v.v. về một trong các kho lưu trữ, mà không thực sự nhân bản nó trước?

Trả lời

11

Không, Mercurial được thiết kế sao cho bạn cần một kho lưu trữ cục bộ cho hầu hết các lệnh. Các chỉ built-in lệnh đó sẽ cung cấp cho bạn thông tin về một kho lưu trữ từ xa là hg id:

$ hg id https://bitbucket.org/aragost/javahg/ 
3b2711b26dbd 

Để có được giữ của biết thêm thông tin bạn đôi khi có thể khai thác raw mẫu cho hgweb:

$ wget -q -O - 'https://www.mercurial-scm.org/repo/hg/tags?style=raw' | head 
tip  a3a36bcf122e2ea4edbbe4ac44da59446cf0ee07 
4.2.1 c850f0ed54c1d42f9aa079ad528f8127e5775217 
4.2  bb96d4a497432722623ae60d9bc734a1e360179e 
4.2-rc 616e788321cc4ae9975b7f0c54c849f36d82182b 
4.1.3 77eaf9539499a1b8be259ffe7ada787d07857f80 
4.1.2 ed5b25874d998ababb181a939dd37a16ea644435 
4.1.1 25703b624d27e3917d978af56d6ad59331e0464a 
4.1  e1526da1e6d84e03146151c9b6e6950fe9a83d7d 
4.1-rc a1dd2c0c479e0550040542e392e87bc91262517e 
4.0.2 e69874dc1f4e142746ff3df91e678a09c6fc208c 

Điều đó đòi hỏi rằng máy chủ đang chạy tập lệnh CGI hgweb đi kèm với Mercurial. Đối với một trang web như Bitbucket, bạn sẽ cần phải sử dụng their API.

Cuối cùng, nếu bạn có thể bật tiện ích mở rộng trên kho lưu trữ từ xa, thì bạn có thể viết tiện ích mở rộng hiển thị thông tin bạn muốn ở định dạng có thể phân tích cú pháp. Tôi đã từng viết such an extension làm bản trình diễn.

+0

Chỉ để làm cho nó rõ ràng hơn rằng nó thực sự không hoạt động không cục bộ, một cái gì đó như 'hg tip --repository https: // bitbucket.org/aragost/javahg /' sẽ thất bại; 'abort: repository 'https://bitbucket.org/aragost/javahg/' không phải là local'. –

+0

@ChrisMorgan: có, hầu như tất cả các lệnh sẽ thất bại như vậy khi bạn chuyển một repo từ xa đến cờ '--repository'. Chỉ có 'hg id' và' hg outgoing' sẽ truy vấn kho từ xa (trong một thời trang khá hạn chế). –

+0

Cảm ơn bạn đã trả lời rõ ràng :) –