Git yapılandırma dosyası sürüm kontrolü için kullanmak iyi bir fikir mi?


18

Gentoo Linux kullanıyorum ve oldukça karmaşık bir yapılandırmaya sahip. Sorum benim yapılandırma dosyalarımı kontrol sürümü için git kullanmak akıllıca mı?

Evimde bazı git depoları var, sanırım .gitignore'uma / home / ** koyarsam sorun yaratmazlar.

Açıklama güncellemesi:

"/" Kök dizinindeki sistem düzeyindeki yapılandırma dosyalarımı sürüm kontrolü için git kullanmak akıllıca bir yöntem mi?


@AnthonyGeoghegan Ben "/" kök dizin izlemek istiyorum istiyorum gelecekte ilginç sonuçlara yol açabilir böylece bağlantılı konu benim soru sadece kısmen cevap. Diğer bölüm: git benim yapılandırma dosyaları hala cevapsız kontrol sürümü için git akıllıca
atevm

1
@AnthonyGeoghegan teşekkürler. Soruyu güncelledim.
atevm

Yanıtlar:


19

Sorunuzun kısa cevabı Evet .


Yapılandırma dosyalarını takip etmek için Git'i (veya başka bir sürüm kontrol yazılımını) tavsiye etmekten çekinmeyin. Bunu yaptığımdan beri daha üretken oldum (özellikle yeni kurulumları yapılandırmak için) ve yapılandırma dosyalarına daha fazla güveniyorum. Sürüm kontrolü ile, hangi değişikliklerin yapıldığına dair bir kaydım var ve taahhüt mesajı değişikliğin nedenini ortaya koyuyor. Bir değişikliğin istenmeyen yan etkileri varsa, hangi değişikliğin etkilere neden olduğunu görmek için günlük / geçmişi kolayca inceleyebilirim.

Şahsen, /kök dizinin altındaki tüm dosyaları izlemeye karşı dikkatli olurum . Yoksayılacak yolların listesi büyük ve hantal olabilir. Her mantıksal dosya kümesini kendi havuzunda tutmayı tercih ederim.

Git'i, $ HOME ile git nasıl takip edilir? Bölümünde listelenen yaklaşıma benzer şekilde, kişisel yapılandırma / başlatma dosyalarımı, örneğin Vim yapılandırması, Bash işlevleri, diğer adları vb . Her dosya kümesini kendi havuzunda saklıyorum ve ana dizine sembolik bağlantılar kullanıyorum.

İçin sistem yapılandırma dosyaları, beraber Git kullanmak Etckeeper benim dosyaların takip etmek için /etcdizine.

Dezavantajları

Dikkat edilmesi gereken bir konu, izlenen dosyaların sabit bağlantılar içermesidir . Git, dosyaları teslim almak veya çalışma ağacını başka bir şekilde değiştirmek için kullanıldığında, dosyaların bağlantılarını kaldırır ve sonra bunları yeniden oluşturur . Daha kapsamlı bir açıklama için Git, Dotfiles ve Hardlinks'e bakın.

Etckeeper

Etckeeper, / etc üzerinde yapılan değişikliklerin tam geçmişini tutmak için kullanılabilir. Revizyon kontrol sistemlerinin normalde desteklemediği dosya meta verilerini izler, ancak bunun /etcizinleri gibi önemlidir /etc/shadow.

Apt ve yum gibi paket yöneticilerine bağlanır ve (varsayılan yapılandırmasında), kurulum öncesi ve sonrası çalışır, böylece tüm değişiklikler /etctakip edilir.

Bir paket kurulur veya kaldırılırsa, / etc dosyasındaki tüm taahhüt edilmemiş değişiklikler paket işleminden önce gerçekleştirilecek ve böylece iki işlem gerçekleştirilecektir:

  1. “Yum çalıştırılmadan önce / etc'de kaydedilmemiş değişiklikleri kaydetme”
  2. “/ Run değişiklikleri yum çalıştırdıktan sonra taahhüt”

Debian ve Red Hat tabanlı dağıtımlarla kullandım ve Arch paket yönetimini desteklediğini biliyorum. Bir Gentoo sistemine ne kadar otomasyon katacağını söyleyemem ama bunun için bir paket var .

Ayrıca, yapılandırma dosyalarını uzak bir depoya aktarmayı da destekler (elbette özel olmalıdır).

Yapılandırma

Paketi kurduktan sonra yapılandırmanız gerekebilir ( /etc/etckeeper/etckeeper.conf), örneğin Ubuntu sistemlerinde varsayılan sürüm kontrol sistemi Git'ten Çarşı'ya değiştirilir. Günlük otomatik taahhütleri de devre dışı bırakmak isteyebilirsiniz .

Günlük otomatik taahhütler

Değişiklikler günlük cron işi tarafından otomatik olarak yapılabilir . Depo, birden fazla otomatikleştirilmiş taahhüt mesajı ile darmadağın olabileceğinden bu can sıkıcı olabilir.

Ben uygun satırında uncomment /etc/etckeeper/etckeeper.conf:

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

Belirli dosyaları yoksay

İzlenmemesi /etc/.gitignoregereken dosyaları belirtmek için düzenleyin.

İlk çalıştırma

Yapılandırdıktan sonra aşağıdaki komutları çalıştırın:

sudo etckeeper init
sudo etckeeper commit "Initial commit"

Geçerli dizininiz etcnormal gitkomutlar çalıştırabilir , örn.

sudo git status
sudo git log

1
Vay be, çok yararlı ve ayrıntılı ... teşekkür ederim :)
atevm

Sadece çok iyi yazılmış bir cevap güncellemek için : etckeepergünlük taahhüt sırasında aslında /etc"kirli" olup olmadığını kontrol eder , yani, taahhüt edilmemiş dosyaları var. Değilse, taahhüt olmaz. Bu nedenle, taahhüt günlüğünüz günlük taahhütlerle doluysa, günlük olarak değişen dosyalara eklemediğiniz .*ignoredosyalar vardır :-)
pepoluan

Ayrıca, Ubuntu üzerinde hemen bir bzr init--__-- ... bu sıkıcı bir eğilim var kurulumdan sonra her zaman çalıştırmak öneririz etckeeper uninit -f.
pepoluan

Etckeeper'ın artık github'da barındırılmadığı açıktır. Artık ana sayfalarında kendi sistemlerini kullanıyorlar. Muhtemelen yazarın tarafında bazı M $ kaçınma. Şahsen talihsiz bir kararın şu anda olduğu gibi sorunları kolayca raporlayamayacağınızı ve projenin ne kadar popüler olduğunu göremiyorum.
Michael Härtl

Teşekkürler @ MichaelHärtl GitHub repo bağlantısının eski bağlantısını kaldırdım.
Anthony Geoghegan

3

Giriş dizinimin belirli alanlarını izlemek için git'i kullanıyorum. Şahsen, kök dizini izleme yolunda ilerlemezdim, ama tutkunuza hayran olduğumu söylemeliyim. :)

Belki de bu deneyimler koleksiyonu size neler yaşayabileceğiniz konusunda daha iyi bir fikir verebilir:

git deposunun başlatılmasının linux root directory 3 üzerindeki etkileri :)

Sadece bir yorumda link atmak yerine, "cevap" için özür dileriz; Ancak, yeterli temsilcisi değil, ama chime istedim.

Düzenle

Vaov! @AnthonyGeoghegan tarafından çok güzel bir cevap. Bunun başlangıçta tahmin ettiğim kadar büyük bir mücadele olmadığına inanıyorum.


0

Ben de gitsaklamak ve korumak için kullanıyorum dotfiles, ama bir git bare repository. Ayrıntılı bir rehber burada bulunabilir . İki depo kullanıyorum, biri kullanıcı adı verilen dotfiles için, myconfdiğeri de root adlı dotfiles için rootconf.

Ayrıca, her iki yapılandırmayı da birçok makinede, farklı Linux Dağıtımlarında veya Sanal Makinelerde kullanabilirsiniz: Farklı bir yapılandırma için yeni bir dal oluşturun. Sonra aynı dosyada kod karıştırmaktan kaçının (örn. .bash_alias): Mevcut makineyi kontrol etmek için can sıkıcı bir durum yok; hiçbir bağlantı gerekli!

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.