Ich speichere meine Konfigurationsdateien ( ~/.bashrc
, ~/.emacs
, ~/emacs
usw.) in git. Die Art und Weise, wie ich dies konfigurierte, bestand einfach darin, ein Git-Repository in das Home-Verzeichnis einzufügen.
Ich fand, dass dieser Ansatz einige Probleme hat:
git gui
dauert ewig, weil es rekursiv das gesamte Home-Verzeichnis scannt. ~/projects/foo
, vergiss es hat noch kein Git Repo initialisiert und führe git add bar.xyz
in aus Das Verzeichnis foo
. Dies führt dazu, dass eine Datei zum Config Repo hinzugefügt wird. Ich bin nicht sicher, ob es sinnvoll ist, git-Repositories in einem Verzeichnis zu verschachteln, das bereits ein git-Repository besitzt, obwohl ich noch keine grundsätzlichen Probleme damit habe.
Gibt es einen besseren Ansatz oder ist dies ein Standard, in dem Leute lokale Konfigurationsdateien in Git speichern?
Ich verwende ein Git Repo, um die dotfiles zu verwalten. Es enthält:
dotfiles
, das die tatsächlichen dotfiles / dotdirs enthält, die ich verfolgen möchte. ein Shell-Skript, um eine symbolische Verknüpfung von dotfiles/.*
in $HOME
zu erstellen, wie
Das Skript wird manuell ausgeführt, nachdem ich etwas in dotfiles
hinzugefügt habe (normalerweise durch Verschieben einer Punktdatei in Repo) oder in ein neues und sauberes $HOME
.
Das Repo kann sich irgendwo befinden. Ich habe einen Klon in $HOME
auf jedem Host, den ich benutze.
Auf diese Weise habe ich einen viel kleineren und nicht verschachtelten Arbeitsbaum, um die Punktdateien selektiv zu verfolgen.
ps. Vielleicht möchten Sie Einträge wie dotfiles/.config/*
zu .gitignore
hinzufügen, es enthält viele Dateien, die ich nicht verfolgen möchte.
Ich halte meine dotfiles in einem Git-Repository wie du - mein Home-Verzeichnis ist ein Git-Repository.
git gui
: Ich benutze es selten, daher bin ich mir nicht sicher, wie seine Leistung von vielen nicht verfolgten Dateien beeinflusst wird. Allerdings habe ich eine ~/.gitignore
-Datei, die einfach *
enthält. Vielleicht wird das Ignorieren von% git gui
für dich beschleunigen.
Zufälliges Hinzufügen von Dateien: Durch das Erstellen einer ~/.gitignore
-Datei, die einfach *
enthält, wird auch das Problem des versehentlichen Hinzufügens einer Datei zu Ihrem dotfiles-Repository gelöst, wenn Sie vergessen, ein neues Projekt-Repository zu initialisieren um -f
zu verwenden, wenn Sie die Datei wirklich hinzufügen möchten.
Ich hatte nie ein Problem mit verschachtelten Repositories.
Einige Anmerkungen:
Der Hauptgrund, warum ich meine ~/.gitignore
auf *
setze, ist, dass git status
nicht jede Datei in meinem Home-Verzeichnis anzeigt. Es zwingt mich, die ganze Zeit git add -f
zu benutzen, was ein bisschen nervig ist, aber nicht so groß.
Gewöhnen Sie sich an, git clean -dx
anstelle von git clean -dxf
zu verwenden. Sie müssen daran denken, git config clean.requireForce false
in neuen Projekt-Repositories auszuführen, aber es verhindert, dass Sie versehentlich alle Dateien in Ihrem Home-Verzeichnis löschen, wenn Sie sich nicht in dem Verzeichnis befinden, in dem Sie sich befinden.
Git entscheidet sich manchmal, die Dateiberechtigungen zurückzusetzen. Dies kann schlecht sein, wenn Sie vertrauliche Dateien ( chmod og-rwx
) in Ihrem Git-Repository aufbewahren möchten. Ich handle das mit einem post-checkout
Hook, der die Berechtigungen bestimmter Dateien und Verzeichnisse behebt (z. B. ~/.ssh/authorized_keys
).