2010-10-30 30 views
16

Tôi đã cố gắng thiết lập một dự án bằng bitbucket có phụ thuộc dự án được lưu trữ trên github. Sử dụng plugin Hg-Git Mercurial tôi có thể đạt được điều đó.Thêm phụ đề Git vào Mercurial

Nhưng khi đến lúc cần đẩy, mọi thứ trở nên rắc rối.

Các tài liệu cho Mercurial subrepositories trạng thái:

2,4 Đẩy

Mercurial sẽ tự động cố gắng đầu tiên đẩy tất cả subrepos của kho hiện tại khi bạn đẩy. Điều này sẽ đảm bảo các thay đổi mới trong subrepos có sẵn khi được tham chiếu bởi các kho lưu trữ cấp cao nhất.

Nhưng điều này gây ra một vấn đề lớn vì tôi không muốn đẩy tất cả các subrepositories (tại sao tôi?) - Tôi chỉ có quyền truy cập đọc cho họ, vì vậy github sẽ không cho phép nó. Chỉ kho lưu trữ chính cần được đẩy đến máy chủ từ xa, nhưng tôi không thể tìm ra cách thực hiện. hg muốn kiểm soát và đẩy tất cả các phân mục phụ, bất kể có thay đổi hay không. Có cách nào để bỏ qua tính năng này không?

Chỉ những thứ cần được đẩy là .hgsub.hgsubstate. Một khi chúng đã được đẩy qua các tuyến thay thế (cập nhật cho một changeset nơi các subrepositories không tồn tại), có thể sau đó cập nhật và kéo các thay đổi từ kho từ xa, nhưng nếu tôi đã đẩy một lần nữa trong khi trên một changeset với subrepositories, toàn bộ thử thách lặp lại chính nó.

Trả lời

4

Điều này là không thể do phương pháp đẩy của Mercurial. Đây là lỗi theo thiết kế.

Giải pháp tốt nhất là cập nhật lên bản sửa đổi trước đó, nơi các phân đoạn con không tồn tại và sau đó nhấn. Điều này sẽ vượt qua hạn chế của Mercurial và tải lên các tệp .hgsub.hgsubstate cần thiết. Đây là một chút bất tiện, nhưng là cách tốt nhất tôi đã tìm thấy cho đến nay để có được Mercurial và Git để làm việc với nhau.

Có lẽ trong tương lai, Hg-Git sẽ được cập nhật để xử lý trường hợp sử dụng này tự động.

+0

nó là một lỗi mà biểu hiện khi sử dụng github, hg-git và một tính năng subrepository, cố gắng sử dụng bản địa git subrepository –

0

Nếu bạn không có thay đổi gửi đi trong subrepository, 'đẩy' thực sự sẽ không làm gì khác hơn là lấy danh sách changeset mới nhất từ ​​kho lưu trữ từ xa. Do đó, phần 'đẩy' thực sự của sự thúc đẩy sẽ không xảy ra. Tôi đã sử dụng thành công các kho lưu trữ BitBucket chỉ đọc dưới dạng các mô-đun con.

+0

Có, nên chính xác là những gì nó làm - tuy nhiên việc đẩy thực sự xảy ra, nó chỉ là nếu không có thay đổi thì không có gì sẽ được tải lên. Github buộc bạn phải tự xác thực trước khi kiểm tra xem có bất kỳ thay đổi nào không. Vì vậy, để làm việc này, việc đẩy cần được bỏ qua hoàn toàn. – summatix

1

Tôi nghĩ bạn nên sử dụng nhiều vị trí lưu trữ; DVCS hoạt động tốt hơn như thế.

Ví dụ: tạo một kho chứa chứa các phụ thuộc từ github. Bạn chỉ kéo trong repo đó để có được những thay đổi, bạn không bao giờ đẩy. Sau đó, bạn có một kho lưu trữ khác cho dự án của bạn, để phát triển. Ở đây bạn được tự do làm bất cứ điều gì bạn muốn. Và sau đó bạn liên kết đến repo hg của riêng bạn cho các phụ thuộc.

Đó là nếu tôi hiểu chính xác vấn đề của bạn và những gì bạn đang cố gắng làm :)

+1

Xin lỗi, tôi không hiểu. Vấn đề của tôi là tôi cần Mercurial và Git để chơi độc đáo với nhau - mà họ làm. Nhưng tính năng được gọi là hg chỉ làm cho mọi thứ trở nên rắc rối một chút. – summatix

+0

Nó không phải là một "tính năng được gọi là", đó là một bước quan trọng trong làm việc với hg. Đẩy/kéo đồng bộ hóa kho lưu trữ cục bộ của bạn với kho lưu trữ từ xa. Những gì tôi gợi ý là bạn có thể cần một cấu hình kho lưu trữ khác cho những gì bạn đang cố gắng làm; nó phổ biến khi sử dụng git/mercurial để có nhiều kho lưu trữ cho dự án của bạn. Đẩy trong repo mercurial của bạn không nên ảnh hưởng đến những thứ bạn đang cố gắng để có được từ github và tất nhiên bạn không nên được đẩy vào repo github. –

+1

Chúng tôi rõ ràng ở các sân chơi khác nhau ở đây – summatix

11

Để tham khảo trong tương lai, nhánh phát triển của mercurial (và vì thế bản phát hành 1.8 sắp tới) hiện hỗ trợ bản con git bản địa.Trường hợp cụ thể này được thực hiện rất độc đáo và một sự thúc đẩy từ kho gốc sẽ chỉ báo cho git subrepo đẩy nếu kho lưu trữ từ xa của nó không được biết là có cam kết hiện tại.

+0

Dưới đây là một số chi tiết cho hỗ trợ gốc của git subrepo bên trong mecurial http://mercurial.selenic.com/wiki/Subrepository#Git_subrepositories –

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