Tiếp tục bản sao git-svn


117

Tôi đã bắt đầu sao chép một kho lưu trữ SVN bằng cách sử dụng hoạt động sao chép của git-svn. Sau khoảng 6 giờ nhập (đó là một repo lớn), máy tính của tôi đã ngủ trên người tôi. Có cách nào để tiếp tục hoạt động mà không cần thực hiện lại tất cả các công việc ban đầu?

Câu trả lời:


156

Các git svn fetchlệnh để khôi phục một git svn cloneđược xác nhận bởi nhiều nguồn khác nhau:

(Ngẫu nhiên, nếu trong bước sao chép ban đầu kết nối của bạn bị chết hoặc bạn cần dừng nó thì để tiếp tục sao chép, bạn chỉ cần chạy lệnh trên để tiếp tục tải xuống lịch sử).

Dường như có một bộ nhớ bị rò rỉ trong git-svn. Kích thước của git-svnquá trình tăng chậm và sau khoảng hai tuần, nó ở kích thước cư trú 1,2 GB, tại thời điểm đó hệ điều hành đã từ chối để nó phân nhánh.
Điều đó là, đây là một may mắn được ngụy trang.
Tôi đã có thể tiếp tục bản sao bị gián đoạn bằng một dấu "" đơn giản git svn fetchvà nó chạy nhanh hơn nhiều với đống hiện đã nhỏ hơn hoàn toàn.
Thực tế, điều này hoạt động rất tốt, đến mức tôi có thói quen làm gián đoạn và bắt đầu lại quy trình vào mỗi buổi tối và mỗi sáng. Vài ngày sau nó đã được thực hiện.

Bạn bắt đầu cuộc phiêu lưu của mình bằng git-svncách sao chép kho lưu trữ Subversion hiện có:

git svn clone url://path/to/repo -s

Các -slá cờ giả định rằng kho của bạn sử dụng "thân cây, cành, thẻ" ước. Nếu không, bạn phải chỉ định thủ công thư mục nào đại diện cho các nhánh và thẻ, nếu bạn muốn Git biết về chúng.

Việc này sẽ mất nhiều thời gian, vì nó sẽ lấy từng bản sửa đổi từ SVN và cam kết cục bộ. Nếu vì bất kỳ lý do gì mà nó dừng lại, bạn có thể tiếp tục với git svn fetch.


1
Tôi nghĩ rằng một số tùy chọn dòng lệnh được cung cấp git svn clonecũng cần được cung cấp (nếu có) git svn fetch. Ví dụ, tôi đã đặt -r HEADcho git svn cloneđể có được Chỉ xuất phiên bản ĐẦU SVN. Để tiếp tục, tôi đã chạy git svn fetch, bắt đầu nhập tất cả các bản sửa đổi.
amolbk

Điều này bắt đầu mọi thứ lại từ bản sửa đổi đầu tiên .... Tôi có 10.000 cam kết! Bất kỳ suy nghĩ nào về cách tiếp tục từ nơi nó đã dừng lại?
Nathan JB

@ NathanJ.Brauer không ở trên đỉnh đầu của tôi. Bạn có thể đặt một câu hỏi mới (với hệ điều hành, phiên bản git và phiên bản svn sử dụng, và một liên kết trở lại với câu trả lời này cho ngữ cảnh)
VonC

1
Tôi đã vô tình git svn clonengắt kết nối mạng của mình trong khi làm gián đoạn quá trình. Đang chạy git svn clonelại xuất hiện để tiếp tục quá trình sao chép. Có ai khác đã làm điều này?
Kehlan Krumme

1
@Kehlan Rõ ràng là vậy, nếu bạn xem xét câu trả lời của zan-xhipe bên dưới
VonC

17

Tôi đã tìm thấy một bài đăng trên blog cung cấp câu trả lời chính xác (tôi hy vọng) là gì.

Rõ ràng, chạy git svn fetchhiệu quả hoàn thành hoạt động nhân bản. Đây là hy vọng!


7
bạn sẽ phải sử dụng git svn rebasesau khi lấy để hoàn thành các hoạt động và có chi nhánh tổng thể phản ánh thân
Romuald Brunet

Bạn có thể cung cấp một liên kết đến bài đăng trên blog để tham khảo trong tương lai không?
jmanning2k

6

Như VonC, CaptainAwesomePants và Archi đều nói là git svn fetchlàm được điều này. Tôi đã thực hiện git svn clone url... --authors-file=path/to/filevà sao chép không thành công vì một trong các tác giả không có trong tệp tác giả. Tôi đã thêm tác giả vào tệp và chạy git svn fetchvà nó tiếp tục từ nơi nó dừng lại và nhìn vào git log sau đó, có vẻ như nó đã sử dụng tác giả mới được thêm để thay thế tên tác giả cam kết nên tất cả đều rất ngọt ngào.


5

Từ ít nhất git 2.1.0, bạn có thể tiếp tục bằng cách phát hành lại git svn clone

Tuy nhiên, điều này sẽ trùng lặp một số mục nhập trong .git / config của bạn, hãy xóa chúng đi và mọi thứ sẽ ổn


From at least git 2.1.0...Bất kỳ ý tưởng nếu tính năng này tồn tại ở git 1.9.1?
CivFan

Xin lỗi, tôi không còn kho lưu trữ svn nào để thử cái này nữa.
zan-xhipe

git svn fetchgây ra sự không phù hợp checksum cho tôi - và đã không thể thiết lập lại vì đã có rõ ràng không ĐẦU: / - nhưng công trình này tốt, chỉ cần có để loại bỏ các svn-remote.fetchtừ.git/config
OLL
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.