2009-07-24 31 views
5

Sau gần hai năm sử dụng DVCS, có vẻ như một lỗi "cố hữu" là mất dữ liệu ngẫu nhiên: Tôi đã mất mã không được đẩy và tôi cũng biết những người khác.DVCS và mất dữ liệu?

Tôi có thể thấy một vài lý do cho điều này: sao chép dữ liệu ngoài trang web (nghĩa là "cam kết phải đi đến máy chủ từ xa") không được tích hợp, kho lưu trữ trong cùng thư mục với mã và khái niệm của "hack" cho đến khi bạn có một cái gì đó để phát hành "là phổ biến ... Nhưng đó là bên cạnh điểm.

Tôi rất tò mò muốn biết: bạn đã trải qua mất dữ liệu liên quan đến DVCS chưa? Hay bạn đã sử dụng DVCS mà không gặp rắc rối? Và, liên quan, ngoài việc "nhớ đẩy thường xuyên", có điều gì có thể được thực hiện để giảm thiểu rủi ro không?

Trả lời

2

Tôi đã mất nhiều dữ liệu hơn từ các thay đổi không được cam kết trong một VCS tập trung, và sau đó quyết định rằng tôi thực sự muốn chúng, hơn bất kỳ thứ gì tôi đã thực hiện với DVCS. Một phần trong số đó là tôi đã sử dụng CVS trong gần một thập kỷ và git dưới một năm, vì vậy tôi đã có nhiều cơ hội hơn để gặp rắc rối với mô hình tập trung, nhưng sự khác biệt về tính chất của quy trình làm việc giữa hai mô hình cũng là yếu tố góp phần quan trọng.

Điều thú vị là, hầu hết các lý do cho việc này đều bị "ĐỪNG loại bỏ dữ liệu dễ dàng hơn, tôi có nhiều khả năng giữ nó cho đến khi tôi chắc chắn mình không muốn nó". Yếu tố góp phần lớn nhất có lẽ là một thói quen làm việc của tôi - "bản sao làm việc" của tôi khi tôi đang sử dụng DVCS thường là một vài bản sao khác nhau. trên nhiều máy tính, do đó, tham nhũng hoặc mất mát trong một repo duy nhất hoặc thậm chí mất dữ liệu thảm họa trên máy tính tôi đã làm việc trên là ít có khả năng phá hủy các bản sao duy nhất của dữ liệu. (Việc có thể làm được điều này là một chiến thắng lớn của mô hình phân tán trên các tập trung - khi mọi cam kết trở thành một phần vĩnh viễn của kho, rào cản tâm lý để sao chép các thay đổi dự kiến ​​xung quanh cao hơn rất nhiều.)

Theo như giảm thiểu rủi ro, có thể phát triển những thói quen giảm thiểu chúng, nhưng bạn phải phát triển những thói quen đó. Hai nguyên tắc chung ở đó:

  • Dữ liệu không tồn tại cho đến khi có nhiều bản sao của nó ở các địa điểm khác nhau. Có thói quen làm việc sẽ cung cấp cho bạn nhiều bản sao miễn phí - f'rexample, nếu bạn làm việc ở hai nơi khác nhau, bạn sẽ có lý do để chuyển đến một vị trí chung vào cuối mỗi phiên làm việc, ngay cả khi chưa sẵn sàng xuất bản.
  • Đừng cố gắng làm bất cứ điều gì thông minh, ngu ngốc, hoặc ngoài vùng thoải mái của bạn với tham chiếu duy nhất đến cam kết bạn có thể muốn giữ lại. Tạo một thẻ tạm thời mà bạn có thể hoàn nguyên về, hoặc tạo chi nhánh tạm thời để thực hiện các thao tác trên . (git của reflog cho phép bạn khôi phục tài liệu tham khảo cũ sau khi thực tế ; tôi sẽ không ngạc nhiên nếu khác DVCSs có chức năng tương tự. Vì vậy, gắn thẻ thủ công có thể không được cần thiết, nhưng nó thường hơn anyways thuận tiện.)
3

Tôi đã mất dữ liệu từ DVCS, vì việc xóa cây cùng với kho lưu trữ (không nhớ thông tin quan trọng) và do lỗi khi sử dụng dòng lệnh DVCS (git, trong trường hợp cụ thể): một số hoạt động có nghĩa là để hoàn nguyên một thay đổi mà tôi đã thực sự xóa một số bản sửa đổi đã được cam kết từ kho lưu trữ.

0

Có một sự căng thẳng cố hữu giữa việc phân phối và đảm bảo mọi thứ được "lưu" (với giả định cơ bản được lưu có nghĩa là được sao lưu ở một nơi khác).

IMO, đây chỉ là vấn đề thực nếu bạn làm việc trên nhiều máy tính cùng một lúc trên cùng một dòng công việc (hoặc chính xác hơn một vài kho lưu trữ: tôi thường cần chia sẻ thay đổi giữa một vài máy ảo trên cùng một máy tính chẳng hạn.). Trong trường hợp này, quy trình làm việc "tập trung" sẽ là lý tưởng: bạn sẽ thiết lập máy chủ tạm thời và trên một số nhánh cụ thể, sử dụng luồng công việc tập trung. Không có DVCS nào mà tôi biết (git/bzr/hg) hỗ trợ tốt điều này. Đó sẽ là một tính năng tốt để có, mặc dù.

+0

Bazaar không có sự phân biệt giữa "chi nhánh" và "thanh toán", nơi sau này là bản sao làm việc được liên kết với một kho lưu trữ đang sống trong một thư mục khác. Trên những cây như vậy, mọi cam kết hoàn toàn là một cú đẩy (giống như VCS tập trung). Điều này giúp bạn tránh được vấn đề của poster là một câu chuyện khác, nhưng bạn có thể nhận được luồng công việc tập trung mà bạn đang nói đến. – quark

+0

Trên thực tế Mercurial, tính đến 1,3 có khả năng tương tự với phần mở rộng chia sẻ: http://mercurial.selenic.com/wiki/ShareExtension. – quark

+0

Thực tế với git bạn có thể sử dụng 'git-new-workdir' từ contrib. –

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