2013-06-05 28 views
6

Bối cảnh:Phá vỡ kết nối tập tin trong Mercurial sau khi tập tin xấu chia

Lúc đầu có một tập tin base.c, và tập tin đó là trong kho mà chỉ có một chi nhánh Base.

Base được phân nhánh để tạo Extended -branch. Sau đó, chi nhánh mới này có một số thay đổi được thực hiện cho base.c.

Nếu lỗi được sửa trong tệp base.c trong Base, chúng sẽ được hợp nhất thành Extended.

Nó chỉ ra rằng việc thêm quá nhiều thứ vào base.c trong chi nhánh Extended không phải là một ý tưởng hay, vì vậy tệp được sao chép thành ext.c. Sau đó, hầu hết các phần bổ sung Extended đều bị xóa khỏi các chức năng base.cBase từ ext.c. Vì vậy, tại thời điểm này, base.c trong Extended rất giống với ở Base.

Vấn đề:

Khi tập tin được chia, Mercurial đã được thông báo rằng ext.c là một bản sao của base.c, bởi vì họ chia sẻ một lịch sử chung. Thật không may đây không phải là một ý tưởng tốt.

Bây giờ nếu lỗi được cố định trên Base chi nhánh và sáp nhập để Extended, Mercurial cho rằng những thay đổi này sẽ được áp dụng cho cả hai base.cext.c, mặc dù sau này không còn có bất kỳ điểm tương đồng với cựu. Điều này làm cho việc sáp nhập rất khó chịu.

Có cách nào để nói với Mercurial rằng ext.c không còn được coi là giống như base.c? Một giải pháp sẽ thay thế ext.c bằng tệp mới, nhưng sau đó lịch sử sẽ không theo.

+0

Sự cố thú vị. Tôi cho rằng bạn đã tạo bản sao với 'hg copy'? – icabod

+0

Có 'hg copy' đã được sử dụng. – user694733

+4

Bạn có thể ngắt kết nối nếu bạn 'hg quên ext.c' và sau đó' hg thêm' nó như một tệp mới ... nhưng sau đó bạn sẽ mất tất cả lịch sử đến thời điểm này. Tuy nhiên, bạn có thể thêm một phiên bản _earlier_ của 'ext.c' (thậm chí có thể trước khi đổi tên), và phát lại (ghép) nó là lịch sử kể từ đó. – alexis

Trả lời

2

Bạn có thể ngắt kết nối với hg forget ext.c và sau đó hg add ext.c làm tệp mới. Nhưng nếu bạn làm điều này với sửa đổi tip của ext.c, bạn sẽ mất tất cả lịch sử đến thời điểm này.

Điều bạn có thể làm thay vào đó là thêm phiên bản trước của ext.c, thậm chí từ trước khi đổi tên và phát lại (ghép) lịch sử của nó kể từ đó. Bạn có thể thêm lịch sử của ext.c như một cành cây này sang một phiên bản quá khứ, và hợp nhất nó vào mũi:

---o---o---o---(tip)--(merge) 
    \    /
    e---e---e ... e 

Hoặc có lẽ nó không quan trọng, và bạn chỉ có thể thêm lịch sử của ext.c với dòng tip:

---o---o---o---(tip)--e--e--e--e 

không phải của các phương pháp tiếp cận liên quan đến bất kỳ lịch sử viết lại (phiên bản "lãng quên" của ext.c chỉ là trái như một ngõ cụt), vì vậy không nên có vấn đề với những thay đổi tuyên truyền.

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