Làm cách nào để thêm kho lưu trữ từ xa trong Mercurial?


99

Tôi đang làm việc với kho lưu trữ Git theo cách sau:

  • Tôi có kho lưu trữ chính và một số điều khiển từ xa trên các máy sản xuất khác nhau.
  • Tôi đang đẩy mã sản xuất đến điều khiển từ xa và khởi động lại các dịch vụ để các thay đổi có hiệu lực.

Tôi sắp chuyển từ Git sang Mercurial và tôi muốn biết trước bằng cách nào tôi có thể đạt được điều như vậy.

Câu trả lời:


130

Bạn thêm các mục nhập vào [paths]phần của .hg/hgrctệp sao chép cục bộ của bạn . Đây là ví dụ về một phần sẽ có trong .hg/hgrctệp:

[paths]
remote1 = http://path/to/remote1
remote2 = http://path/to/remote2

Sau đó, bạn có thể sử dụng các lệnh như hg push remote1để gửi các tập hợp thay đổi đến repo đó. Nếu bạn muốn thư mục cập nhật từ xa đó là thư mục đang hoạt động, bạn cần đặt một changegrouphook tại vị trí từ xa đó cập nhật. Điều đó sẽ trông giống như:

[hooks]
changegroup = hg update 2>&1 > /dev/null && path/to/script/restart-server.sh

Không phải ai cũng thích việc có các kho lưu trữ từ xa tự động cập nhật thư mục làm việc của họ khi đẩy và chắc chắn nó không phải là mặc định.


23
Đối với bất kỳ ai chỉ muốn xem điều khiển từ xa sử dụng hg pathstương đương với git remote -v.
Keyo

5
default-push (thay vì ví dụ như remote1) cho phép người ta chỉ cần nhập "hg push". Kho lưu trữ đẩy mặc định sau đó được sử dụng. Rất hữu ích.
Christian

6
@Christian default-pushchỉ cần thiết / hữu ích nếu mục tiêu đẩy thông thường của bạn khác với nguồn kéo thông thường của bạn. Nếu chúng giống nhau (hoặc bạn không bao giờ kéo) thì defaultđủ.
Ry4an Brase

2
Chỉ cần bổ sung thêm về điều này: nếu bạn có cả default-pushdefaulttrong tệp cấu hình của mình, thì tệp đầu tiên sẽ được sử dụng để đẩy và tệp sau để kéo. Nếu bạn muốn đẩy và kéo từ cùng một repo từ xa (điều mà bạn có thể làm nếu bạn đang sử dụng Mercurial theo cách tập trung), thì chỉ cần đưa defaulttệp vào. Nó sẽ được để nguội nếu họ thêm một chút tùy chọn dòng lệnh để chỉ làm điều đó trên push đầu tiên ... (hoặc có lẽ tôi là quá nhiều của một người CVS ;-))
tiktak

Tôi đã cài đặt Mercurial v2.6.2 trên máy Mac của mình và tệp để thiết lập đường dẫn nằm trong đó .hg/hgrc(không có DOT trước tên tệp).
Regis Zaleman

9

nếu bạn muốn thêm đường dẫn mặc định, bạn phải làm việc với defaulttrong ~project/.hg/hgrctệp của mình . Như sau:

[paths]
default = https://path/to/your/repo

Chúc may mắn.


5

Bạn có thể xem plugin hg-git GitHub :

ý tưởng chung của hg-git

thêm khả năng đẩy đến và kéo từ kho lưu trữ máy chủ Git từ Mercurial.
Điều này có nghĩa là bạn có thể cộng tác trên các dự án dựa trên Git từ Mercurial hoặc sử dụng máy chủ Git làm điểm cộng tác cho một nhóm với các nhà phát triển sử dụng cả Git và Mercurial.

Lưu ý: Tôi chưa thử nghiệm công cụ đó với các phiên bản mới nhất của Mercurial.


1
Tôi có khả năng chuyển mọi thứ sang trọng lượng, tôi chỉ muốn sử dụng một công cụ để quản lý nguồn của mình. Chuyển đổi khi kho lưu trữ xây dựng các cấu trúc thích hợp và sau đó chỉ các lệnh trọng thương để sản xuất. Tôi biết rằng cả git và thương mại đều có thể hợp tác nhưng chưa bao giờ thử.
ngực trần

2
^ Chris: câu hỏi của bạn cũng vậy: làm cách nào để chuyển đổi các repo Git thành Mercurial? ", Hoặc" cách khai báo / thiết lập repo Hg từ xa? "(Như trong superuser.com/questions/43686/… ), hoặc" đâu a điều khiển từ xa được khai báo trong Hg? "( crazythinking.wordpress.com/2009/03/07/… )
VonC

0

Nếu bạn đang sử dụng Unix và đã cài đặt Git, bạn có thể sử dụng hàm bash này để dễ dàng thêm đường dẫn đến điều khiển từ xa mà không cần trình soạn thảo văn bản:

add-hg-path() {
    git config -f $(hg root)/.hg/hgrc --add paths.$1 $2
    awk '{$1=$1}1' $(hg root)/.hg/hgrc > /tmp/hgrc.tmp
    mv /tmp/hgrc.tmp $(hg root)/.hg/hgrc
}

Sau đó, gọi nó bằng:

$ add-hg-path remote1 https://path.to/remote1

Nếu ai đó muốn xây dựng một Powershell tương đương, tôi cũng muốn đưa vào. Các cải tiến tiềm năng khác bao gồm kiểm tra lỗi trên các tham số và bao thanh toán cuộc gọi tới $(hg root).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.