7

Thông thường, tôi sẽ cho phép mở rộng bằng cách thêm dòng sau vào .hg/hgrc:cấu hình mở rộng Version kiểm soát trong Mercurial

[extensions] 
hgext.win32text= 
[encode] 
** = cleverencode: 
[decode] 
** = cleverdecode: 

Tuy nhiên, tôi muốn cấu hình này để được phiên bản, tức là một phần của kho lưu trữ, do đó nó là được kích hoạt cho bất kỳ ai khác (đồng nghiệp, máy xây dựng) nhân bản kho lưu trữ. Lưu ý rằng bất kỳ ai nhân bản kho lưu trữ không được yêu cầu phải làm mọi thứ để bật các tiện ích mở rộng này.

Có vẻ như không thể từ the documentation, nhưng có ai biết bất kỳ thủ thuật gọn gàng nào có thể giúp tôi ở đây không?

Trả lời

9

Bạn muốn sử dụng tính năng tự động để làm điều gì đó tự động khi bạn sao chép một repo (cập nhật móc hoặc cấu hình). Documentation nói rằng điều đó là không thể và đưa ra một số lý do rất tốt:

Hooks do not propagate 

In Mercurial, hooks are not revision controlled, and do not propagate when you clone, 
or pull from, a repository. The reason for this is simple: a hook is a completely  
arbitrary piece of executable code. It runs under your user identity, with your 
privilege level, on your machine. No comments 

It would be extremely reckless for any distributed revision control system to 
implement revision-controlled hooks, as this would offer an easily exploitable way to 
subvert the accounts of users of the revision control system. No comments 

Vì vậy, rõ ràng, chính nó sẽ không giải quyết được vấn đề của bạn. Bạn nói rõ rằng bạn không muốn gì ngoài việc làm sao để giải quyết vấn đề của bạn, vì vậy câu trả lời là: điều bạn đang yêu cầu là không thể.

Cách duy nhất để giải quyết vấn đề của bạn là tất cả người dùng của bạn sẽ phải chạy/cài đặt ít nhất một lần một tập lệnh nhất định thực hiện các hành động bạn muốn, giống như cài đặt móc phù hợp.

Nếu bạn muốn được thông minh về vấn đề này:

  • tạo ra một kịch bản một lần để chạy mà sẽ cài đặt một cái móc để sao chép các cấu hình ngay vào .hg hoặc người dùng
  • chắc chắn rằng móc, sau khi cài đặt, có thể cập nhật các kịch bản để phân phối bản cập nhật cấu hình cho người sử dụng
  • làm móc thêm một số đặc biệt đánh dấu để viết cam kết
  • từ chối trên kho lưu trữ trung ương cam kết rằng không mang thông điệp đặc biệt

Một chút phức tạp, nhưng đó là gần nhất tôi có thể tưởng tượng đến yêu cầu của bạn:

  • người dùng chạy một kịch bản một lần và họ quên
  • bạn có thể chắc chắn rằng nếu không chạy nó, họ không thể cam kết với repo trung tâm của bạn
+0

Có, các tập lệnh xây dựng đặc biệt hoặc cấu hình máy chủ xây dựng phổ biến là giải pháp tốt nhất tiếp theo. Tôi chỉ hy vọng rằng có một số chức năng không dễ phát hiện trong HG cho việc này. --- "Tài liệu nói rằng nó là không thể và đưa ra một số lý do rất tốt." Nó nói cái này ở đâu? Nghe có vẻ như tôi muốn đọc. – Deestan

+0

Tôi đã chỉnh sửa mục nhập của mình bằng các liên kết đến tài liệu liên quan. –

0

Điều gì tạo liên kết từ .hg/hgrc đến ví dụ: customhg/hgrc để nó được phiên bản. Sau đó, bạn cần phải tạo một số móc sao chép nó trở lại .hg/hgrc - ví dụ: sau mỗi lần cập nhật.

+0

Nó cần phải được hoàn toàn tự động, tôi không muốn định kỳ đăng nhập vào mỗi và mọi nô lệ xây dựng để tạo ra' .hg/hgrc' liên kết. – Deestan

+0

Tôi nghĩ rằng các liên kết hỗ trợ thủy ngân. Vì vậy, nếu bạn kiểm tra customhg/hgrc, trong khi nó trỏ tới .hg/hgrc, nó sẽ hoạt động. –

+1

Tự tạo liên kết không tự động. Vì vậy, bạn đang yêu cầu người dùng thực hiện một hành động cụ thể mà tác giả không muốn. –

6

Phiên bản phát triển hiện tại của Mercurial (được phát hành dưới dạng Mercurial 1.3 vào ngày 1 tháng 7) hỗ trợ chỉ thị %include trong các tệp cấu hình của nó.

Điều đó có nghĩa rằng bạn có thể yêu cầu mọi người đưa

%include ../common-hgrc 

vào .hg/hgrc. Sau khi thực hiện điều đó, bạn có thể kiểm soát hiệu quả cài đặt Mercurial của mình bằng cách thực hiện thay đổi cho common-hgrc. Khi họ kéo thay đổi, cài đặt mới sẽ có hiệu lực.Lưu ý rằng điều này rất nguy hiểm: bất kỳ ai có thể giúp bạn kéo các thay đổi vào kho lưu trữ của bạn giờ có thể chèn móc tùy ý vào common-hgrc và bạn sẽ thực hiện chúng trên lệnh Mercurial tiếp theo (thậm chí là dòng lệnh "an toàn" hg status) .

+0

Tôi thích cách giải quyết này. Nó id tầm thường để bao gồm trong repos một kịch bản nhỏ mà nối thêm dòng% bao gồm .hg/hgrc – LordOfThePigs

1

Bạn có thể giải quyết vấn đề đó qua ProjRC extension.

“Tiện ích này giúp Mercurial tìm kiếm và phân tích cú pháp .hg/projrc để biết các cài đặt cấu hình bổ sung. Các tập tin được chuyển trên bản sao và trên kéo (nhưng không bao giờ đẩy) ”