2013-03-24 29 views
6

Tôi biết rằng trong Mercurial, "lịch sử là thiêng liêng".Mercurial: Xóa vĩnh viễn dữ liệu nhạy cảm khỏi HG repo?

Nhưng giả sử ai đó vô tình cam kết điều gì đó họ không nên, như tệp cài đặt chứa mật khẩu hoặc nội dung nào đó. Hãy thậm chí nói một thời gian trôi qua trước khi bất cứ ai nhận ra nó, vì vậy nó được treo xung quanh cho một số cam kết. Rõ ràng, người khám phá sẽ loại bỏ các dữ liệu nhạy cảm khỏi kho lưu trữ.

Có cách nào để xóa vĩnh viễn tệp đó hoặc dữ liệu nhạy cảm khỏi lịch sử cam kết, như thể nó chưa từng tồn tại? Hay liệu dữ liệu nhạy cảm đó có phải là một phần vĩnh viễn của repo mãi mãi?

+1

dupe: http://stackoverflow.com/questions/1029480/is-there-a-way-to-remove-the-history-for-a-single-file-in-mercurial –

+2

Câu trả lời được đưa ra là không phải là rất hữu ích. Đó là kỹ thuật chính xác trong một ý nghĩa. Nhưng nếu bạn sẵn sàng nói cho tất cả những người có thể nhân bản kho lưu trữ của bạn để loại bỏ thay đổi, bạn có thể xóa changeset giới thiệu thay đổi, sau đó sử dụng thứ gì đó như cấy ghép để di chuyển tất cả thay đổi sau đó và cung cấp cho họ băm mới cam kết. – Omnifarious

+1

Câu trả lời của Martin Geisler là một câu trả lời hay hơn và là một phương pháp khác ngoài phương pháp tôi đề xuất. – Omnifarious

Trả lời

2

Có một vài phương pháp để thực hiện việc này. Tất cả đều đòi hỏi sự hợp tác của tất cả mọi người đã nhân bản kho lưu trữ của bạn hoặc kéo các thay đổi từ nó sau khi thay đổi được giới thiệu.

Phương pháp nào sử dụng tùy thuộc vào bản chất chính xác của dữ liệu đã cam kết và vị trí trong lịch sử. Tất cả chúng đều yêu cầu sử dụng các phần mở rộng Mercurial và không thể hoàn thành với Mercurial lõi. May mắn thay, tất cả các phần mở rộng cần thiết được vận chuyển theo mặc định với Mercurial và chỉ cần được kích hoạt.

Tôi sẽ không đi vào chi tiết về các phương pháp ở đây vì có một số câu trả lời đưa ra các phương pháp khác nhau trong câu hỏi này là một sự lừa đảo của. Tôi chỉ muốn rõ ràng rằng câu trả lời được chấp nhận trong câu hỏi đó là đúng về mặt kỹ thuật, nhưng không hữu ích. Nó thực sự là có thể.

1

Tôi chưa điều tra chi tiết về cách móc hoạt động để ý tưởng này có thể không phát huy hết. Có thể thiết lập móc để không cho phép cam kết, đẩy và kéo các tệp nhạy cảm của bạn. Có móc sẽ chạy trước khi cam kết hoặc đẩy (precommit and preoutgoing). Bảo vệ móc để chúng không bị phá vỡ là một vấn đề khác mà Mercurial: The Definitive Guide cũng thảo luận.

0

No. Không thực sự. Nếu bạn có thể thuyết phục tất cả những người có quyền truy cập để xóa và reclone, bạn có thể loại bỏ các tập tin từ truy cập trong tương lai.

Nhưng nếu bạn, ví dụ: đẩy mật khẩu gốc của bạn vào repo Bitbucket công khai -? Bạn nên thay đổi nó. Thông tin của bạn bây giờ là công khai và bị rò rỉ và cần được xem xét như vậy. Lấy làm tiếc.

0

Nếu và chỉ nếu, kho này đã không trốn thoát vào môi trường tự nhiên, bạn có thể xóa một tập tin từ lịch sử bởi bản chất nhân bản để một kho lưu trữ mới trong khi lọc các tập tin nhạy cảm trong quá trình này, sử dụng hg convertHg Convert Extension doc here

Thông thường, chúng tôi tìm thấy điều gì đó khi chúng tôi kiểm tra kho lưu trữ trước khi xuất bản hoặc gửi cho khách hàng, chẳng hạn như tệp web.config hoặc ini bằng mật khẩu.

Tiện ích mở rộng không được bật theo mặc định, nhưng được bao gồm với tất cả ứng dụng tôi sử dụng, bạn cần bật nó trước khi Mercurial nhận ra lệnh chuyển đổi.

Nếu sử dụng Rùa Hg hoặc lò, ví dụ:

  1. mở Rùa Hg -> Global Settings -> Extensions
  2. Đánh dấu vào ô bên cạnh "Chuyển đổi"
  3. Bấm Ok

Hoặc chỉnh sửa Mercurial.ini trực tiếp:

[extensions] 
convert = 

Vào thư mục trên kho lưu trữ của bạn (trong ví dụ của tôi, Repos của tôi là HelloApp):

  1. Tạo một file có tên filemap.txt

  2. Thêm một phù hợp với đường dẫn đầy đủ đến tên tập tin bạn muốn loại trừ.

    exclude HelloApp/sensitive.config 
    
  3. Mở một dấu nhắc lệnh, cd vào cùng thư mục chứa filemap.txt của bạn, và chạy hg chuyển đổi

    cd C:\projects 
    
    hg convert --filemap filemap.txt HelloApp HelloApp_clean 
    
  4. Sau đó, nhận được bản sao làm việc mới nhất:

    cd HelloApp_clean 
    hg update 
    

Bạn sẽ cần phải tạo bản sao mới trên máy chủ của mình bằng bản sao sạch.

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