2011-10-15 27 views
7

Khi làm việc, chúng tôi hiện đang sử dụng Subversion cho SCM. Tôi đã thiết lập một máy nhân bản git-svn và sử dụng nó làm không gian làm việc phát triển chính của tôi. Tôi cảm thấy thoải mái với chức năng cơ bản hiện nay. Một nhà phát triển khác trong nhóm cũng muốn chuyển sang Git, vì vậy chúng tôi đang xem xét sử dụng một git mirror của kho svn. Tôi cũng muốn thử Gerrit bên cạnh bài tập này.Thiết lập Gerrit bằng gương Git của kho lưu trữ Subversion

Quá trình cài đặt tôi tưởng tượng là một cái gì đó dọc theo những dòng:

  1. Một gương git cho kho svn. Các chi nhánh chính về điều này là đồng bộ với thân cây trên svn.

  2. Đối với mỗi đối tượng, chi nhánh chủ đề được tạo. Điều này gắn liền với Gerrit, trong đó việc xem xét lại xảy ra. Sau khi changeset được phê duyệt, Gerrit hợp nhất nhánh chủ đề trở lại master.

  3. Ứng dụng web gitweb hoặc tương tự để xem kho lưu trữ trên trình duyệt.

  4. Quy trình tương tự cho các nhánh khác trên lật đổ bên cạnh thân cây.

Về cơ bản, điều tôi muốn là tôi chỉ tương tác với bản sao git cục bộ và ứng dụng web Gerrit; đẩy các thay đổi được xem xét trở lại svn sẽ xảy ra tự động. Làm thế nào để tôi thiết lập một cái gì đó như thế này?

+0

Ai sẽ đối phó với các xung đột xảy ra khi đẩy thay đổi ngược trở lại Subversion? –

+0

@Greg Hewgill Ahem, tôi giả sử rằng khi Gerrit cố gắng hợp nhất thay đổi với nhánh chính, nó sẽ thất bại. :-) –

+0

Heh, tôi đang cố gắng làm một cái gì đó tương tự, mặc dù tôi chỉ cần sao lưu các chi nhánh git của tôi mà không cần phải chuyển đổi chúng thành các chi nhánh SVN. Rất bối rối khi liên tục hỏi mật khẩu của tôi cho 'git push' cho đến khi tôi nhận thấy tôi đã quên đặt ssh: // vào lúc bắt đầu tham chiếu máy chủ! –

Trả lời

2

Có thể thiết lập một tấm gương Git mà được đồng bộ với kho SVN

Install SubGit vào kho SVN của bạn:

$ subgit install path/to/svn/repository 

Sau đó chỉ cần thiết lập quyền truy cập vào kho Git liên kết tạo ra (path/tới/svn/repository/.git) bằng cách sử dụng Apache hoặc bất kỳ thứ gì. Mỗi lần đẩy vào kho Git đó sẽ được dịch sang bản sửa đổi SVN và ngược lại.

Vì vậy, bạn có thể sử dụng kho lưu trữ Git được liên kết trong Gerrit và cho nhóm của bạn (như thể SVN chưa từng tồn tại). Sau đó bạn có thể tắt kho SVN (hoặc tiếp tục sử dụng).Để ngừng đồng bộ hóa trước khi tắt chạy:

$ subgit uninstall path/to/svn/repository 
6

Rất tiếc, không thể thực hiện điều này một cách tự động (ít nhất, không phải không có nhiều công việc). Dưới đây là một số bước mà có thể giúp bạn có được gần:

  1. Thiết lập clone git của bạn trên máy chủ Gerrit
  2. Tạo một móc svn hoặc một công việc định kỳ mà sẽ lấy từ svn và push to clone git của bạn
  3. Gerrit đã tích hợp sẵn trong phiên bản của gitweb, vì vậy bạn được bảo hiểm có
  4. trên máy chủ Gerrit, tạo một change merged hook mà sẽ đẩy lùi để svn

Giống như Greg đã nói ở trên, khi bước 4 thất bại thứ wil l là khôn lanh. Bạn sẽ phải thiết lập lại kho git trong Gerrit để phù hợp với svn và gửi lại thay đổi của bạn. Điều này sẽ dễ dàng hơn nhiều nếu/khi bạn thuyết phục phần còn lại của nhóm của bạn thả svn và sử dụng git/Gerrit :-)

Chúc may mắn!

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