2009-05-05 25 views
30

Tôi làm việc với phần mềm được giữ trong svn để kiểm soát phiên bản. Tôi muốn sử dụng git (git-svn) tuy nhiên phần mềm đòi hỏi rất nhiều thiết lập và cấu hình trước khi nó có thể được sử dụng. Có những công cụ chăm sóc tất cả các thiết lập, bao gồm kiểm tra tất cả các mã thông qua svn.Chuyển đổi thanh toán SVN để sử dụng git (git-svn)

Tất cả tài liệu cho git-svn (tôi có thể tìm thấy) yêu cầu thanh toán mới, sử dụng git-svn.

Có cách nào để chuyển đổi thanh toán svn hiện tại để có thể sử dụng git-svn không?

Trả lời

11

Bạn có thể làm một cái gì đó như thế này:

  1. Làm một bản sao đầy đủ của cây SVN của bạn sử dụng git-svn, vào một thư mục tạm thời. Hãy chắc chắn rằng bạn sử dụng chính xác bản sửa đổi như thanh toán hiện tại của bạn.
  2. Di chuyển thư mục ".git" từ cấp cao nhất của thanh toán git-svn vào cấp cao nhất của thanh toán SVN.
  3. Sau đó, bạn sẽ cần phải yêu cầu Git bỏ qua thư mục ".svn" hoặc bạn có thể xóa tất cả.
  4. Xóa thanh toán git-svn.
  5. Hiện tại, bạn có thể thao tác các tệp hiện có của mình bằng Git và git-svn.
  6. Thực hiện "trạng thái git" và hy vọng nó cho biết không có thay đổi.
+0

Tôi đã không hoàn toàn làm việc như thế nào tôi muốn nó, nhưng loại chiến lược này có vẻ như nó sẽ làm việc. – Jachin

+3

Có cách nào để thực hiện điều đó mà không có quyền truy cập vào repo svn? Tôi hiện không có cách nào để truy cập vào repo, tất cả những gì tôi có là một bản sao làm việc không bị ảnh hưởng ở bản sửa đổi cuối cùng. Tôi hy vọng rằng có thể git svn fetch -r N, với N là bản sửa đổi bản sao làm việc của tôi, bằng cách nào đó có thể được thuyết phục để sử dụng nội dung của bản sao làm việc để tìm nạp thông tin cần thiết ... – Ole

13

No. Một bản sao git-svn chuyển toàn bộ kho lưu trữ thành git. SVN checkouts không có toàn bộ kho lưu trữ và do đó không thể được nhân bản từ. Đây là lợi thế chính của việc chuyển từ SVN hoặc CVS ​​sang hệ thống phân tán (như git).

+0

Tôi không quan tâm đến tất cả lịch sử, chỉ là trạng thái khi nó được kiểm tra khỏi svn, và các thay đổi trong tương lai trên nhánh svn (vì vậy tôi muốn gọi git-svn rebase) – Jachin

+3

Đó không phải là cách git hoạt động. DVCS được "phân phối" bởi vì mọi bản sao là một bản sao đầy đủ của kho lưu trữ. Đó là toàn bộ vấn đề. – singpolyma

+0

Một lần nữa, bạn thấy những người thông minh giải thích, bạn nên quan tâm đến lịch sử ... Tôi quan tâm đến lịch sử, nhưng chỉ TỪ NGAY BÂY GIỜ, giả sử lịch sử bị tấn công với hàng tấn các tệp nhị phân không cần thiết (không có vấn đề trong SVN), và chỉ gần đây cây làm việc là không có gánh nặng như vậy, svn: externals, vv –

1

Một cách khác để làm điều này, mà không sửa đổi các Subversion bản sao làm việc ban đầu và không yêu cầu bạn phải sao chép nó, đang sử dụng một bản vá:

  1. Làm một bản sao đầy đủ của cây Subversion của bạn sử dụng git-svn, đến thư mục mới sẽ là kho lưu trữ Git. Hãy chắc chắn rằng bạn sử dụng chính xác bản sửa đổi như thanh toán hiện tại của bạn. Bạn có thể sử dụng git reset --hard :/r<revision> để buộc nó phải được sửa đổi tương tự sau khi nhân bản, trong đó <revision> là bản sửa đổi bản sao làm việc Subversion được cập nhật (xem điều này bằng cách sử dụng svn info ở đó).
  2. cd vào bản sao làm việc Subversion của bạn.
  3. Sử dụng svn status để đảm bảo tất cả các tệp mới được đánh dấu bằng A (hoặc sử dụng svn add để thêm chúng) và tất cả các tệp đã xóa được đánh dấu bằng D (hoặc sử dụng svn rm để xóa chúng).
  4. Chạy svn diff >patch.diff để tạo tệp vá.
  5. Sao chép patch.diff lên đầu kho chứa Git được tạo trước đó.
  6. cd lên đầu kho chứa Git được tạo trước đó.
  7. Chạy git apply -p0 patch.diff để áp dụng bản vá trên cây đang hoạt động của kho lưu trữ Git.

Bây giờ bạn có thể đi qua những thay đổi sử dụng git status, và git add/git commit họ để cứu họ trong kho lưu trữ tại địa phương.

4

Tôi cho rằng bạn có thể muốn giữ lịch sử. Tuy nhiên, trong trường hợp bạn (hoặc bất kỳ ai khác tình cờ gặp trang này) không cần lịch sử, bạn có thể sử dụng tính năng "xuất" như được giải thích tại đây: https://stackoverflow.com/a/419475/2437521.

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