2013-06-07 30 views
6

Gần đây tôi đã di chuyển một kho lưu trữ sang git từ svn. Khi tôi nhìn vào nhật ký, tất cả các cam kết từ SVN không được định dạng đúng theo định dạng 50/72. Có cách nào tôi có thể đi qua tất cả các thông điệp cam kết và chỉnh sửa nó để nó phù hợp với định dạng git?Định dạng tin nhắn cam kết

+8

Đừng lo lắng về điều đó. Chỉ cần di chuyển và làm điều đó đúng cho các thư cam kết mới. Kiểm soát nguồn được cho là hỗ trợ luồng công việc của bạn, không làm cho việc này khó hơn. Có, thư cam kết không được định dạng chính xác. Nhưng đó thực sự là một vấn đề lớn? – Abizern

+4

Chỉ bằng cách _having_ cam kết thư bạn đang đi trước đường cong. Nó là khá phổ biến để xem chỉ là một cam kết khổng lồ với thông điệp "di cư từ svn" – gcbenison

+2

[Đối với những người không biết những gì "định dạng 50/72" là] (http://stackoverflow.com/q/2290016/1324345) – alroc

Trả lời

8

Bạn nói trong một chú thích:

Các kho đã được chuyển qua một tuần trước đây và đã có cam kết trên đó thực hiện trong Git.

Như vậy, tùy chọn tốt nhất là chỉ cần sống với nó và tiếp tục thực hiện các thông báo cam kết chính xác từ bây giờ.

Tất cả các phương pháp sẽ thay đổi thông báo cam kết trong các cam kết cũ sẽ thay đổi các cam kết và tạo đối tượng hoàn toàn mới với các ID khác nhau. Như vậy các kho lưu trữ của tất cả những người đã làm việc với nó sẽ phá vỡ, yêu cầu họ phải tự thiết lập lại trạng thái mới, viết lại của kho lưu trữ.

Điều đó kết thúc chỉ trong rất nhiều công việc (và nhầm lẫn!) Hơn cần thiết cho vấn đề tầm thường của cam kết với một thông điệp cam kết không hoàn hảo đã được di chuyển từ một hệ thống cũ. Tôi nghĩ rằng nó hoàn toàn tốt đẹp để có một số lịch sử cũ, từ những ngày trước, mà không phù hợp hoàn toàn với các tiêu chuẩn hiện hành. Bạn sẽ không viết lại tất cả các cam kết nếu sau này bạn quyết định thay đổi các quy tắc định dạng mã của mình.

+0

Bạn có một điểm. Tôi sẽ để lại lịch sử một mình rồi. – EnactSchmenact

1

Một tùy chọn là chỉnh sửa các cam kết của bạn trong svn trước khi nhập vào git. Sử dụng svnadmin dump để tạo phiên bản có thể chỉnh sửa của kho lưu trữ, chỉnh sửa thông báo cam kết ở đó (nếu là tôi, tôi sẽ viết kịch bản Python để thực hiện việc này) và sau đó xây dựng lại kho lưu trữ với svnadmin load

+0

Kho lưu trữ đã được di chuyển hơn một tuần trước và đã có cam kết về nó được thực hiện trong Git. Tôi có phải tái di chuyển repo và sau đó hợp nhất chúng bằng cách nào đó? – EnactSchmenact

+0

Các tệp bãi rác Subversion không phải là "có thể chỉnh sửa con người". Mỗi sửa đổi có một IIRC checksum và nếu bạn cố gắng chỉnh sửa các tập tin thô, bạn sẽ kết thúc phá vỡ các tập tin. 'svnadmin setlog' là công cụ thích hợp để sử dụng cho việc thay đổi các thông điệp tường trình trong một kho lưu trữ (không cần dumpfile). – alroc

+0

Điểm tốt về setlog. Nó vẫn còn tranh luận. –

2

Bạn sẽ cần git filter-branch. Đó là man page khá rõ ràng.

Sử dụng tùy chọn --msg-filter dự kiến ​​lệnh vỏ sẽ nhận được thư gốc trên stdin và sẽ xuất thông báo đã sửa đổi thành stdout. Tạo tập lệnh sẽ sửa định dạng tin nhắn của bạn là một câu hỏi riêng biệt =).

Nếu bạn định sửa chúng bằng tay, thì chỉ cần thực hiện git rebase -i --root, đặt hành động thành reword. Điều này sẽ đi qua toàn bộ lịch sử cam kết mở trình soạn thảo văn bản của bạn cho mọi cam kết và cho phép bạn thay đổi thông điệp cam kết.

+0

Aye; nên nghĩ về điều này. Đây là cách để làm điều đó. –

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