2011-12-05 28 views
10

Khi chơi xung quanh với git, đôi khi tôi cố gắng ra điều gì đó, sau đó hủy bỏ lệnh mà mất quá lâu (ví dụ một số git svn lệnh treo trong vấn đề về mạng). Đây đã cho tôi suy nghĩ:Kho lưu trữ git có bị hỏng nếu lệnh sửa đổi nó bị treo hoặc bị hủy không?

Là nó luôn luôn an toàn để mạnh mẽ hủy bỏ một lệnh (Ctrl-C hoặc kill)? Điều gì sẽ xảy ra nếu một lệnh bị treo (hết bộ nhớ, lỗi, sự cố mạng/FS)? Kho lưu trữ có thay đổi "giao dịch" theo nghĩa là các thay đổi không đầy đủ "được khôi phục" (như trong hệ thống tệp phiên bản) không? Hoặc tôi có nguy cơ tham nhũng kho lưu trữ trong trường hợp đó?

tôi chắc chắn rằng những người thông minh làm việc trên git phải lấy này vào tài khoản, nhưng tôi không thể tìm thấy bất cứ thông tin trong cuốn hướng dẫn git hoặc trực tuyến.

Trả lời

9

Các kho là hoàn toàn giao dịch, vâng.

Cây làm việc gần như giao dịch, nhưng có một trường hợp góc mà không thể dễ dàng được giải quyết. Checkout thực hiện tất cả các kiểm tra cần thiết và ghi nội dung mới vào các tệp tạm thời và trong thời gian đó, không có gì được sửa đổi nếu bạn ngắt nó. Nhưng sau đó nó đổi tên các tập tin thành từng cái một và cuối cùng cập nhật HEAD ref và ngắt trong giai đoạn đó có thể để lại cho bạn những thay đổi một phần được thực hiện cho cây. Không có đổi tên hàng loạt để cho phép làm điều đó một cách nguyên tử.

+0

Bạn có một tài liệu tham khảo (nguồn git hoặc tài liệu) mà repo và hành động đẩy được giao dịch? –

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