2012-04-04 40 views
8

Vâng, tôi biết. Tại sao bạn muốn di chuyển từ Git sang SVN?Di chuyển Git-2-SVN?

Tôi tình cờ gặp phải tình huống mà tôi cần phải di chuyển một kho lưu trữ Git khổng lồ tới Subversion! Dưới đây là một quy trình làm việc tôi đã cố gắng mỗi bình luận Edwin của:

đầu tiên tạo ra một SVN repo địa phương: svnadmin create svn_repo

Tiếp theo tôi kiểm tra repo Git của tôi: git clone git:myNameSpace/myProject

cd vào myProject và chạy:

git svn init -s --prefix=svn/ file:///home/myHome/svn_repo/myProject

git svn fetch

git rev-list --parents master | grep '^.\{40\}$' để tìm kiếm băm của cam kết gốc của bạn và chỉ cung cấp một cam kết như nó cần.

Tiếp theo là để có được các hash của thân cây rỗng cam kết: git rev-parse svn/trunk

Cái này không may không thành công với:

fatal: ambiguous argument 'svn/trunk': unknown revision or path not in the working tree. Use '--' to separate paths from revisions

Vâng, tôi không thể đi nhiều sau này ....

+5

Có rất nhiều tiếp thị (và một vài lý do chính đáng) để ủng hộ Git trên Subversion, nhưng có rất nhiều lý do rất tốt để ủng hộ Subversion trên Git quá. Sane xử lý tập tin lớn đến tâm (vì một lý do). –

+0

Chắc chắn, tôi yêu Git và ủng hộ nó cho Subversion trong một nhịp tim ... nhưng tôi cần phải làm việc di chuyển này ... –

+0

Thực ra, tôi ủng hộ việc lật đổ trên git, nhưng điều đó có liên quan nhiều hơn đến sự quen thuộc và công cụ của tôi tích hợp chuyên môn với subversion. Nó có rất ít để làm với bộ tính năng của git. –

Trả lời

8

Tôi khuyên bạn nên di chuyển bằng SubGit bằng một vài bước dễ dàng.

$ svnadmin create svn.repo 
$ subgit configure svn.repo 
$ nano svn.repo/conf/subgit.conf #edit path to your (bare!) Git repository (you may use "git clone --bare <URL> bare.git.repo" if you don't have it locally) 
$ subgit install 

Đó là tất cả. Trong khi dịch SubGit sẽ cố gắng bảo toàn tất cả các cam kết (thậm chí tạm thời), các nhánh, sáp nhập, bỏ qua, ngày tháng, các thiết lập EOL, các thẻ và vv, vì nó có thể.

Sau khi dịch các kho lưu trữ sẽ được đồng bộ hóa (mỗi lần chuyển sang Git được dịch sang bản sửa đổi SVN và ngược lại). Để ngắt đồng bộ hóa (nếu bạn không cần), hãy chạy

$ subgit uninstall svn.repo 
+1

Lưu ý rằng SubGit yêu cầu cấu hình phía máy chủ (ví dụ: tệp 'svn.repo/conf/subgit.conf'), vì vậy nó không sử dụng nếu bạn không có quyền truy cập vào chính máy chủ. – Siggen

+1

Vì 2.0 có thể thực hiện tương tự với kho lưu trữ từ xa bằng cách sử dụng 'subgit configure --svn-url

'. Hoặc cách khác (một cách tốt hơn, nếu hook trước revprop-change cho phép) người ta có thể chuyển đổi kho lưu trữ cục bộ và tải nó lên bằng 'svnsync' hoặc' svndump + svnrdump'. –

+0

SubGit sẽ xóa tất cả lịch sử SVN hay nó sẽ chỉ tạo các sửa đổi bổ sung dựa trên các cam kết git? – igorsantos07

3

--- Đã chỉnh sửa sau khi các chi tiết được thêm vào ---

Bạn đã thực hiện một công việc ban đầu trống chưa mit đến svn/trunk? Nếu không, sau đó nó sẽ giải thích lý do tại sao bạn nhận được một lỗi rằng nó không thể được tìm thấy trong lịch sử.

Các ý kiến ​​(kết hợp)

The --prefix gives you remote tracking branches like "svn/trunk" which 
is nice because you don't get ambiguous names if you call your local 
branch just "trunk" then. 

Then get the hash of the empty trunk commit: 

Có xu hướng để ngụ ý rằng họ đã svn/trunk cam kết ngăn chặn xung đột svn với một trunk thư mục tồn tại trước đó. Nếu vậy, có lẽ sai lầm duy nhất của bạn là không cam kết một số svn/trunk để được tìm thấy sau này?

--- Bài đăng gốc sau ---

Bạn đã thử this chưa? dcommit sẽ không hoạt động đúng cho đến khi bạn tuyến tính hóa lịch sử thân cây (hoặc nhánh) của bạn.

Vui lòng đăng chi tiết về lần di chuyển đã cố gắng của bạn. Trong khi những gì bạn đăng là một thông báo lỗi hữu ích, nó sẽ hữu ích hơn gấp mười lần với danh sách các bước bạn đã sử dụng để đến lỗi đó.

+0

'git svn fetch' không thành công với: W: Bỏ qua lỗi từ SVN, đường dẫn có thể không tồn tại: (160013): Hệ thống tập tin không có mục: Không tìm thấy tập tin: bản sửa đổi 1, đường dẫn '/ gentkt' W: Không được báo động ở thông báo trên git-svn chỉ đang tìm kiếm tích cực cho lịch sử cũ. Điều này có thể mất một lúc trên các kho lưu trữ lớn –

+0

và sau đó 'git rev-parse svn/trunk' cung cấp: svn/trunk gây tử vong: đối số mơ hồ 'svn/trunk': bản sửa đổi hoặc đường dẫn không có trong cây đang hoạt động. Sử dụng '-' để tách các đường dẫn khỏi các phiên bản –

+0

Edwin, tôi đã cập nhật câu hỏi được đăng và các bước tôi đã thực hiện cho mỗi liên kết của bạn. Cảm ơn sự giúp đỡ và xin vui lòng cho tôi biết nếu tôi có thể làm nhiều hơn nữa. –