2009-10-25 12 views
39

Tôi có một số 20-year-old project mà tôi muốn di chuyển từ RCS sang git, mà không làm mất lịch sử. Tất cả các trang web đều gợi ý rằng One Path thật thông qua CVS. Nhưng sau một giờ của Googling và cố gắng các kịch bản khác nhau, tôi vẫn chưa tìm thấy bất cứ điều gì mà thành công chuyển đổi cây dự án RCS của tôi thành CVS. Tôi hy vọng những người tốt ở Stackoverflow sẽ biết những gì thực sự hoạt động, trái với những gì được yêu cầu làm việc và không.Di chuyển dự án từ RCS sang git?

(Tôi đã tìm kiếm Stackoverflow sử dụng cả nguồn gốc SO tìm kiếm và tìm kiếm trên Google, nhưng nếu có một câu trả lời hữu ích trong cơ sở dữ liệu, tôi đã bỏ lỡ nó.)

CẬP NHẬT: Các công cụ rcs-fast-export tại http://git.oblomov.eu/rcs-fast-export đã được sửa chữa trên 14 tháng 4 năm 2009, và phiên bản này dường như làm việc cho tôi. Công cụ này chuyển đổi thẳng thành git mà không có CVS trung gian. Cảm ơn Giuseppe và Jakub !!!


Những điều đó đã không làm việc mà tôi vẫn còn nhớ:

  • Các rcs-to-cvs kịch bản mà tàu trong contrib thư mục trong những nguồn CVS

  • Các rcs-fast-export công cụ tại http://git.oblomov.eu/rcs-fast-export trong các phiên bản trước 13 tháng 4 năm 2010

  • rcs2cvs kịch bản tìm thấy trong một tài liệu gọi là "CVS-RCS- HƯỚNG DẪN Tài liệu dành cho Linux"

+5

Nếu bạn đã tìm thấy nhiều cách * không * hoạt động, và bạn đang yêu cầu các cách thực hiện, tôi nghĩ sẽ rất thông minh khi liệt kê các cách không hoạt động để không bị lãng phí thêm thời gian :) –

+0

Như một lưu ý phụ, một số người nghĩ cách tốt nhất từ ​​CVS (một khi bạn đến đó) để git là thông qua lật đổ. http://stackoverflow.com/questions/881158/is-there-a-migration-tool-from-cvs-to-git/881185#881185 –

+0

Tại sao chính xác bạn phải giữ lịch sử? – hasen

Trả lời

21

Xem InterfacesFrontendsAndTools trang trên Git Wiki, trong "Công cụ", "Tương tác với hệ thống kiểm soát sửa đổi khác", "Khác" . Ở đó bạn sẽ tìm thấy một mô tả và một liên kết đến rcs-fast-export (gitweb) Kịch bản Ruby của Giuseppe "Oblomov" Bilotta.

(Tìm kiếm trên web cũng sẽ tìm thấy trang Ohloh và thông báo cho dự án đã đề cập).

+3

để làm rõ cho Norman, một công cụ "xuất khẩu nhanh" là một tiêu chuẩn thực tế hiện đại để giao tiếp trên các hệ thống VCS, công cụ của git để đọc dữ liệu này được gọi là 'git fast-import' – u0b34a0f6ae

+0

với một lỗi ở dòng 420. Đây là một điển hình cho những trải nghiệm buồn của tôi. Tôi có đề cập đến lịch sử RCS bao gồm 20 năm không? –

+0

Bạn có cố liên hệ với tác giả của rcs-fast-export không? Tuy nhiên, có thể là công cụ chuyển đổi một lần cho tác giả và tập lệnh không được duy trì. –

0

Tôi cũng gặp sự cố này và vật lộn với cvs2svn, parsecvs và whatnot. parsecvs có được gần nhất nhưng Keith dường như đã để lại nó phía sau và bây giờ dĩa ngẫu nhiên đang bật lên. Các vấn đề tôi đánh với nó là nó sẽ phân tích các tập tin RCS tốt nhưng điều cuối cùng nó đã làm là git rm các tập tin, vì vậy tôi đã có thể phải muck xung quanh với git reset để hoàn tác xóa.

Sau đó, tôi đã phát hiện ra số điện thoại convert: https://www.mercurial-scm.org/wiki/ConvertExtension Sự cố đã được giải quyết!

Tôi đã cố gắng thêm dần một số nội dung từ cây RCS riêng biệt, có vẻ như nó đã hoạt động.

1

Như một quy tắc chung, bạn nên cẩn thận với những tập lệnh bạn chạy. Đối với RCS -> GIT, bạn có thể quan tâm theo phương pháp RCS-> CVS-> GIT nhất.

Xem nhanh rcs-fast-export.rb kể từ 2011-01-12 và chạy qua phần này của mã. Đây là điều đáng sợ nhất.

# steal username/email data from other init files that may contain the 
# information 
def steal_username 
    [ 
      # the user's .hgrc file for a username field 
      ['~/.hgrc', /^\s*username\s*=\s*(["'])?(.*)\1$/,  2], 
      # the user's .(g)vimrc for a changelog_username setting 
      ['~/.vimrc', /changelog_username\s*=\s*(["'])?(.*)\1$/, 2], 
      ['~/.gvimrc', /changelog_username\s*=\s*(["'])?(.*)\1$/, 2], 
      [] 
    ].each do |fn, rx, idx| 
... 
+0

Thuật ngữ có thể đáng sợ, nhưng không có gì xảy ra ở đây. RCS sử dụng tên người dùng unix và git muốn tên kiểu "First Last <[email protected]>". –

1

OK, sau một chút tinkering, tôi thấy nó không quan trọng để chuyển đổi RCS thành CVS. Các tệp có cùng định dạng, do đó, đơn giản chỉ là di chuyển các tệp vào gốc CVS ​​hiện có. Điều này giả định bạn có quyền truy cập vào các tập tin RCS.

# Create CVS root dir. You only need to do this once. 
mkdir $HOME/cvs/ 
cd $HOME/cvs/ 
cvs init 

# Import a repository from RCS to CVS 
cp -a _projectname_/RCS $HOME/cvs/_projectname_