2009-02-27 23 views
48

Các phương pháp và mẹo tốt nhất để sử dụng git để giao tiếp với kho lưu trữ CVS là gì?Các phương pháp hay nhất để sử dụng git với CVS

+3

Tôi muốn bị cám dỗ khi đặt cùng một câu hỏi cho SourceSafe, nhưng tôi thực sự không muốn xua đuổi sự chối bỏ (hoàn toàn nhắm mục tiêu). –

Trả lời

21

Tôi đã viết câu trả lời cho một câu hỏi tương tự here.

Điều này hoạt động đáng ngạc nhiên khi bạn buộc phải tiếp tục đẩy các thay đổi vào một kho lưu trữ CVS trung tâm.

11

Tôi chỉ làm việc với các tương tác Git-CVS để giới thiệu Git cho một người bạn, nhưng nó rất đơn giản.

  • Bạn cần cài đặt bản sao hiện tại cvsps. Git cvsimport sử dụng quyền này để truy cập lịch sử CVS.
  • Chúng tôi nhận thấy rằng, đối với một dự án lớn, inital thiết lập là nhiều nhanh hơn bằng cách lấy một bản sao đầy đủ của repo CVS vào máy tính của bạn, và làm git cvsimport địa phương:

    $ rsync rsync://yourprojecthost.com/cvsroot/yourproject/* 
    $ mkdir myproject.git 
    $ cd myproject.git 
    $ git cvsimport -p -x -v -d :local:/path/to/cvsroot/yourproject 
    

Lưu ý rằng -x sau -p là rất quan trọng. Điều này vượt qua -x để cvsps. Để biết thêm thông tin, vui lòng xem cvsps man page.

+1

Tôi nghĩ rằng có một sai lầm/trong bước 3. –

+2

@PeterBurns: Đó là ... Nó phải là 'git cvsimport -p -x -v -d: địa phương:/path/to/cvsroot yourproject' – Archenoth

1

Trả lời siêu nhẹ. Nếu bạn buộc phải sử dụng git 'guerilla style', tức là công ty của bạn bị mắc kẹt bằng cách sử dụng cv để kiểm soát phiên bản và bạn sử dụng git trên máy trạm để làm cho cuộc sống dễ dàng hơn, bạn có thể cân nhắc thực hiện một việc như thế này;

CVS=realCvsPath 
# commit to the git first 
if ($ARGV[0] && $ARGV[0] eq "commit") 
{ 
system 'git commit -a'; 
} 

# execute the appropriate cvs program 
# =================================== 
exec "$CVS", @ARGV 

Gọi tệp này là 'cvs' và bao gồm đường dẫn trước lệnh CVS thực. Nếu không, bạn có thể có git cam kết lớn hơn những người cvs, mà không phải là hữu ích ...

8

tôi đã viết lên các chi tiết của tôi riêng workflow for remote CVS, local Git

+1

bạn" don 't tin tưởng' 'cvsimport' vì những lý do không xác định (cũng có các công cụ khác để làm điều này), vì vậy bạn quảng cáo ném ra tất cả thông tin sửa đổi trước đó? Đó là một giải pháp khủng khiếp. –

+0

Điều gì thật khủng khiếp về nó? Nếu tôi đang đẩy các thay đổi của mình trở lại vào CVS, thì không có lịch sử sửa đổi nào bị "loại bỏ". Và nếu tôi muốn xem lịch sử sửa đổi, tôi luôn có thể sử dụng lệnh CVS để thực hiện điều đó. –

+0

Lợi ích nào bạn nhận được bằng cách thêm 'CVS' vào' .gitignore', thay vì cam kết nó thành git? Nó không làm cho kho git của bạn không đầy đủ? Xem http://stackoverflow.com/a/37585092/1122270 và http://stackoverflow.com/q/37585385/1122270 cho những gì tôi muốn nói. – cnst

1

Nếu thượng nguồn là 100% trong CVS (ví dụ, OpenBSD , hoặc nhiều tiểu dự án của nó như mdocml hoặc ports-readmes) và đặc biệt nếu cây đó bị gỉ như cây CVS OpenBSD (ví dụ, đôi khi thậm chí có ghi đè lịch sử), tôi thấy hữu ích khi chỉ cần thực hiện trực tiếp các tệp CVS/{Entries,Repository,Root} bên dưới vào git của mình kho.

Điều này giúp bạn không cần phải có nhiều không gian làm việc độc lập, có thể thanh toán với git trên bất kỳ máy nào và sau đó cvs up tại chỗ hoặc cvs diff để tạo các bản vá CVS chính xác để gửi thư đến người bảo trì git-less Thượng nguồn.

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