Có phải là một ý tưởng tốt để sử dụng git để kiểm soát phiên bản tệp cấu hình?


18

Tôi sử dụng Gentoo Linux và nó có cấu hình khá phức tạp. Câu hỏi của tôi là khôn ngoan khi sử dụng git cho phiên bản kiểm soát các tập tin cấu hình của tôi?

Tôi có một số repos git trong nhà của tôi, tôi đoán nếu tôi đặt / home / ** cho .gitignore của tôi, chúng sẽ không gây ra vấn đề.

Cập nhật làm rõ:

Đây có phải là một phương pháp khôn ngoan để sử dụng git để phiên bản kiểm soát các tệp cấu hình cấp hệ thống của tôi trong thư mục gốc "/" không?


@AnthonyGeoghegan Tôi muốn theo dõi thư mục gốc "/" của mình, điều gì có thể dẫn đến hậu quả thú vị trong tương lai vì vậy chủ đề được liên kết chỉ trả lời một phần câu hỏi của tôi. Phần khác: có phải là khôn ngoan khi sử dụng git cho phiên bản kiểm soát các tệp cấu hình của tôi vẫn chưa được trả lời
atevm

1
@AnthonyGeoghegan cảm ơn. Tôi cập nhật câu hỏi.
atevm

Câu trả lời:


19

Câu trả lời ngắn cho câu hỏi của bạn là .


Tôi sẽ không ngần ngại giới thiệu Git (hoặc bất kỳ phần mềm kiểm soát phiên bản nào khác) để theo dõi các tệp cấu hình. Kể từ khi làm như vậy, tôi đã làm việc hiệu quả hơn (đặc biệt là để định cấu hình cài đặt mới) và có độ tin cậy cao hơn đối với các tệp cấu hình của mình. Với kiểm soát phiên bản, tôi có một bản ghi về những thay đổi đã được thực hiện và thông báo cam kết cung cấp lý do tại sao thay đổi được thực hiện. Nếu một thay đổi có tác dụng phụ ngoài ý muốn, tôi có thể dễ dàng xem lại nhật ký / lịch sử để xem những thay đổi nào gây ra hiệu ứng.

Cá nhân, tôi sẽ cảnh giác theo dõi tất cả các tệp trong /thư mục gốc. Danh sách các đường dẫn để bỏ qua có thể trở nên lớn và khó sử dụng. Tôi thích giữ từng bộ tệp logic trong kho lưu trữ của riêng họ.

Tôi sử dụng Git theo cách thủ công để theo dõi các tệp cấu hình / khởi động cá nhân của mình , ví dụ: cấu hình Vim, hàm Bash, bí danh, v.v. - tương tự như cách tiếp cận được liệt kê trong Cách theo dõi $ HOME bằng git . Tôi giữ mỗi bộ tệp trong kho lưu trữ của riêng họ và sử dụng các liên kết tượng trưng đến thư mục chính.

Đối với các tệp cấu hình hệ thống , tôi sử dụng Git với Etckeeper để theo dõi các tệp trong /etcthư mục của mình .

Hạn chế

Một vấn đề cần cảnh giác là nếu các tệp được theo dõi bao gồm các liên kết cứng . Khi Git được sử dụng để kiểm tra các tệp hoặc sửa đổi cây làm việc, nó sẽ hủy liên kết các tệp và sau đó tạo lại chúng . Xem Git, Dotfiles và Hardlinks để được giải thích đầy đủ hơn.

Vv

Etckeeper có thể được sử dụng để giữ toàn bộ lịch sử thay đổi được thực hiện cho / etc. Nó theo dõi siêu dữ liệu tệp mà các hệ thống kiểm soát sửa đổi thường không hỗ trợ, nhưng điều đó rất quan trọng /etc, chẳng hạn như các quyền của /etc/shadow.

Nó móc vào các trình quản lý gói như apt và yum và (trong cấu hình mặc định của nó), chạy trước và sau khi cài đặt để tất cả các thay đổi /etcđược theo dõi.

Nếu một gói được cài đặt hoặc gỡ bỏ, tất cả các thay đổi không được cam kết trong / etc sẽ được cam kết trước khi vận hành gói để có hai lần xác nhận:

  1. Tiết kiệm những thay đổi không được cam kết trong / etc trước khi chạy yum
  2. Cam kết thay đổi trong / etc sau khi chạy yum

Tôi đã sử dụng nó với các bản phân phối dựa trên Debian và Red Hat và tôi biết nó hỗ trợ quản lý gói Arch. Tôi không thể nói nó sẽ tự động thêm bao nhiêu vào hệ thống Gentoo nhưng một gói có sẵn cho nó .

Nó cũng hỗ trợ đẩy các tập tin cấu hình vào một kho lưu trữ từ xa (tất nhiên là ở chế độ riêng tư).

Cấu hình

Sau khi cài đặt gói, bạn có thể cần phải định cấu hình gói ( /etc/etckeeper/etckeeper.conf), ví dụ: trên các hệ thống Ubuntu, hệ thống kiểm soát phiên bản mặc định được thay đổi từ Git thành Bazaar. Bạn cũng có thể muốn vô hiệu hóa các cam kết tự động hàng ngày .

Autocommits hàng ngày

Thay đổi có thể được tự động cam kết bởi một công việc định kỳ hàng ngày . Điều này có thể gây phiền nhiễu vì kho lưu trữ có thể bị lộn xộn với nhiều thông điệp cam kết tự động.

Tôi bỏ ghi chú thích hợp trong /etc/etckeeper/etckeeper.conf:

sed -i '/AVOID_DAILY_AUTOCOMMITS/s|^#* *||' /etc/etckeeper/etckeeper.conf

Bỏ qua các tập tin nhất định

Chỉnh sửa /etc/.gitignoređể chỉ định bất kỳ tệp nào không nên được theo dõi.

Lần chạy đầu tiên

Sau khi cấu hình, chạy các lệnh sau:

sudo etckeeper init
sudo etckeeper commit "Initial commit"

Nếu thư mục hiện tại của bạn là etc, bạn có thể chạy các gitlệnh thông thường , ví dụ:

sudo git status
sudo git log

1
Ồ, nó rất hữu ích và chi tiết ... cảm ơn bạn :)
atevm

Chỉ cần cập nhật một câu trả lời được viết rất tốt: etckeepertrong quá trình cam kết hàng ngày sẽ thực sự kiểm tra trước nếu /etc"không sạch", tức là nó có các tệp không được cam kết. Nếu không, nó sẽ không cam kết. Vì vậy, nếu nhật ký cam kết của bạn có đầy đủ các cam kết hàng ngày, có thể có các tệp đã thay đổi hàng ngày mà bạn chưa thêm vào .*ignoretệp :-)
pepoluan

Ngoài ra, trên Ubuntu, nó có xu hướng cực kỳ khó thực hiện ngay lập tứcbzr init --__-- ... Tôi khuyên bạn nên luôn chạy etckeeper uninit -fsau khi cài đặt.
pepoluan

Lưu ý, vvkeeper rõ ràng không còn được lưu trữ trên github. Họ sử dụng hệ thống riêng của họ trên trang chủ của họ bây giờ. Có lẽ một số ác cảm M $ về phía tác giả. Cá nhân tôi thấy rằng một quyết định đáng tiếc vì bây giờ bạn không thể dễ dàng báo cáo các vấn đề và không thể thấy mức độ phổ biến của dự án.
Michael Härtl

Cảm ơn @ MichaelHärtl Tôi đã xóa liên kết lỗi thời đến repo GitHub.
Anthony G - công lý cho Monica

3

Tôi sử dụng git để theo dõi các khu vực cụ thể của thư mục nhà của tôi. Cá nhân, tôi sẽ không đi theo con đường theo dõi thư mục gốc, nhưng tôi phải nói rằng tôi ngưỡng mộ tham vọng của bạn. :)

Có lẽ bộ sưu tập kinh nghiệm này có thể cung cấp cho bạn ý tưởng tốt hơn về những gì bạn có thể nhận được:

tác dụng của việc khởi tạo kho git trên thư mục gốc linux 3 :)

Xin lỗi cho một "câu trả lời", thay vì chỉ ném liên kết trong một bình luận; Tuy nhiên, không đủ đại diện, nhưng muốn hòa nhập.

Biên tập

Ồ Câu trả lời rất hay của @AnthonyGeoghegan. Tôi tin rằng đây không phải là một cuộc đấu tranh như tôi đã hình dung ban đầu.


0

Tôi cũng sử dụng gitđể lưu trữ và bảo trì dotfiles, nhưng trong một git bare repository. Một hướng dẫn chi tiết có thể được tìm thấy ở đây . Tôi đang sử dụng hai kho lưu trữ, một cho người dùng dotfiles có tên myconfvà một cho dotfiles gốc có tên rootconf.

Ngoài ra, bạn có thể sử dụng cả hai cấu hình trên nhiều máy, Phân phối Linux hoặc Máy ảo khác nhau: Chỉ cần tạo một nhánh mới cho một cấu hình riêng biệt. Sau đó, bạn tránh trộn mã trong cùng một tệp (ví dụ .bash_alias): Không khó chịu nếu phải kiểm tra máy hiện tại nữa; không có liên kết cần thiết!

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.