2010-11-15 7 views
7

Tôi đang sử dụng cầu git-svn và đã thay đổi kích thước một số lượng lớn tệp trong kho của tôi để nó được sắp xếp tốt hơn một chút.Có an toàn để gián đoạn cuộc gọi dcommit dường như bị treo lên không?

Tôi chạy git svn dcommit để đặt các thay đổi trở lại tại máy chủ SVN và quá trình này có vẻ như đã bị treo lên. Tôi không nhận được sử dụng CPU và không sử dụng mạng cho cuộc gọi dcommit trong 45 phút qua. Đầu ra bị kẹt tại:

> git svn dcommit 
...snip... 
    R  zlib/vs2005/zconf.h => tools/zlib/vs2005/zconf.h 
    R  zlib/vs2005/zlib.h => tools/zlib/vs2005/zlib.h 
    R  zlib/vs2005/zlib_ds.lib => tools/zlib/vs2005/zlib_ds.lib 
    R  zlib/vs2005/zlib_ds.pdb => tools/zlib/vs2005/zlib_ds.pdb 
    R  zlib/vs2005/zlib_s.lib => tools/zlib/vs2005/zlib_s.lib 
    R  zlib/vs2005/zlib_s.pdb => tools/zlib/vs2005/zlib_s.pdb 

Và đó là khoảng 45 phút.

Chỉnh sửa: cuối cùng kết thúc cho biết kết nối HTTPS đã hết thời gian chờ. Điều này mất khoảng một tiếng rưỡi để xảy ra.

Tôi không thể tìm thấy bất kỳ thông tin dứt khoát nào về điều gì sẽ xảy ra nếu tôi ngắt cuộc gọi dcommit này và những gì tôi cần làm trước khi tôi cố gắng gửi lại các thay đổi một lần nữa từ kho lưu trữ cục bộ của tôi trở lại máy chủ SVN .

Tôi có thể trả lời một phần câu hỏi của mình: Tôi cần phải làm gì trước khi thử lại?

Sau khi kết nối hết hạn và lời nhắc của tôi đã được trả lại, tôi phải thực hiện git svn fetch trước khi tôi có thể chạy lại git svn dcommit. Tất cả các hoạt động đổi tên của tôi đã được tìm thấy trong kho SVN nhưng các thư mục bị bỏ trống sau khi shuffle không bị xóa. Tôi đã phải sử dụng SVN client của tôi để loại bỏ chúng. Tôi không chắc chắn nếu điều này một điều git-svn hoặc vì thời gian chờ HTTPS trong cuộc gọi dcommit đó.

Tôi vẫn không biết câu trả lời cho: Việc gián đoạn cuộc gọi dcommit có an toàn không?

+1

Nếu bạn muốn git-svn xóa các thư mục rỗng, bạn nên sử dụng tùy chọn dòng lệnh '--rmdir' hoặc tùy chọn cấu hình' svn.rmdir'. – ninjalj

+0

Đối với câu hỏi chính của bạn, có lẽ bạn nên hỏi về danh sách gửi thư git, có thể là tác giả của CC'ing git-svn. – ninjalj

+0

Cảm ơn @ninjalj - Tôi sẽ thử trên danh sách gửi thư. –

Trả lời

5

Có, nó an toàn.

dcommit cơ bản nào này đối với từng cam kết bạn đang đẩy mạnh để SVN:

  1. Tính chênh lệch giữa cam kết và mẹ của nó. (Về cơ bản, tạo bản vá cho cam kết.)
  2. Gửi sự khác biệt này qua giao thức SVN dưới dạng một thay đổi được cam kết. Khi điều này hoàn tất, cam kết hiện đang tồn tại trên máy chủ SVN.
  3. Tìm nạp cam kết mới và bất kỳ cam kết mới nào khác được tạo trong thời gian chờ đợi bởi những người dùng khác và lưu trữ chúng cục bộ dưới dạng cam kết Git thích hợp. Chi tiết git-svn ref sẽ được cập nhật để trỏ đến cái mới nhất.
  4. Rebase tất cả các cam kết sau khi một trong những chỉ xử lý vào git-svn chi nhánh ref cam kết. (Kể từ khi cam kết đang được xử lý nên bây giờ sống trên máy chủ, điều này sẽ dẫn đến cam kết địa phương mà chỉ được xử lý bị loại bỏ, theo bất kỳ rebase khác.)

Nếu bạn ngắt trong bước 2 (đó là những gì nó giống như âm thanh) thì cam kết hiện tại sẽ bị hủy bỏ trên máy chủ svn. Bạn sẽ có thể dcommit một lần nữa mà không cần lo lắng.

Nhưng, nếu bạn hoang tưởng (và bạn nên khi phối hợp giữa các VCS như thế này), bạn có thể muốn chạy git svn rebase trước tiên. Điều này sẽ kéo xuống bất kỳ cam kết mới nào trên SVN (bao gồm cả cam kết mà bạn đã cố gắng đẩy, nếu nó thực sự thành công phía máy chủ) và rebase nhánh địa phương của bạn trên đầu trang của nó.

+0

Cảm ơn @cdhowie. Sau khi thời gian chờ cuối cùng trở lại dấu nhắc của tôi, tôi đã thử một rebase. Ước gì tôi đã nắm lấy lỗi tôi nhận được từ nó. Nó không sẵn sàng để cập nhật repo git cục bộ của tôi từ máy chủ SVN. Nếu tôi có thể tạo lại nó, tôi sẽ đăng lỗi. –

+0

Đó có phải là lỗi trực tiếp hay chỉ là xung đột bản vá? – cdhowie

+0

Đó là một cuộc xung đột, nhưng tôi không thể tìm ra cách giải quyết nó. Tôi đã kết thúc việc xác minh cam kết bằng cách sử dụng 'svn' và sau đó tái tạo kho lưu trữ git cục bộ từ đầu bằng một cuộc gọi' git svn clone' khác. –