Làm cách nào tôi có thể tạo một bản sao trong khi thay đổi bản sao của một thư mục trong linux?


0

Tôi có một bộ công cụ để xây dựng một dự án rất lớn. Ở một số giai đoạn cấp cao, các công cụ của tôi tạo các bản sao của môi trường xây dựng (một thư mục) để cho phép người dùng quay trở lại điểm đó.

Tôi đang cố gắng tăng tốc thao tác sao chép này (không gian không phải là vấn đề lớn, nhưng thời gian là vậy) vì vậy tôi muốn tìm cách tạo một bản sao của thư mục xây dựng bao gồm các liên kết (mềm hoặc cứng hoặc tương tự) các tệp gốc nhưng sẽ không bao giờ sửa đổi các tệp gốc mà thay vào đó sẽ tự động tạo các bản sao của chúng khi chúng đang (hoặc có thể) bị thay đổi.

Lưu ý: các công cụ này là để thực hiện quá trình xây dựng, vì vậy các tệp ký quỹ sẽ có thời gian tồn tại ngắn, chúng sẽ không cần được bảo tồn trong một thời gian dài và luôn có thể được tạo lại dưới dạng mã gốc với chi phí thời gian, vì vậy tôi đã không xem xét các giải pháp SCM như Subversion.


Tôi chưa bao giờ sử dụng ảnh chụp nhanh, nhưng một hệ thống tập tin hỗ trợ ảnh chụp nhanh có thể là giải pháp. vi.wikipedia.org/wiki/Filesystem_snapshot#FS
mpy

1
Nó trông giống như một cách phức tạp để có kiểm soát phiên bản. Tại sao không sử dụng một VCS thay thế? (ví dụ: GIT)
Bruno9779

Như tôi đã đề cập đến thời gian tồn tại của dữ liệu không quá dài (ngày hoặc tuần), bởi vì đây là môi trường xây dựng, một số thư mục thực sự đến từ các SCM khác (git / svn) nên việc kiểm tra toàn bộ vào SCM sẽ là cầu xin xung đột.
tletnes

Câu trả lời:


2

Một SCM có thể được sử dụng cho việc này:

  1. Tạo một kho lưu trữ chỉ với một cam kết duy nhất:

    git init
    git add .
    git commit -m "initial commit"
    
  2. Xây dựng

  3. Hoàn nguyên về trạng thái ban đầu

    git checkout -f   # discard modifications to committed files
    git clean -f -d   # delete files that were not committed
    

Để đạt được bản sao thực sự trên ghi, bạn sẽ cần hỗ trợ ở cấp độ hệ thống tệp. zfscho phép tạo ảnh chụp nhanh trên mỗi hệ thống tệp (và thật rẻ tiền để tạo một hệ thống tệp zfs riêng chỉ dành cho gốc xây dựng); trong btrfs, tương tự được thực hiện thông qua subvolume. Ngoài ra, trong btrfs, bạn có một loại liên kết mới gọi là "Reflinks", giống như liên kết cứng nhưng với CoW.

btrfs subvolume create ~/build.base
[fill ~/build.base]
btrfs subvolume snapshot ~/build.base ~/build.temp
[run build in ~/build.temp]
btrfs subvolume delete ~/build.temp
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.