2013-03-01 31 views
9

Vấn đềGit-svn - nhập khẩu lịch sử đầy đủ

Theo mặc định git svn bản sao nhập khẩu lịch sử chỉ từ tạo chi nhánh trở đi, bất chấp thực tế, rằng lịch sử cho các tập tin có mặt trong kho svn tạo chi nhánh trước.

Chi nhánh svn của chúng tôi được tạo bởi svn copy, nếu điều đó quan trọng.

My nỗ lực

Tôi đã thử --no-minimize-url--follow-parent, nhưng không thành công. Kho lưu trữ git được tạo giống như không có các tham số này, bắt đầu từ việc tạo nhánh.

kết quả mong muốn

kho Git với lịch sử đầy đủ từ việc tạo ra kho svn.

Cập nhật Dòng lệnh thực tế của tôi là git svn clone http://svnserver/repo/dir1/dir2/project.
Điều gì đã giúp - đối số với lệnh kết quả
git svn clone http://svnserver/repo/ -T dir1/dir2/project

Rất cám ơn!

+0

bạn đã thử với cờ -T? git svn clone-repo_url? –

+0

@Kata, tôi không phải là bạn đề cập đến cờ '-s'? Bố cục chuẩn. Nó giả định định dạng thư mục trunk/branches/tags chuẩn, vì vậy nó nhập tất cả các nhánh và thẻ từ kho SVN. Tôi đã tìm thấy http://jonmaddox.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/ đặc biệt hữu ích cho việc di chuyển. – mgarciaisaia

+0

Bạn có thể đăng toàn bộ lệnh (các url nhạy cảm bị loại trừ) của những gì bạn đã sử dụng để sao chép svn repo không? –

Trả lời

10

By git svn lịch sử nhập khẩu bản sao mặc định chỉ từ tạo chi nhánh trở đi, bất chấp thực tế, rằng lịch sử cho các tập tin hiện diện trong svn kho tạo chi nhánh trước.

Có. điều đó đúng. git svn sẽ chỉ cố gắng nhập chi nhánh làm chi nhánh nếu được thông báo. Từ manpage của git-svn:

Khi nhân bản một kho SVN, nếu không ai trong số các tùy chọn để mô tả bố trí kho lưu trữ được sử dụng (--trunk, --tags, --branches, --stdlayout), git svn clone sẽ tạo một kho lưu trữ git với lịch sử tuyến tính hoàn toàn, trong đó các chi nhánh và thẻ xuất hiện dưới dạng các thư mục riêng biệt trong bản sao làm việc.

Nếu bạn chuyển URL cho một chi nhánh đến git svn clone (thay vì URL cấp cao nhất), bạn sẽ chỉ nhận được lịch sử tuyến tính cho chi nhánh đó. Đó có lẽ là những gì bạn đang thấy.

Nếu bạn muốn có lịch sử đầy đủ, hãy sử dụng các tùy chọn bố cục kho được đề cập ở trên và chuyển URL cấp cao nhất. Sau đó, git svn sẽ cố gắng tạo các nhánh git cho các chi nhánh SVN và sẽ cố gắng cung cấp cho họ lịch sử phù hợp, quay lại trước khi tạo.

Lưu ý rằng điều này sẽ cung cấp cho bạn toàn bộ kho lưu trữ với tất cả các chi nhánh. Nếu bạn chỉ muốn một số chi nhánh, bạn cần phải sửa đổi cấu hình của bạn như được giải thích trong manpage:

Nó cũng có thể lấy một tập hợp con của các chi nhánh hoặc thẻ bằng cách sử dụng một danh sách bằng dấu phẩy tên trong niềng răng.Ví dụ:

 [svn-remote "huge-project"] 
       url = http://server.org/svn 
       fetch = trunk/src:refs/remotes/trunk 
       branches = branches/{red,green}/src:refs/remotes/branches/* 
       tags = tags/{1.0,2.0}/src:refs/remotes/tags/* 

Xem git-svn(1).

+2

Nếu bạn chỉ định nhiều nhánh đơn như nhiều tùy chọn cấu hình 'svn-remote. {Name} .fetch' (bạn cần thực hiện điều này bằng cách chạy' git svn init' và 'git svn fetch' đầu tiên, không có' git svn clone cắt ngắn ở đây), bạn có thể lấy một số ít các nhánh cụ thể, bao gồm cả lịch sử nhánh giữa chúng. –

+0

@me_and: Tốt. Các tài liệu git-svn cũng giải thích cách lấy chỉ một số nhánh; Tôi đã chỉnh sửa câu trả lời của mình. – sleske

+0

Làm thế nào để làm điều này nếu bạn không có bố trí svn và thay vì các chi nhánh bạn thực hiện svn-bản sao? – Spen