İzleme ayarları için / (root) adresinde Git repo oluşturma


28

Bu yüzden Git'i çoğunlukla geliştirme amacıyla kullanıyorum, ancak Ubuntu kurulumumdaki ayar dosyalarının sürümlerini depolamak için kullanabileceğimi fark ettim.

Önerilen kurulumum:

  • git init adresinde bir repo /

  • Bir ekleme .gitignorede /ben izlemek istediğiniz belirli ayarlar dışında bu yoksayar herhangi bir dosya.

    Örneğin, şunları .gitignoreiçerebilir ( kaynak ):

    ## Ignore everything...
    *
    
    ## Except...
    !/etc/default/tlp
    !/etc/crontab
    
  • Bu düşük seviye ayarlarını ne zaman değiştirsem, onları izleyebilirim.

Bu kurulumda yanlış gidebilecek bir şey var mı? Çekirdeğin daima /yalnızca belirli klasörlere sahip olması gerekir mi? Herhangi bir uygulamanın işleyişini bozar mı?


Belki de düşünmelisiniz ~yerine ana dizin ayarları dosyaları /dosyaları
Michael Durrant

1
Eski grex SunOS kamu sunucusu tüm rc dosyalarına sahipti ve bazı eski kaynak kontrollerinde başka ne olduğunu bilen (SCCS veya RCS olduğundan emin değil, kesinlikle CVS'den daha eski). Bununla ilgili bir sorun görmüyorum.
Joshua

@Mike Durrant: /etc/crontabKişisel dizüstü bilgisayarımda olduğu gibi şeyler kesinlikle benim, ama ne demek istediğini anlıyorum.
Abhishek Divekar

7
Yedekleyin etckeeperve kullanın .
Monica’yı eski durumuna getirin - M. Schröder

Yanlışlıkla / dev / sda veya benzeri bir şey / taahhütte bulunmamaya dikkat edin: D
quetzalcoatl

Yanıtlar:


37

Her iki sorunuzun cevabı hayır, istediğiniz herhangi bir dizini oluşturabilirsiniz /. Olabilecek tek şey, sanırım uzay yolu ile ilgili bazı izin sorunları.

Ancak .gitdizini başka bir yerde saklamak daha iyidir;

git --git-dir=/home/user/backup-root --work-tree=/

Buradan oku .


5
Çok ilginç, aslında bunu gittiğinizde yapabileceğinizi bilmiyordum! Önerin için teşekkürler.
Abhishek Divekar

Bu sadece / home / user btw altındaki dosyaları ayarlayabilmenizi sağlayan aynı özelliktir. Kabuk takma adı eklemek ayrıca bunu çok uygun kılar.
Daniel Jour

19

Aslında, muhtemelen sürüm kontrolü konfigürasyon dosyalarını istediğiniz /etc/(kök dizinin girdileri umurumda değil /özellikle dizinleri gibi procya usrya biniçinde /yüklemek isteyebilirsiniz) etckeeperpaketi

Ayrıca bazı alt dizinleri de kontrol edebilirsiniz ( /usr/share/applications/bahsettiğiniz gibi ).

Ancak, Ubuntu paket yönetim sistemi ile uğraşmayın . Belki de çoğunlukla kurulu paketlerin mevcut listesini yedeklemelisiniz.


1
Aslında /usr/share/applicationsara sıra uğraştığım dosyalardaki dosyaları önemsiyorum .
Abhishek Divekar

6

Bir git repo'yu kullanmak / iyi çalışır, ancak hepsine cevap vereceği gibi problemlerle daha düşük bir git repoya sahip olduğunuzu fark etmenizi zorlaştırır.

Not: 'Debsums' kullanmak daha az iş ve muhtemelen daha kullanışlıdır

sudo apt-get install debsums

Bu, ikili dosyalardaki veya yapılandırma dosyalarındaki değişiklikleri (çoğu) hızlıca belirlemenizi sağlar.

Yüklü paketlerden bir örnek olarak, yukarı akış paketlerinden farklı olanları burada bulabilirsiniz.

$ sudo debsums -c
/boot/vmlinuz-4.10.0-19-generic

Ayrıca değiştirilmiş yapılandırma dosyalarının bir listesini de alabilirsiniz:

$ sudo debsums -ec
debsums: missing file /etc/default/chromium-browser (from chromium-browser package)
 /etc/libvirt/libvirt.conf
 <snip>

Krom tarayıcısının uygun şekilde paketlenmediğini ve paket dosya listesinde bulunmayan bir dosyada bulunduğunu unutmayın.

/var/lib/dpkg/info/chromium-browser.list

Bu, dpkg verilerini kullanır ve büyük / / bir dizini ve iş akışını engeller.


“Herkes için cevap vereceği gibi sorunlarla ilgili olarak daha düşük bir seviyeye gideceğiniz zaman fark etmeyi zorlaştırması dışında”. Biraz daha? .Gitignore sadece birkaç dosyayı izlerse nasıl bir soruna neden olabileceğini anlamıyorum.
Abhishek Divekar

2
Sana söz hakkından başka git repo oluştururken @abhidivekar OP söylediğini inanmak /home/$USERardından .gityılında /repo için verilen herhangi git komutu için cevap verecektir /home$USERyerine o [için .girdosyanın] /home/$USER...
George Udosen

Ah, anlıyorum. Sanırım o zaman ayrı bir klasörde tutmalıyım. Veya /
Abhishek Divekar

1
@George Ağacın üstündeki .gitdizine erişmek için , sadece cdo .gitklasöre ya da bir klasörü olmayan bir alt dizinine (normal bir dizin)
cat

2
@ abhidivekar Doğru, faydalar sorunları ağır basarsa ancak bu beklenmeyen bir davranış ise, sorun değildir. Engelleyici değil, sadece bir uyarı.
gdahlm

5

Bu yüzden diğer cevapları araştırdım ve benim için işe yarayan bir prosedür buldum:

  • Bir Make .gitignorede /. Git'in alt klasörlerdeki beyaz liste dosyalarını işleme biçimi nedeniyle, düşündüğümden çok daha karmaşıktı. Ben kullanılan bu ve bu bağlantı bana yardım etmek.

    ## Source: /programming//a/29932318/4900327
    ## Comments are on new lines because trailing whitespace matters in Git (stackoverflow.com/a/8865858/4900327)
    
    # Blacklist all files, folders and subfolders in the same directory as the .gitignore file.
    /*
    # Do not blacklist the .gitignore file.
    !.gitignore
    
    # Now whitelist certain files.
    # For files in subfolders, some hoops must be jumped through (stackoverflow.com/a/16318111/4900327):
    
    ## Whitelisting files in /etc/ folder:
    # Whitelist the /etc/ folder (the git repo folder is whitelisted always)
    !/etc/
    # Blacklist all files in /etc/ folder.
    /etc/*
    # Whitelist specific file(s) in /etc/ folder.
    !/etc/crontab
    
    
    ## Whitelisting files in /etc/default/ folder:
    # /etc/ is already whitelisted, and its contents blacklisted.
    # Whitelist /etc/default/ folder.
    !/etc/default/
    # Blacklist all files in /etc/default/ folder.
    /etc/default/*
    # Whitelist specific file(s) in /etc/default/ folder.
    !/etc/default/tlp
    
    
    ## Whitelisting files in /home/USERNAME/ folder:
    # Whitelist /home/ folder.
    !/home/
    # Blacklist all files in /home/ folder.
    /home/*
    # Whitelist /home/USERNAME/ folder.
    !/home/USERNAME/
    # Blacklist all files in /home/USERNAME/ folder.
    /home/USERNAME/*
    # Whitelist specific file(s) in /home/USERNAME/ folder
    !/home/USERNAME/.bash_profile
    !/home/USERNAME/.bashrc
    
  • Git /ve koş git init .Şimdiye kadar, @Ravexina tarafından belirtilen bağlantıyı.git/ kullanarak klasörü başka bir dizinde depolayamadım .

  • Çalıştırın git add .ve git status. Git'in izlediği tüm ayar dosyalarının bir listesini almalısınız.

    If you used the above `.gitignore`, it should track `/etc/crontab`, `/etc/default/tlp`, `/home/USERNAME/.bash_profile`, and `/home/USERNAME/.bashrc`.
    
  • İle taahhüt git commit -m "Initial settings files".

  • Değişiklikleri git log -p -- path/to/fileveya ile izleyebilirsiniz gitk path/to/file. Bu konuda daha fazla tartışma burada .


2

Hassas depoları /etc/shadowgit deposunda saklayacaksanız , tüm kullanıcılar tarafından okunamadığından emin olmalısınız, çünkü varsayılan olarak nesneler izin 444alacaktır ve dizinler izin alacaktır 0755. Sen izni değiştirebilecek .gitiçin 700ya koymak/root

Başka bir sorun ise git, dosya sistemi gibi dosya izinlerini saklamaz ve genişletilmiş öznitelikleri saklamaz. Dosyalarda, git yalnızca çalıştırılabilir olup olmadığını saklar. Dolayısıyla, silinen bir dosyayı geri yüklemek istiyorsanız, sahibi ve grubu root olacaktır (root olarak yapıyorsanız) ve izni 644veya olacaktır 755. Sahibi kök olmayan hizmetlerin yapılandırma dosyaları için sorunlu olabilir.

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.