Effiziente Möglichkeit, ein Git-Repository für lokale Konfigurationsdateien zu verwalten

8

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.
  • Ich habe manchmal versehentlich Dateien zum Config Repo hinzugefügt, die zu einem neuen Repo gehen sollten (ich erstelle ein neues Projekt, sagen wir in ~/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?

    
Jan Wrobel 13.06.2013, 07:59
quelle

2 Antworten

3

Ich verwende ein Git Repo, um die dotfiles zu verwalten. Es enthält:

  1. ein Verzeichnis dotfiles , das die tatsächlichen dotfiles / dotdirs enthält, die ich verfolgen möchte.
  2. ein Shell-Skript, um eine symbolische Verknüpfung von dotfiles/.* in $HOME zu erstellen, wie

    %Vor%

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.

    
Jokester 13.06.2013 10:04
quelle
3

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 ).

Richard Hansen 14.06.2013 03:12
quelle

Tags und Links