È una buona idea usare git per il controllo della versione del file di configurazione?


18

Uso Gentoo Linux e ha una configurazione piuttosto complessa. La mia domanda è saggio usare git per la versione che controlla i miei file di configurazione?

Ho alcuni repository git a casa mia, suppongo che se metto / home / ** sul mio .gitignore non causeranno problemi.

Aggiornamento di chiarimento:

È un metodo saggio utilizzare git per controllare i file di configurazione a livello di sistema nella directory principale "/"?


@AnthonyGeoghegan Voglio tracciare la mia directory root "/" cosa può portare a conseguenze interessanti in futuro, quindi il thread collegato risponde solo parzialmente alla mia domanda. L'altra parte: è saggio usare git per la versione che controlla i miei file di configurazione ancora senza risposta
atevm

1
@AnthonyGeoghegan grazie. Ho aggiornato la domanda.
atevm,

Risposte:


19

La risposta breve alla tua domanda è .


Non esiterei a raccomandare Git (o qualsiasi altro software di controllo della versione) per tenere traccia dei file di configurazione. Da allora, sono stato più produttivo (in particolare per la configurazione di nuove installazioni) e ho maggiore fiducia nei miei file di configurazione. Con il controllo della versione, ho una registrazione di quali modifiche sono state apportate e il messaggio di commit fornisce il motivo per cui è stata apportata la modifica. Se una modifica ha effetti collaterali indesiderati, posso facilmente rivedere il registro / la cronologia per vedere quale modifica ha causato gli effetti.

Personalmente, diffiderei di tenere traccia di tutti i file nella /directory principale. L'elenco dei percorsi da ignorare potrebbe diventare ampio e ingombrante. Preferisco tenere ogni set logico di file nel proprio repository.

Uso manualmente Git per tenere traccia della mia configurazione personale / file di avvio, ad es. Configurazione di Vim, funzioni di Bash, alias, ecc. - simile all'approccio elencato in Come tenere traccia di $ HOME con git . Tengo ogni set di file nel proprio repository e utilizzo i collegamenti simbolici alla home directory.

Per i file di configurazione del sistema , utilizzo Git con Etckeeper per tenere traccia dei file nella mia /etcdirectory.

svantaggi

Un problema di cui diffidare è se i file tracciati includono collegamenti reali . Quando Git viene utilizzato per estrarre file o modificare in altro modo l'albero di lavoro, scollega i file e li ricrea . Vedi Git, Dotfile e Hardlink per una spiegazione più completa.

etckeeper

Etckeeper può essere utilizzato per mantenere una cronologia completa delle modifiche apportate a / etc. Tiene traccia dei metadati dei file che normalmente i sistemi di controllo delle revisioni non supportano, ma per cui è importante /etc, come le autorizzazioni di /etc/shadow.

Si collega a gestori di pacchetti come apt e yum e (nella sua configurazione predefinita), esegue pre e post-installazione in modo da tenere /etctraccia di tutte le modifiche .

Se un pacchetto viene installato o rimosso, tutte le modifiche non confermate in / etc verranno eseguite prima dell'operazione del pacchetto in modo che vi siano due commit:

  1. "Salvataggio delle modifiche non confermate in / etc prima dell'esecuzione di yum"
  2. "Commit delle modifiche in / etc dopo yum run"

L'ho usato con le distribuzioni basate su Debian e Red Hat e so che supporta la gestione dei pacchetti Arch. Non posso dire quanta automazione aggiungerebbe a un sistema Gentoo ma è disponibile un pacchetto per questo .

Supporta anche il push dei file di configurazione in un repository remoto (che, ovviamente, dovrebbe essere privato).

Configurazione

Dopo aver installato il pacchetto potrebbe essere necessario configurarlo ( /etc/etckeeper/etckeeper.conf), ad es. Sui sistemi Ubuntu il sistema di controllo della versione predefinito viene cambiato da Git a Bazaar. Ti potrebbe piacere anche disabilitare i commit automatici giornalieri .

Automommit giornalieri

Le modifiche possono essere salvate automaticamente da un cron job giornaliero . Questo può essere fastidioso poiché il repository può essere ingombro di più messaggi di commit automatici.

Ho decommentato la riga appropriata in /etc/etckeeper/etckeeper.conf:

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

Ignora alcuni file

Modifica /etc/.gitignoreper specificare tutti i file che non devono essere monitorati.

Prima corsa

Dopo la configurazione, eseguire i seguenti comandi:

sudo etckeeper init
sudo etckeeper commit "Initial commit"

Se la directory corrente è etc, è possibile eseguire gitcomandi regolari , ad es.

sudo git status
sudo git log

1
Caspita, è stato molto utile e dettagliato ... grazie :)
atevm,

Solo per aggiornare una risposta molto ben scritta: etckeeperdurante il commit giornaliero controllerà prima se /etcè "impuro", cioè ha file non impegnati. In caso contrario, non si impegnerà. Quindi, se il tuo registro di commit è pieno di commit giornalieri, è probabile che ci siano file che cambiano ogni giorno e che non hai aggiunto al .*ignorefile :-)
pepoluan

Inoltre, su Ubuntu ha questa fastidiosa tendenza a eseguire immediatamente un bzr init--__-- ... consiglio di eseguirlo sempreetckeeper uninit -f dopo l'installazione.
pepoluan,

Si noti che ovviamente etckeeper non è più ospitato su github. Ora usano il loro sistema sulla loro homepage. Probabilmente un po 'di avversione M $ dalla parte dell'autore. Personalmente trovo che una decisione sfortunata come ora non puoi facilmente segnalare problemi e non puoi vedere quanto sia popolare il progetto.
Michael Härtl,

Grazie @ MichaelHärtl ho rimosso il link obsoleto al repository GitHub.
Anthony G - giustizia per Monica,

3

Uso git per tracciare aree specifiche della mia home directory. Personalmente, non vorrei percorrere il percorso di tracciamento della directory principale, ma devo dire che ammiro la tua ambizione. :)

Forse questa raccolta di esperienze potrebbe darti un'idea migliore di cosa potresti fare:

effetti dell'inizializzazione del repository git sulla directory root di linux 3 :)

Ci scusiamo per una "risposta", invece di lanciare il link in un commento; tuttavia, non abbastanza rappresentante, ma ha voluto entrare.

modificare

Wow! Risposta molto bella di @AnthonyGeoghegan. Credo che questa non sia una lotta tanto come l'avevo immaginata inizialmente.


0

Uso anche gitper archiviare e mantenere il mio dotfiles, ma in a git bare repository. Una guida dettagliata può essere trovata qui . Sto usando due repository, uno per i miei file dot dot myconfe uno per i file dot root rootconf.

Inoltre, puoi utilizzare entrambe le configurazioni su molte macchine, diverse distribuzioni Linux o macchine virtuali: basta creare un nuovo ramo per una configurazione distinta. Quindi eviti di confondere il codice nello stesso file (ad es. .bash_alias): Nessun fastidioso se controllare più la macchina corrente; nessun collegamento necessario!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.