“Nokta dosyaları” versiyon kontrolü altında nasıl tutulur?


30

Etckeeper , yapılandırma dosyalarınızdaki değişiklikleri takip etmek için harika bir araçtır /etc. Bu konuda birkaç önemli şey gerçekten göze çarpıyor. Çok çeşitli VCS'lerle kullanılabilir: git, mercurial, darcs veya bzr. Ayrıca otomatik olarak günlük işler ve ne zaman bir paket yüklerseniz, kaldırır veya yükseltir. Ayrıca dosya izinlerini ve kullanıcı / grup sahipliği meta verilerini de izler.

Ayrıca "dot dosyalarımı" ev dizinimde sürüm kontrolü altında, tercihen çarşıda tutmak istiyorum. Bunun için etckeeper gibi bir alet olup olmadığını bilen var mı?

En kötü durumda, basit bir cron işi çalıştıran hayal bzr add && bzr cikez veya ekleme ile birlikte günde iki kez ~/Documents, ~/Musiciçin, vb .bzrignore zaten bir komut dosyası ile benzer bir şey yapıyor Herkes?

Pazarı tercih ederken diğer seçenekler ilginç olabilir.


4
Unix Stack Exchange'de ilgili tartışma: Kaynak kontrolü altına almanın ipuçları . Sorunuza cevap vermiyor, ancak yine de faydalı bilgiler sağlayabilir.
Gilles 'SO- kötülük yapmayı bırak'

1
Şimdi bunun için çok fazla araç var. "Genel amaçlı dotfile programları" bölümünde dotfiles.github.io adresine bakınız .
Robin Green

@RobinGreen Bunu uygun bir cevap içinde yaptıysanız, kabul edebilirim. bzrkesinlikle 2015'te
gitmenin

Yanıtlar:


7

Bunu yapan bir şey olup olmadığını bilmiyordum, bu yüzden burada depoumu kullanarak tam olarak ne istediğinizi elde etmek için bazı kodlar hazırladım: http://github.com/robertmassaioli/config-files

Tüm dosyaların nereye ait olduğunu söyleyen bir dosyam var ve construc_links programı sadece hepsini oraya koyar. Ne yaptığınızı biliyorsanız ve bazı Haskell kodlarını derleyebiliyorsanız, o zaman gerçekten basit ve kolaydır. Gerçi benim kendi kişisel kullanımım için yapıldığı konusunda uyarıldım.


3
Haskell için +1! Haskel için -1! lol. hayır ama gerçekten.
Derek

Seni duyuyorum. Haskell'i seçtim çünkü öğreniyorum, işe uygun en iyi dil olabilir veya olmayabilir. :)
Robert Massaioli

3

Daha iyi bir çözüm bulana kadar devam ettim ve el ile yaptım. Bu yüzden ne yaptığımı açıklayabilirim.

İlk önce bir yaptım bzr init ~, ama bir sonraki yaptığım şeydi bzr ignore "*". Her şeyi sürüm kontrolü altında tutmak istemediğime karar verdim. Sadece buna değmezdi, özellikle içinde anahtarlar gibi VCC'lerde tutmamanız gereken bazı şeyler olduğunu düşündüğünüzde. Böylece daha sonra bzr addistediğim belirli dosyaları vardı . Ayrıca, istisnalar da ekleyebilirsiniz .bzrignore. Python düzenli ifadeler orada da yararlıdır. Şimdilik oldukça zayıf tutuyorum. Her şey iyi giderse, bütün ekleyebiliriz ~/.configve ~/.gconfde.

Ayrıca bir cron işi olarak çalıştırdığım hızlı bir senaryo yazdım. Dosyaların değişip değişmediğini kontrol eder ve eğer öyleyse otomatik bir taahhütte bulunur:

#! /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

Bunu ilk mesaj attığımda kendi cevabımı seçmiştim, ancak geri almaya karar verdim. 2015'te kesinlikle bu sorunun en iyi cevabı değil.
andrewsomething

2

Dizimin tamamını ~bir Çarşı deposuna çevirdim . Meta verileri depolamak, ana dizindeki dosyalar için bir sorun değildir: her şey aynı hesaba ve gruba aittir ve bzrzaten yürütme bitini depolar.

"İlginç" dosyaları el ile ekledim (örneğin, müzik koleksiyonumun veya firefox önbellekimin sürüm kontrolü altında olmasını istemiyorum), ancak bunu bir komut dosyasıyla otomatikleştirmek istiyorsanız, bunun basit bir çözüm olduğunu düşünüyorum. yapıyor bzr add && bzr ciseçilen dizinleri veya bir çıkışındaki findkomuta sadece iş yapacak.


2

Zsh ve vim dosyalarımı git, github ve farklı depolarda tutuyorum:

Örneğin, zsh için, ".zsh" 'ı yarattım ve içine zshrc ve zshenv'i koydum, ayrıca zshrc'yi ~ / .zshrc ve zshenv' i ~ / .zshenv 'e bağlayan bir betik, böyle bir şey.

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

öyleyse yaparım

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

.vim için neredeyse aynıdır, ancak eklentiler için alt modüller, patojen içeren alt modüller kullanmam dışında, init.sh dosyasına ekledim.

git submodule init
git submodule update

ve bir vim eklentisi eklemek istediğimde

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

Örneğin.

Tamam, yönetmek istediğiniz birkaç noktadan daha fazla noktaya sahipseniz, çok fazla iş yapmanız gerekir; web aktiviteleri…) ya da öylesine. neyse, ben de öyle yaptım, yani sadece iki sentim :).


1

Etekçi gibi otomatik olmayan bir çözüm kullanıyorum (manuel olarak işlemeliyim), ama benim için iyi çalıştı. İstediğim kadar gelişmiş değil ama işe yarıyor.

Stow istediğim her şeyi yapmadığı için GNU Stow'a benzer bir yardımcı program yazdım . Ben buna Yuvaya Stow diyorum . Koştuğunda, "HOME" adında bir dizini arar. Daha sonra bu dizinin altındaki her şeyi alır ve $ HOME'da ilgili yere işaretleyerek gerektiği şekilde dizinler oluşturur. Ayrıca dosya adlarını çevirir - bir dosya '_' ile başlıyorsa, bir '.' İle değiştirilir. Bunu yaptım çünkü nokta dosyalarımı gizlenmediklerinde düzenlemek daha hoş oluyor (varsayılan olarak dizin listelerine bakınız). Ardından, uygulamalarının beklediği isme sahip olacaktı.

Bu yüzden, konfigürasyonum için birkaç git deposuna sahibim. Sadece kişisel olarak düzenlediğim nokta dosyalarını koyarım. Bunun avantajı, başkalarıyla (Emacs yapılandırmam gibi) paylaşabileceğim nokta dosyaları için bir tane ve özel olan başkaları için (örneğin, ssh config, ana bilgisayar adları ve iş için) ssh config'im olabilir. Sembolik bağlantı, evde istifleme özelliğine sahip her şeyi doğru yere koyar, ancak her birinin kaynak kontrolü ayrı olabilir.

Benim için iyi çalıştı. Gerçekten otomatik olarak taahhüt yapacak bir şey ayarlayamamam için hiçbir sebep yok. Veya tüm nokta dosyalarını uygun havuzlara taşıyın ve hala evde istifleme kullanın. Ama bu şekilde işler yaptım.



0

Tüm dotfiles'leri kopyalayarak / home / dizininizdeki "dotfiles" adlı bir klasöre kaynak kontrolünü altında tutmayı seviyorum. Elbette bu, gerektiğinde kopyaları saklamak ve kopyalamak ve ileri geri kopyalamak anlamına gelir ancak bunu kendim için en kolay çözüm olarak buluyorum.


1
kopyaları yönetmek zorunda kalmak yerine, sadece nokta dosyalarına sembolik bağlantılar oluşturamaz mısın?
Ryan,

Bence kesinlikle yapabilirsin!
Derek,

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.