2009-08-12 47 views
12

Tôi đã nghe nói rằng có thể có kho lưu trữ Git cục bộ trên máy phát triển, trong khi vẫn giữ bản sao chính của mã nguồn được lưu trữ trong kho lưu trữ svn.Sử dụng kho lưu trữ Git cục bộ với kho lưu trữ Subversion chính

Trường hợp sử dụng tốt sẽ là bạn có một kho lưu trữ svn trung tâm mà mỗi nhà phát triển làm việc cùng. Một nhà phát triển thỉnh thoảng ngoại tuyến và muốn theo dõi những thay đổi anh ta/cô ấy thực hiện khi ngoại tuyến. Khi nhà phát triển trực tuyến trở lại và có quyền truy cập vào svn, các sửa đổi bản sao làm việc của họ có thể được kiểm tra vào svn. Tôi tốt với việc mất lịch sử của những thay đổi đã xảy ra tại địa phương với Git, khi các tập tin được kiểm tra vào svn.

Ai đó có thể phác thảo cách tốt nhất để tắt tính năng này không? Có bất kỳ cạm bẫy nào để làm việc như thế này không?

Trả lời

4

Bạn có thể sử dụng một cái gì đó như this tutorial làm điểm bắt đầu. Tôi cũng đọc this tutorial.

Có một số cạm bẫy đối với chế độ làm việc này. Điều quan trọng nhất là bạn không thể sử dụng svn phiên bản 1.5 mergeinfo và mong đợi điều này để tồn tại thông qua git. Đây là một nhược điểm lớn nếu bạn đang sử dụng chức năng hợp nhất svn 1.5 (được cho là khá phong nha).

Trang hướng dẫn cho git-svn cũng chứa một số ghi chú trong phần "báo trước" mà bạn nên hiểu. Một khi tôi hiểu tất cả các thông báo, tôi hiểu lợi ích của việc sử dụng thiết lập này ít hơn chi phí thực tế cho trường hợp cụ thể của tôi. Vì vậy, tôi đã sử dụng năng lượng của mình để thuyết phục dự án để chuyển sang git thay vào đó, một cái gì đó tôi chỉ succeded trong

1

Tôi nghĩ trường hợp sử dụng tốt hơn cho git-svn là nếu bạn buộc phải làm việc với kho lưu trữ svn trung tâm, nhưng bạn muốn cá nhân làm việc với git. Hoặc có lẽ hầu hết mọi người trong nhóm cảm thấy thoải mái hơn khi làm việc với svn tại thời điểm này. Sử dụng git-svn, bạn sẽ không mất lịch sử các cam kết được thực hiện trong kho lưu trữ git cục bộ.

Nếu bạn đang thiết lập một kho lưu trữ mới từ đầu và/hoặc có quyền tự do lựa chọn, tôi sẽ chọn một hoặc khác. git-svn hoạt động tốt nhưng bạn sẽ luôn chiến đấu với 'kết hợp sai lầm trở kháng' giữa hai hệ thống.

Nếu nó chỉ đơn giản là một mô hình tập trung mà bạn đang muốn thực hiện thì kho git công cộng có thể được sử dụng như một kho lưu trữ trung tâm. Xem phần Hướng dẫn sử dụng Git trên setting up a shared repository.

2

Một giải pháp tôi sẽ cố gắng là:.

  1. Thanh toán từ repo trung ương sử dụng SVN
  2. git init tạo repo địa phương
  3. thêm svn để .gitignore
  4. git add * để thêm tất cả các file để repo địa phương
  5. Có phải tất cả các chi nhánh trung gian của bạn/cam/trở lại trạng trong git.
  6. Khi bạn hoàn tất, hãy quay lại repo trung tâm bằng SVN.
4

Say repo SVN của bạn đang ở svn + ssh: // username @ svn_server/svn/your_repo
và kho SVN của bạn có một "hợp lý" bố trí (thân, cành, thẻ) Dưới đây là quy trình làm việc tôi đã được sử dụng trong vài tháng nay:
1.'mkdir your_repo'
2. 'cd your_repo'
3. 'git svn bản sao -s svn + ssh: // username @ svn_server/svn/your_repo. '(tâm dot)
4. [chờ một thời gian tùy thuộc vào kích thước của kho lưu trữ của bạn :)]
tại GIT của bạn 'thầy' theo dõi thân cây SVN
bạn cũng có thể tạo ra một ngành theo dõi như bạn muốn thường làm với git nếu bạn đang làm việc trên một số chi nhánh
5. truyền thống Hack hack Hack
6. cập nhật clone của bạn với 'git svn lấy & & git svn rebase'
7. "đẩy" các thay đổi của bạn đối với svn với 'git svn dcommit '

Nhiều thứ tốt
Xác định sau bí danh tiện dụng trong .gitconfig của bạn:
1. Bí danh' spull 'viết tắt của svn-kéo như thế này:'! spull = git svn lấy & & git svn rebase '
2. Bí danh' spush 'viết tắt của svn đẩy như thế này:'! spush = git svn dcommit '
Những bí danh xoay workflow để hiệu quả tinh khiết: bản sao/Hack hack/spull/spush ->lợi nhuận

svn: externals
tôi không thể tìm thấy một giải pháp tốt cho việc này trên internet, vì vậy hãy tự mình làm một mình :)
http://github.com/sushdm/git_svn_externals nó chưa hoàn hảo, nhưng chắc chắn sẽ làm cho cuộc sống dễ dàng hơn nhiều.

Làm việc tốt với tôi, hy vọng nó sẽ giúp bạn.

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