2012-07-11 24 views
7
  1. Tôi có gốc Mercurial repo (trang web).
  2. Tôi sao chép WordPress từ GitHub mirror vào /wp thư mục con.
  3. Vì tôi muốn phiên bản WP rất ổn định, nhưng không có sự phát triển liên tục, tôi làm git checkout 3.4.1 (trong đó 3.4.1 là thẻ).
  4. Tôi thiết lập nó dưới dạng subrepo trong repo gốc Mercurial và cam kết (sửa đổi WP được chụp tốt trong .hgsubstate).

Và sự cố ở đây bắt đầu. Tôi thực hiện hg push và khi truy cập vào WP:Làm thế nào để sửa Mercurial bị kẹt trên Git subrepo push?

no branch checked out in subrepo wp 
cannot push revision e9bc63e25dc40c07ac3a6778dc2b48e1aa486e36 

Và sau đó chỉ thoát. Đẩy cho repo gốc thậm chí không cố gắng.

Tôi hiểu tại sao Mercurial cố gắng để đẩy subrepo (hành vi dự định), nhưng tôi không thể có ý nghĩa tại sao nó quản lý để thất bại hoàn toàn trên subrepo rằng:

  1. không có thay đổi
  2. đã đọc - chỉ có nguồn gốc là

Làm cách nào để hiểu rằng tôi muốn bản sửa đổi cụ thể này và tôi không muốn nó gây rối với phụ đề Git?

Trả lời

2

Bạn sẽ gặp sự cố với thiết lập này.

Đầu tiên, có vẻ như là mercurial không thể xử lý git subrepos với HEAD riêng lẻ.

Khi bạn thực hiện git checkout 3.4.1, repo của bạn vào trạng thái detached HEAD (bạn sẽ thấy cảnh báo hiệu ứng đó khi bạn thực hiện lệnh). Tại thời điểm đó, nếu bạn chạy git branch, bạn thấy rằng (no branch) được liệt kê là nhánh đang hoạt động. Khi các nỗ lực thủy ngân đẩy, nó sẽ bị nghẹt thở trên trạng thái này. Bạn có thể yêu cầu mercurial developer list lý do tại sao điều này xảy ra, nhưng nó có thể là một hạn chế của việc thực hiện subrepo hiện có.

Thứ hai, sử dụng thủy ngân lệnh đẩy để đồng bộ hóa git subrepos.

Nếu bạn chạy git checkout -b <integration_branch> 3.4.1, nó sẽ di chuyển git ra khỏi trạng thái HEAD tách rời. Tuy nhiên, khi bạn cố gắng để hg push, nó sẽ cố gắng thực sự đẩy đến repo git từ xa. Đối với một subrepo mercurial, nó có thể kiểm tra các thay đổi đi ngay cả khi bạn không có quyền truy cập push vào điều khiển từ xa. Tuy nhiên, GitHub yêu cầu bạn xác thực trước khi nó sẽ cho bạn biết nếu hai repos được đồng bộ hóa. Vì vậy, nếu bạn không có quyền truy cập push vào git remote thì điều này sẽ thất bại. Đây là một phần của thiết kế chiến lược subrepo của mercurial.

Nếu bạn cần phải tiếp tục với thiết lập này, có lẽ bạn nên làm như sau:

  1. Tạo nĩa của riêng bạn của repo WordPress trên GitHub.
  2. Nhân bản ngã ba của bạn vào thư mục subrepo mercurial.
  3. git checkout -b <branch_name> 3.4.1
  4. Tiếp tục từ đó

Có một số thông tin bổ sung trong related question này.

+0

Vâng, có vẻ như đầu tách rời là vấn đề ở đây (mặc dù tôi thấy nó như Git thiếu sót không Mercurial - nếu nó không có bất cứ điều gì để đẩy những gì các chi nhánh hoạt động heck vấn đề? ..). Tuy nhiên, điểm thứ hai của bạn dường như không phải là vấn đề, các bản phụ khác của GitHub được cập nhật để làm việc tốt. Giải pháp hiện tại của tôi là tạo và sử dụng gương Mercurial của WordPress, nhưng vẫn quan tâm nếu công cụ tách rời này có thể được thực hiện dưới dạng subrepo mà không nhân bản và phân nhánh mọi thứ xung quanh ... – Rarst

+0

@Rarst: miễn là GitHub subrepos khác trỏ tới 'tip ', nó sẽ ổn thôi. Nhưng ngay sau khi bạn tạo chi nhánh git địa phương để sử dụng bản sửa đổi trước đó (ví dụ: sử dụng thẻ cũ hơn, không có HEAD tách rời), bạn sẽ gặp lỗi tương tự. –

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