Làm cách nào để giữ các tập tin dot dot trong kiểm soát phiên bản?


30

Etckeeper là một công cụ tuyệt vời để theo dõi các thay đổi đối với các tệp cấu hình của bạn /etc. Một vài điều quan trọng về nó thực sự nổi bật. Nó có thể được sử dụng với nhiều loại VCS khác nhau: git, mercurial, darcs hoặc bzr. Nó cũng tự động cam kết hàng ngày và bất cứ khi nào bạn cài đặt, gỡ bỏ hoặc nâng cấp gói. Nó cũng theo dõi các quyền của tập tin và siêu dữ liệu quyền sở hữu của người dùng / nhóm.

Tôi cũng muốn giữ "các tập tin dấu chấm" của mình trong thư mục nhà của mình dưới sự kiểm soát phiên bản, tốt nhất là chợ. Có ai biết nếu một công cụ như etckeeper tồn tại cho mục đích này?

Trường hợp xấu nhất, tôi tưởng tượng rằng một công việc định kỳ đơn giản chạy bzr add && bzr cimột lần hoặc hai lần một ngày cùng với việc thêm ~/Documents, ~/Music, vv cho .bzrignore Bất cứ ai đã làm điều gì đó tương tự với một kịch bản?

Trong khi tôi thích chợ, các lựa chọn khác có thể thú vị.


4
Thảo luận liên quan tại Unix Stack Exchange: Mẹo để đặt ~ dưới sự kiểm soát nguồn . Nó không trả lời câu hỏi của bạn, nhưng dù sao cũng có thể cung cấp thông tin hữu ích.
Gilles 'SO- ngừng trở nên xấu xa'

1
Có rất nhiều công cụ cho việc này bây giờ. Xem dotfiles.github.io trong phần "Tiện ích dotfile đa năng".
Robin Green

@RobinGreen Nếu bạn đã trả lời đúng, tôi có thể chấp nhận nó. bzrchắc chắn không phải là con đường để đi trong năm 2015.
andrews Something

Câu trả lời:


7

Tôi không biết có bất cứ điều gì đã làm điều này không vì vậy tôi đã lấy một số mã để đạt được chính xác những gì bạn muốn bằng cách sử dụng kho lưu trữ của tôi ở đây: http://github.com/robertmassaioli/config-files

Tôi có một tệp cho biết nơi tất cả các tệp thuộc về và chương trình Gener_links chỉ đặt tất cả chúng ở đó. Nếu bạn biết những gì bạn đang làm và có thể biên dịch một số mã Haskell thì nó thực sự đơn giản và dễ dàng. Mặc dù được cảnh báo rằng nó thực sự được tạo ra cho mục đích sử dụng cá nhân của riêng tôi.


3
+1 cho haskell! -1 cho haskel! haha không nhưng thực sự
Derek

Tôi nghe bạn. Tôi đã chọn Haskell vì tôi đang học nó, nó có thể hoặc không phải là ngôn ngữ tốt nhất phù hợp với công việc. :)
Robert Massaioli

3

Vâng, tôi đã đi trước và làm điều này bằng tay cho đến khi tôi tìm thấy một giải pháp tốt hơn. Vì vậy, tôi cũng có thể giải thích những gì tôi đã làm.

Đầu tiên tôi đã làm một bzr init ~, nhưng điều tiếp theo tôi làm là bzr ignore "*". Tôi quyết định rằng tôi không muốn giữ toàn bộ điều khiển dưới phiên bản. Điều đó không đáng, nhất là khi bạn cho rằng có một số thứ trong đó bạn thực sự không nên giữ trong vcs như chìa khóa của mình. Vì vậy, sau đó tôi đã phải bzr addcác tập tin cụ thể mà tôi muốn. Bạn cũng có thể thêm ngoại lệ vào .bzrignore. Python biểu thức chính quy cũng hữu ích trong đó. Bây giờ tôi đang giữ nó khá mỏng. Nếu mọi việc suôn sẻ, tôi có thể thêm tất cả ~/.config~/.gconfquá.

Tôi cũng đã viết một kịch bản nhanh mà tôi chạy như một công việc định kỳ. Nó kiểm tra xem các tập tin đã thay đổi chưa và nếu có thì một cam kết tự động:

#! /bin/bash

set -e

TIME=$(date)
STATUS=$(bzr status)

if [ -n "$STATUS" ]; then
    if [ -n "$1" ]; then
         bzr ci ~ -m "$1"
    else
        bzr ci ~ -m "Automatic commit on $TIME"
    fi
fi

exit

Tôi đã chọn câu trả lời của riêng mình khi tôi đăng bài này lần đầu tiên, nhưng quyết định hoàn tác nó. Đây chắc chắn không phải là câu trả lời hay nhất cho câu hỏi này trong năm 2015.
andrews Something

2

Tôi đã biến toàn bộ ~thư mục của mình thành một kho lưu trữ Bazaar. Lưu trữ siêu dữ liệu không phải là vấn đề đối với các tệp trong thư mục chính: mọi thứ đều thuộc sở hữu của cùng một tài khoản và nhóm và bzrđã lưu trữ bit thực thi.

Tôi tự thêm các tệp "thú vị" vào nó (tôi không muốn, ví dụ: bộ sưu tập nhạc của tôi hoặc bộ đệm firefox nằm dưới sự kiểm soát phiên bản), nhưng nếu bạn muốn tự động hóa điều này bằng một tập lệnh, tôi nghĩ đó là giải pháp đơn giản của làm bzr add && bzr citrên các thư mục được chọn hoặc trên đầu ra của một findlệnh sẽ chỉ thực hiện công việc.


2

Tôi giữ các tệp zsh và vim của mình trong git, đặt trên github, trong các kho khác nhau:

ví dụ, đối với zsh, tôi đã tạo ".zsh" và đặt zshrc và zshenv vào đó, cộng với một tập lệnh để liên kết zshrc với ~ / .zshrc và zshenv với ~ / .zshenv, đại loại như thế này.

while true
do
read -p "do you want to link zshenv to ~/.zshenv (Y/N)" yn
case $yn in
    [Yy]*) ln -s ~/.zsh/zshenv ~/.zshenv; break;;
    [Nn]*) break;;
    *) echo "please answer yes or no";;
esac
done

while true
do
read -p "do you want to link zshrc to ~/.zshrc (Y/N)" yn
case $yn in
    [Yy]*) ln -s ~/.zsh/zshrc ~/.zshrc; break;;
    [Nn]*) break;;
    *) echo "please answer yes or no";;
esac
done

vì vậy tôi làm

git clone git://git@github.com:tshirtman/.zsh
cd .zsh
./init.sh

đối với .vim, nó gần như giống nhau, ngoại trừ tôi sử dụng các mô hình con cho plugin, với mầm bệnh, vì vậy tôi đã thêm nó vào init.sh

git submodule init
git submodule update

và khi tôi muốn thêm một plugin vim, tôi làm

git submodule add git://github.com/nathanaelkane/vim-indent-guides.git bundle/vim-indent-guides

ví dụ.

ok, nó sẽ đòi hỏi quá nhiều công việc nếu bạn có nhiều hơn một vài dấu chấm bạn muốn quản lý, nhưng không có gì ngăn cản bạn đặt tất cả chúng vào cùng một thư mục, hoặc tách biệt bởi các hoạt động (trên tất cả các trình soạn thảo đồ họa, một cho hoạt động trên web) hoặc như vậy. Dù sao, đó là những gì tôi đã làm, vì vậy chỉ là hai xu của tôi :).


1

Tôi sử dụng một giải pháp không tự động như etckeeper (tôi phải cam kết thủ công), nhưng nó đã hoạt động tốt với tôi. Nó không hoàn toàn được phát triển như tôi muốn, nhưng nó hoạt động.

Tôi đã viết tiện ích của riêng mình tương tự như GNU Stow , vì stow không làm tất cả những gì tôi muốn. Tôi gọi nó là Stow trong nhà . Khi chạy, nó tìm kiếm một thư mục có tên "HOME". Sau đó, nó lấy mọi thứ trong thư mục đó và liên kết nó đến vị trí tương ứng trong $ HOME, tạo các thư mục khi cần thiết. Nó cũng sẽ dịch tên tệp - nếu một tệp bắt đầu bằng '_', nó sẽ được thay thế bằng '.'. Tôi đã làm điều này bởi vì nó đẹp hơn để chỉnh sửa các tập tin dấu chấm của tôi khi chúng không bị ẩn (xem chúng trong danh sách thư mục theo mặc định). Sau đó, nó sẽ đặt chúng vào tên mà ứng dụng của chúng mong đợi.

Vì vậy, tôi có một số kho git cho cấu hình của tôi. Tôi chỉ đặt các tập tin dấu chấm mà cá nhân tôi chỉnh sửa trong đó. Ưu điểm của việc này là tôi có thể có một kho lưu trữ các tệp chấm mà tôi có thể chia sẻ với người khác (như cấu hình Emacs của tôi) và một cho những người khác là riêng tư (giả sử, cấu hình ssh của tôi, với tên máy chủ và như vậy cho công việc). Các symlinking đặt với stow-in-home đặt mọi thứ ở đúng vị trí, nhưng điều khiển nguồn cho mỗi cái có thể tách rời.

Nó đã làm việc tốt cho tôi. Thực sự không có lý do gì tôi không thể thiết lập một cái gì đó để tự động thực hiện các cam kết. Hoặc di chuyển tất cả các tập tin dấu chấm vào kho lưu trữ thích hợp và vẫn sử dụng stow trong nhà. Nhưng đây là cách tôi đã làm mọi thứ.


0

Bạn không thể thêm dot filesvào kho lưu trữ được sử dụng trong Etckeeper?


1
Làm thế nào tôi sẽ làm điều đó? symlink tất cả chúng đến một nơi nào đó trong /etc?
andrews Something

Chà .. đó là một lựa chọn
txwikinger

0

Tôi đã thực hiện điều đó bằng cách sao chép tất cả các dotfiles của mình mà tôi muốn kiểm soát nguồn vào một thư mục có tên là "dotfiles" trong thư mục / home / của tôi. Tất nhiên điều này có nghĩa là giữ các bản sao và sao chép qua lại khi cần thiết nhưng tôi thấy đây là giải pháp dễ nhất cho bản thân mình.


1
thay vì phải quản lý các bản sao, bạn không thể tạo liên kết tượng trưng cho dotfiles của mình chứ?
Ryan

Tôi nghĩ bạn chắc chắn có thể!
Derek

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.