2015-08-05 2 views
7

Ich habe eine Reihe von "dot" -Dateien in meinem Home-Verzeichnis, die ich mit git verfolgen möchte - z. .pryrc, .zshrc usw. Ich möchte ein Remote-Repository für diese Dateien haben, damit a) es eine einfache Möglichkeit gibt, meine Konfigurationseinstellungen wiederherzustellen, sollte ich meinen Rechner aus irgendeinem Grund verlieren; und b) um alle an den Dateien vorgenommenen Änderungen sicher zu verfolgen, falls ich beim Konfigurieren von Änderungen etwas vermassle.Wie verfolge ich "Punkt" -Konfigurationsdateien in meinem Home-Verzeichnis mit git?

Ich habe zunächst ein Git-Repository im Home-Verzeichnis eingerichtet, um sie zu verfolgen, wobei eine .gitignore-Datei so konfiguriert ist, dass jede Datei mit Ausnahme bestimmter, auf der weißen Liste liegender Dateinamen ignoriert wird. Allerdings habe ich erkannt, dass ich nicht verrückt bin, ein Git-Repository in meinem Home-Verzeichnis zu haben, und es gibt auch die zusätzliche Ablenkung, den Zweignamen "Master" in meinem Terminal-Fenster zu sehen. Ich verwende ZSH mit Einstellungen, um den Git-Zweig in der Eingabeaufforderung anzuzeigen, und es hat sich als überraschend und verwirrend herausgestellt, dass ich in einem Git-Repository bin, während ich in Verzeichnissen navigiere, von denen ich kein Repository erwarte.

Ich habe versucht, ein Konfigurationsverzeichnis unter dem Home-Ordner zu erstellen, es ein Git-Repository zu initialisieren und Symlinks zu den gewünschten Dateien zu generieren. Allerdings habe ich nach dem Hinzufügen und Festschreiben alles, dass der Remote-Zweig zeigte nur den Link, nicht den tatsächlichen Inhalt der Datei.

Was ist der beste Weg, dies zu erreichen?

Antwort

5

Dies ist, wie ich es herausgefunden:

Zuerst habe ich ein Verzeichnis erstellt ~/repositories/configurations/, die ich das Git Repository Hause verwenden. Nachdem ich zu diesem Verzeichnis navigiert habe, starte ich wie gewohnt git init.

Als nächstes habe ich eine .gitignore Datei erstellt, die so konfiguriert ist, dass alle Dateien außer denen auf einer Whitelist ignoriert werden. (Beachten Sie, dass Sie dies später im Prozess vor dem Festschreiben tun können, aber wenn Sie git status ausführen, bevor Sie das .gitignore einrichten, werden Sie VIELE unverschlüsselte Dateien sehen).

# ignore everything 
* 

# except these whitelisted files: 
!.gitignore 
!.pryrc 
!.zshrc 
!.bashrc 
!.bash_profile 
!.bash_login 

zeigen dann die git-Repository in ein anderes Arbeitsverzeichnis:

git config core.worktree "/User/username"

Lauf git status jetzt zeigt:

Untracked files: 
    (use "git add <file>..." to include in what will be committed) 

    ../../.bash_login 
    ../../.bash_profile 
    ../../.bashrc 
    ../../.gitignore 
    ../../.pryrc 
    ../../.zshrc 

Von hier aus können wir git add ~/.bash_profile ~/.bashrc ~/.pryrc ~/.zshrc und begehen. Das Einrichten und Weiterleiten an ein Remote-Repository ist Standard.

Ein Hinweis - Ich entschied, dass ich eine lokale README.md Datei wollte, um den Zweck des Verzeichnisses und wie es konfiguriert wurde, etc. zu dokumentieren. Ich wollte diese Datei nicht in meinem privaten Ordner, wo es sein würde Kontext. Nach dem Erstellen der README musste ich -f Flag verwenden, um es dem Repository hinzuzufügen:

git add -f README.md.

Ich habe versucht, es auf die Whitelist .gitignore hinzuzufügen, konnte aber git nicht überzeugen, die Datei mit Variationen des Pfades zu finden, wie !~/repositories/configurations/README.md und so weiter. Unabhängig davon, wie ich den Pfad angegeben habe, konnte git die Datei nicht sehen. Nach dem Hinzufügen mit Gewalt funktioniert es aber gut. Jemand, der schlauer ist als ich, hat vielleicht einen Vorschlag, wie man das macht.

Dieses Verfahren funktionierte wie ein Charme. Ich habe jetzt ein funktionierendes Repository, um Änderungen an Punktdateien zu verfolgen und sie sicher zu speichern.

+0

Danke Scro, das funktioniert wie ein Zauber Ich finde es wirklich nützlich. Ich habe keine Antwort für das '.gitignore', ging selbst durch. – vabada

3

Schauen Sie sich Homesick an, ein Framework, um Ihre Punkte in einem Git Repo zu verfolgen.

Es funktioniert durch

  • ein Git-Repo zu schaffen, die den Überblick über die Dateien hält Sie es
  • sym-Verknüpfung der Dateien von Ihrem Home-Ordner (~) mit dem Git-Repo zu verwaltenden
  • Bereitstellung von Befehlen neue Dateien zu verfolgen, begehen/push/pull

Änderungen können Sie es installieren, indem

läuft
gem install homesick 

Folgen Sie dann der Dokumentation, um mit der Verfolgung Ihrer Dateien zu beginnen.

Ich empfehle, etwas wie Homesick zu verwenden, wie es funktioniert, und ist minimal invasiv. Es verschmutzt nicht Ihren Home-Ordner mit einem Git Repo, und es ermöglicht Ihnen, Ihre Konfiguration auf jedem Rechner, an dem Sie arbeiten, freizugeben und wiederherzustellen.

Hier ist ein link to my personal dotfiles repo, wenn Sie sehen möchten, wie ich Homesick verwende.

Homesick wird mit Ruby erstellt - wenn Sie eine Bash-only-Lösung haben möchten, gehen Sie bitte auf Homeshick.

Für eine vollständige Liste der verfügbaren Lösungen rund um die Verwaltung Ihrer dotfiles, überprüfen Sie die GitHub dotfiles page.

+0

Danke für die Empfehlung. Ich lese die Dokumentation durch. Was ich nicht verstehe, ist, wie das besser ist als mit Vanille-Git? Mit der Methode, die ich beschrieben habe, ist es nicht notwendig, sich auf ein zusätzliches Juwel mit einer anderen API zu verlassen. Indem ich ein git-Repository in einem logischen Verzeichnis einrichte und git auf das Home-Verzeichnis zeige, erhalte ich alle Vorteile eines normalen git-Workflows, ohne den Aufwand für die Verwaltung einer anderen Schnittstelle. – Scro

+0

Fair genug! Es ist wirklich eine "Buy vs. Build" Entscheidung. Homesick (und ähnliche Frameworks) haben eine funktionierende Lösung, und Sie haben Zeit investiert, um eine benutzerdefinierte Lösung zu erstellen, die für Sie arbeitet - nichts falsch daran. Homesick hat einen Befehl zum Hinzufügen neuer Dateien ('Heimwehspur'), während Sie die Datei zu Ihrer' .gitignore' Datei hinzufügen müssen - verschiedene Ansätze, die denselben Zweck erfüllen. Auch hier ist nichts falsch, ich wollte nur auf eine bestehende Alternative hinweisen. – nwinkler

+0

BTW: Ich habe einen Link zur GitHub dotfiles-Seite hinzugefügt (http://dotfiles.github.io/), die viele Tools für diesen Zweck enthält. Sehen Sie sich den Abschnitt "Allzweck-Dienstprogramm für Punktdateien" an. – nwinkler

Verwandte Themen