Erstellen eines Git-Repos unter / (root) für Tracking-Einstellungen?

28

Daher verwende ich Git hauptsächlich für Entwicklungszwecke, habe jedoch festgestellt, dass ich damit Versionen der Einstellungsdateien speichern kann, die ich in meiner Ubuntu-Installation habe.

Mein vorgeschlagener Aufbau ist:

  • git init ein Repo bei /

  • Add a .gitignorean , /dass ignoriert alle Dateien außer spezifischen Einstellungen , die ich verfolgen möchten.

    Zum Beispiel .gitignorekönnte das ( source ) enthalten:

    ## Ignore everything...
    *
    
    ## Except...
    !/etc/default/tlp
    !/etc/crontab
    
  • Wenn ich diese Einstellungen auf niedriger Ebene ändere, kann ich sie nachverfolgen.

Kann bei diesem Setup etwas schief gehen? Muss der Kernel immer /nur bestimmte Ordner haben? Wird es die Funktionsweise von Anwendungen beeinträchtigen?

Abhishek Divekar
quelle
Vielleicht sollten Sie die ~Einstellungsdateien Ihres Home-Verzeichnisses anstelle von /Dateien berücksichtigen
Michael Durrant
1
Der alte öffentliche grex SunOS-Server hatte alle seine rc-Dateien und wer weiß noch was in irgendeiner alten Quellcodeverwaltung (nicht sicher, ob es SCCS oder RCS war, aber definitiv älter als CVS). Ich sehe kein Problem damit.
Joshua
@ Mike Durrant: Sachen wie /etc/crontabauf meinem persönlichen Laptop gehören definitiv mir, aber ich verstehe, was du meinst.
Abhishek Divekar
7
Verwenden etckeeperund erstellen Sie Backups.
Setzen Sie Monica - M. Schröder
Sei nur vorsichtig, um nicht versehentlich / commit ie / dev / sda oder ähnliches zu inszenieren: D
quetzalcoatl

Antworten:

37

Die Antwort auf beide Fragen lautet Nein. Sie können ein beliebiges Verzeichnis im erstellen /. Das einzige, was passieren könnte, sind einige Berechtigungsprobleme mit einigen räumlichen Pfaden, denke ich.

Es ist jedoch besser, das .gitVerzeichnis an einem anderen Ort zu speichern.

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

Lesen Sie hier .

Ravexina
quelle
5
Sehr interessant, ich wusste gar nicht, dass du das in git machen kannst! Danke für den Vorschlag.
Abhishek Divekar
Das ist die gleiche Funktion, mit der Sie nur Einstellungsdateien unter / home / user btw verfolgen können. Das Hinzufügen eines Shell-Alias ​​macht dies zusätzlich sehr praktisch.
Daniel Jour
19

Eigentlich möchten Sie wahrscheinlich Konfigurationsdateien zur Versionskontrolle in /etc/(die Einträge des Stammverzeichnisses /, insbesondere Verzeichnisse wie procoder usroder binin, interessieren Sie nicht /), so dass Sie das Paket möglicherweise installieren möchtenetckeeper

Sie können auch einige ausgewählte Unterverzeichnisse (wie /usr/share/applications/die von Ihnen erwähnten) versionieren .

Verwirren Sie sich jedoch nicht mit dem Ubuntu- Paketverwaltungssystem . Vielleicht sollten Sie meistens die aktuelle Liste der installierten Pakete sichern.

Basile Starynkevitch
quelle
1
Ich kümmere mich tatsächlich um Dateien, /usr/share/applicationswenn ich gelegentlich mit ihnen herumspiele.
Abhishek Divekar
6

Ein Git-Repo in / zu haben, funktioniert einwandfrei, mit der Ausnahme, dass es schwierig ist, es zu bemerken, wenn Sie ein Git-Repo mit einem niedrigeren Level haben, da es für alle Probleme eine Antwort gibt.

Hinweis: Es ist weniger arbeitsaufwendig und wahrscheinlich nützlicher, 'debsums' zu verwenden.

sudo apt-get install debsums

So können Sie (die meisten) Änderungen in Binärdateien oder Konfigurationsdateien schnell erkennen.

Als Beispiel für die installierten Pakete sind hier diejenigen aufgeführt, die sich von den Upstream-Paketen unterscheiden.

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

Und Sie können eine Liste der geänderten Konfigurationsdateien erhalten mit:

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

Beachten Sie, dass der Chrom-Browser nicht ordnungsgemäß verpackt ist und eine Datei in der Liste der nicht vorhandenen Paketdateien aufgeführt ist.

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

Dies verwendet die dpkg-Daten und vermeidet ein großes /.git-Verzeichnis und einen Workflow.

gdahlm
quelle
Könnten Sie erklären, "mit der Ausnahme, dass es schwierig ist, es zu bemerken, wenn Sie ein schlechtes Git-Repo mit Problemen haben, da es für alle Probleme eine Antwort gibt." ein bisschen mehr? Ich verstehe nicht, wie es ein Problem verursachen könnte, wenn der .gitignore nur einige Dateien verfolgt.
Abhishek Divekar
2
Ich glaube, @abhidivekar OP sagt, wenn Sie ein anderes Git-Repo in say erstellen, /home/$USERwird das .gitin /für jeden Git-Befehl antworten, der für das Repo in /home$USERund nicht für das [ .girfile] in /home/$USER...
George Udosen
Ah ich sehe. Ich denke, ich sollte es dann einfach in einem separaten Ordner aufbewahren. Oder /
Abhishek Divekar
1
@ George Um auf das .gitVerzeichnis weiter oben im Baum zuzugreifen , müssen Sie nur cddarauf zugreifen oder auf ein Unterverzeichnis davon, das keinen .gitOrdner enthält (ein normales Verzeichnis)
cat
2
@abhidivekar Richtig, es ist kein Problem, wenn die Vorteile die Probleme überwiegen, aber es ist ein unerwartetes Verhalten. Kein Blocker, nur eine Einschränkung.
Gdahlm
5

Also habe ich die anderen Antworten untersucht und ein Verfahren gefunden, das für mich funktioniert:

  • Machen Sie eine .gitignorean /. Das war viel komplizierter, als ich dachte, weil Git mit Whitelisting-Dateien in Unterordnern umgeht. Ich habe diesen und diesen Link benutzt, um mir zu helfen.

    ## Source: https://stackoverflow.com/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
    
  • Gehen Sie zu /und führen Sie es aus git init .Bisher konnte ich den .git/Ordner nicht über den von @Ravexina erwähnten Link in einem anderen Verzeichnis speichern .

  • Führen Sie git add .und aus git status. Sie sollten eine Liste aller Einstellungsdateien erhalten, die Git verfolgt.

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

  • Sie können Änderungen mit git log -p -- path/to/fileoder verfolgen gitk path/to/file. Mehr Diskussion dazu hier .

Abhishek Divekar
quelle
2

Wenn Sie vertrauliche Dinge (wie /etc/shadow) im Git-Repo speichern möchten, sollten Sie sicherstellen, dass diese nicht von allen Benutzern gelesen werden können, da die Objekte standardmäßig die Berechtigung haben 444und Verzeichnisse die Berechtigung haben 0755. Sie können die Erlaubnis von .gitzu ändern 700oder es in setzen/root

Ein weiteres Problem ist, dass git keine Dateiberechtigungen wie das Dateisystem und keine erweiterten Attribute speichert. Bei Dateien speichert git nur, ob sie ausführbar sind. Wenn Sie also eine gelöschte Datei wiederherstellen möchten, sind der Eigentümer und die Gruppe root (wenn Sie sie als root ausführen), und die Berechtigung lautet 644oder 755. Dies kann bei Konfigurationsdateien von Diensten problematisch sein, deren Eigentümer nicht root ist.

yt7b97q-
quelle