2009-11-05 26 views
11

Có một dự án mã nguồn mở mà tôi muốn kiểm tra và đóng góp. Kho lưu trữ chính là SVN nhưng tôi muốn làm việc trong Git. Điều này có thể không?Làm việc cục bộ với Git khi kho lưu trữ chính là SVN

Hầu hết các tìm kiếm của tôi đều hướng dẫn bạn chuyển từ SVN sang Git (hoặc ngược lại) và không nhìn lại.

  • Nếu tôi thanh toán dự án, thực hiện thay đổi và đẩy nó vào chi nhánh tôi đã tạo trên Github, tôi nên thông báo cho tác giả gốc như thế nào?
  • Mức độ bao gồm đóng góp được thực hiện trên repo Git vào repo SVN?
  • Chỉ cần so sánh hai bản sửa đổi (lần thanh toán/kéo/cập nhật mới nhất của tôi và cam kết mới nhất của riêng tôi), tạo bản vá từ nó và gửi cho họ; điều này có nên được coi là một quy trình dự phòng hay là phương pháp tiếp cận tiêu chuẩn?

Giả sử các tác giả gốc không quan tâm đến bất kỳ điều gì khác ngoài SVN.

[Cập nhật] Tôi không có, cũng không muốn có, truy cập vào kho lưu trữ SVN. Im tìm cách giải quyết cho điều đó.

[Update2] Nếu các bản vá thực sự là lựa chọn duy nhất của tôi, tôi có biết thêm bất kỳ cảnh báo nào khác không?

Trả lời

7

May mắn thay, có git-svn cho mục đích chính xác này. Nó cho phép bạn sử dụng git cục bộ trong khi cũng có thể kiểm tra SVN khi bạn muốn làm như vậy. Nó khá đơn giản và có rất nhiều thông tin nếu bạn tìm kiếm git-svn tại đây hoặc thông qua Google.

Có hướng dẫn tại http://flavio.castelli.name/howto_use_git_with_svn mà bạn có thể muốn xem xét trước tiên.

Chỉnh sửa: Để tạo các tương thích SVN tương thích, bạn có thể sử dụng git diff --no-prefix. Tuy nhiên, lưu ý rằng định dạng này không tương thích với TortoiseSVN. Nếu khả năng tương thích là cần thiết, bạn sẽ phải sử dụng một số loại kịch bản shell; xem ví dụ tại đây: http://mojodna.net/2009/02/24/my-work-git-workflow.html

Chỉnh sửa: Một nhược điểm tiềm năng của git-svn là nó không xử lý svn externals. Bạn sẽ phải tự mình xử lý.

Chúc may mắn!

+0

Có, Ive đã xem xét một số tại git-svn. Có vẻ tuyệt vời khi tìm nạp các bản cập nhật từ bản repo gốc (SVN). Nhưng Im chủ yếu quan tâm đến luồng công việc ngược dòng. Làm thế nào để xử lý đúng và tạo ra các bản vá lỗi (nếu đó là lựa chọn duy nhất của tôi)? – Mizipzor

+0

Tôi hiện đã bao gồm thông tin về việc tạo các bản vá lỗi SVN trong câu trả lời của tôi. – lemonad

3

Có! Điều này là khả thi!

Kiểm tra bài này cho các chi tiết: http://www.romanenco.com/gitsvn

Có ba hay bốn bước đơn giản để làm cho cộng sinh của SVN và Git SCM.

Tôi đã làm việc với công nghệ này khoảng ba tháng và không gặp bất kỳ sự cố nào. Nó rất tuyệt! Khi repo chính của bạn trong SVN và bạn có thể thực hiện cam kết ngoại tuyến và nhận được mạnh mẽ của Git sáp nhập.

6

Giữ một kho Git đồng bộ với một kho lưu trữ Subversion là thực sự dễ dàng:

Clone các kho lưu trữ Subversion (trong ví dụ đơn giản này tôi bỏ qua các chi nhánh/thẻ)

$ git svn clone https://url/to/repo/trunk 

Giữ up-to- cập nhật với các thân cây Subversion:

$ git svn rebase 

Bây giờ, nếu bạn đã có cam kết truy cập vào các repo Subversion, bạn có thể đẩy những thay đổi của bạn:

$ git commit 
$ git svn dcommit 

Nếu không, gửi một bản vá là lựa chọn duy nhất của bạn, nếu committers đến kho lưu trữ Subversion không có hứng thú trong việc sử dụng Git:

$ git diff 1cc92b96 > my_patch.patch 

Trong trường hợp này rõ ràng là tốt nhất không nên làm cam kết để các chi nhánh bạn đang đồng bộ hóa với repo Subversion.

+0

Tại sao tôi không nên cam kết với nhánh Im đồng bộ hóa? Chỉ vì nó dễ dàng hơn để tạo ra các diff (kể từ khi tôi chỉ, sau đó, cần một cam kết id)? – Mizipzor

1

Nếu không có, bạn cũng không muốn có, hãy truy cập vào kho SVN sau đó kết hợp git-svnStGit có thể hữu ích. git-svn tạo/cập nhật một bản sao và stg duy trì một loạt các bản vá lỗi trên đầu trang của nó (stg lệnh là từ StGit Crash Course):

git svn clone .. 

stg new invent-some-patch-id 
...edit patch description... 
...hack hack hack in the tree... 
stg refresh 
...possibly hack some more... 
stg refresh  
.. 
stg mail 

Xem StGIT Tutorial để bắt đầu.

LƯU Ý: Tôi chưa thực sự cố gắng quy trình làm việc này.

+0

Thú vị, cảm ơn, Ill kiểm tra StGit khi tôi về nhà. Tôi thực sự nghĩ rằng vấn đề lớn nhất ở đây là cố gắng làm việc với những người không tin vào các hệ thống điều khiển phiên bản phân tán. Nhưng họ chỉ là để xử lý các bản vá lỗi bằng tay anyway vì vậy tôi càng nhận ra rằng nó có lẽ là con đường để đi. – Mizipzor

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