Wie viele andere auch verwalte ich viele meiner Punktedateien über ein Versionskontroll-Repository (in meinem Fall Mercurial on Bitbucket, privat). Dies ist praktisch, wenn Sie eine neue Maschine einrichten oder Konfigurationen auf verschiedene Maschinen übertragen.
Also habe ich natürlich mein .emacs
und .emacs.d
zu diesem Setup hinzugefügt .
Dann installierte ich einige Pakete und fügte sie *.elc
zu meinen hinzu .hgignore
, genauso wie ich *.pyc
Dateien aus meinen Python-Repos weglasse .
Gibt es andere Dinge, die ich nicht verfolgen sollte, z. B. generierte Dateien, die umgebungsspezifisch sind und beim Klonen auf eine andere Plattform nicht nützlich / korrekt sind? (Ich verwende Linux und OS X auf dem Desktop und FreeBSD auf dem Server.)
Gibt es Setup-Tricks, die üblicherweise verwendet werden, um diese Art des Teilens wertvoller zu machen? Bei der Einrichtung meiner Shell-Datei suche ich immer noch nach guten Möglichkeiten, um beispielsweise einzelne Dateien über Zweige hinweg auszuwählen.
quelle
*.elc
. stackoverflow.com/a/24539894/324105Antworten:
Ich speichere meine Emacs-Konfiguration in Github, weil ich zwei verschiedene Computer verwende, einen bei der Arbeit, einen zu Hause.
Hier ist eine Liste über Dinge, die ich nicht in die Quellcodeverwaltung gesteckt habe:
Umgebungsspezifische Setups.
Beispielsweise öffnen meine Emacs beim Start auf einem anderen Computer eine andere Organisationsdatei. Sie möchten diese Einstellungen nicht in die Quellcodeverwaltung übernehmen.
Ich verwende
(require 'local nil t)
diese Einstellungen zum Laden, aber verpflichte mich nielocal.el
.Pakete, die vom Paketmanager verwaltet werden
Wenn Pakete vom Paketmanager verwaltet werden, empfehle ich, diese Pakete nicht der Quellcodeverwaltung zu unterstellen. Weil :
Ich schlage vor, anstelle von Commit-Paketen den von Ihrem Paketmanager erkannten Mechanismus zu verwenden .
Zum Beispiel verwalte ich meine dritten Pakete mit Cask , so dass ich nur die Cask-Datei festschreibe, die die angegebenen gewünschten Pakete enthält.
Bei der vorherigen Verwendung
package.el
überprüft meine Konfiguration, ob das Paket installiert ist bzw. aktualisiert werden muss, sodass kein Paket festgeschrieben wird.Es gibt jedoch einige Pakete, die in keinem Paket-Repository vorhanden sind. In diesem Fall übergebe ich sie der Quellcodeverwaltung, z. B. in
site-lisp
.Alle von Paketen generierten Dateien
Zum Beispiel können alle die automatische Speicherung, Backup - Dateien,
tramp
,eshell
,recentf
, auchcustom.el
. Ich habe diese Dateien in~/.emacs/.gen
, so dass ich dieses Verzeichnis einfach ignorieren kann.Dateien, die häufig geändert werden, jedoch synchronisiert werden müssen
Wie persönliche durch verwendete Wörterbuchdatei
aspell
, Datei - Datenbank verwendetelfeed
, In diesen Fällen verwende ich Dropbox , um es auf verschiedene Computer synchronisiert. Also werde ich nicht vergessen, mich zu verpflichten.quelle
prelude-require-packages
Funktion als Cask für Arme funktioniert (mit dem Vorteil , dass ich auch mit Windows arbeite).package-install
in emacs.stackexchange.com/a/410/184 erwähnten integrierten Funktionen hilfreich sein.custom.el
in die Quellcodeverwaltung einsteige.Stellen Sie einfach sicher, dass keine generierten Inhalte (wie @ rangi-lin-Notizen) im Repo sind und, wenn Sie Ihre Punktedateien mit anderen teilen, keine verwandten Sicherheitsprodukte (wie Passwörter und API-Schlüssel). Für später habe ich meine Anpassungen in eine separate Datei aufgeteilt mit:
Gelegentlich verschiebe ich "sichere" Anpassungen zu einer großen
setq
Aussage vor dem obigen Ausschnitt.Meine .gitignore-Datei sieht folgendermaßen aus:
quelle
tl; dr
.emacs.d/init.el
anstelle von.emacs
.gitignore
eine weiße Liste.emacs.d / init.el
Ich benutze
.emacs.d/init.el
statt,.emacs
da dieses Setup mir erlaubt,.emacs.d
unter Git zu setzen . Mit können~/.emacs
Sie einen symbolischen Link zum Git-Repository erstellen oder Git-Repo in Ihrem Home-Verzeichnis haben. Wenn Sie verwenden.emacs.d
, ist alles gelöst..gitignore
Mein .gitignore ist eine weiße Auflistung anstelle der standardmäßigen schwarzen Auflistung.
Mit dieser Konfiguration können Sie sich auf das konzentrieren, was Sie wirklich brauchen, anstatt auf das, was Sie nicht brauchen.
.emacs.d
ist nicht wie ein Quellcode-Repository, was bedeutet, dass nicht nur Ihr Code gespeichert ist, sondern auch alle anderen automatisch generierten oder temporären Dateien dort abgelegt werden. Sie wissen nicht genau, wie es weitergeht. " Ignorieren Sie alle Dateien standardmäßig und fügen Sie die gewünschten Dateien hinzu " ist die bessere Strategie, IMO.Übrigens behalte ich den größten Teil der Konfiguration in der
init.el
, anstatt das Schema mit mehreren Dateien zu verwenden. Der Grund dafür ist, dass eine große Datei es mir ermöglicht, a) Standardwerkzeuge zu verwendenoccur
oderisearch-forward
zu der gewünschten Konfiguration zu wechseln, b) das zu verwendenoutshine
, was meineinit.el
org-cycle
-fähig macht , c) meine nicht die.gitignore
ganze Zeit zu ändern .Paket-Manager
Stellen Sie keine Pakete unter git, es sei denn, Sie müssen Emacs-Version und / oder Paketversion auf Ihrem gesamten System synchronisieren .
Package.el
ist gut.use-package
ist auch in Ordnung. Fass ist schön. Wählen Sie Ihren Paketmanager aus und übergeben Sie nur Ihre Konfigurationsdatei, nicht das Paket selbst.dh Eine der besonderen Anforderungen, die ich mir vorstellen kann, wäre, zwei Systeme zu haben, eine Entwicklung und eine Bereitstellung, und sie müssen genau dieselbe Emacs-Konfiguration haben.
quelle
init.el
Datei zu halten funktioniert, solange diese Datei nicht zu groß wird. Emacs kann mit großen Dateien nicht gut umgehen, und nach einer Weile beginnt es beim Bearbeiten großer Dateien nur noch zu kriecheninit.el
. Ein weiterer Vorteil des Aufteilens Ihrer Konfiguration in mehrere Dateien besteht darin, dass sie mit git besser funktionieren. In bestimmten Situationen können Änderungen an einer einzelnen Datei als Zusammenführungskonflikt angesehen werden, nicht jedoch, wenn sich die Änderungen in separaten Dateien befinden. Schließlich ist es viel einfacher, nur einzelne Anforderungen zu kommentieren, als große Teile Ihrer Init-Datei.Ich habe die folgenden Dinge in meinem .hgignore
Wenn Sie Ihre Init-Datei für andere Benutzer freigeben möchten, sollten Sie möglicherweise Verlaufsdateien entfernen, z. B. die, die im Modus "Speichern" erstellt wurden. Abgesehen davon glaube ich nicht, dass es irgendwelche besonderen Tricks gibt. Alle Richtlinien, die Sie für die Versionierung von Code-Projekten befolgen, funktionieren auch hier.
quelle
Im Laufe der Zeit fügen Pakete eine Menge Dinge hinzu
~/.emacs
und am Ende füge ich sie einer nach dem anderen zu meinen hinzu.gitignore
. Ich habe auch eine,private.el
die Passwörter, maschinenspezifische Codes usw. enthält, die ich nicht verfolge.Das habe ich jetzt.
quelle
Es hängt davon ab, welche Pakete / Funktionen Sie verwenden, daher kann es schwierig werden. Wenn Sie beispielsweise dired-immage verwenden, wird neben den von Vamsi erwähnten Dateien ein Verzeichnis erstellt, in dem Miniaturansichten zwischengespeichert werden. Möglicherweise möchten Sie auch .elc-Dateien ignorieren.
quelle
Ich veröffentliche meine .emacs.d, benutze aber ein Subrepo mit den privaten Änderungen (Passwörter und so). Damit andere Benutzer es klonen können, verweist der Standardzweig auf ein Platzhaltersubrep und jeder Computer verfügt über einen eigenen benannten Zweig.
Beim Zusammenführen von Maschinen füge ich zuerst
graft
die neuen Änderungen in derdefault
Zweigstelle und dann diedefault
Zweigstelle in den anderen Zweigstellen am Arbeitsplatz zusammen.Als Beispiel finden Sie meine .emacs.d auf bitbucket , einschließlich einer Readme- Datei mit einer kurzen Bedienungsanleitung .
Möglicherweise möchten Sie den Zusammenführungstreiber für den Organisationsmodus zu diesem Setup hinzufügen .
quelle
Nach mehreren Iterationen habe ich festgestellt, dass die Versionskontrolle zwar hervorragend zum Teilen von Code und zum Nachverfolgen von Änderungen geeignet ist, nicht jedoch zum Synchronisieren einer sich schnell ändernden Konfiguration auf mehreren Computern. Der Grund dafür ist , dass es viele Dinge , die sollte synchronisiert werden und sollten nicht in der Versionskontrolle sein. Einige Beispiele:
.elc
Dateien (das erneute Kompilieren bei Konfigurationsänderungen ist ein großer Aufwand, und Fehler in veraltetenelc
Dateien sind häufig ein Problem beim Debuggen).elpa
Verzeichnis (und bis das Versions-Pinning zum Standard wird, ist es nicht zuverlässig genug, es automatisch neu zu erstellen).eshell
Verlauf undgnus
Dateien.(Beachten Sie, dass plattformübergreifende Probleme nicht in der Liste aufgeführt sind. Es sollte in Ordnung sein, eine Konfiguration zu haben, die auf mehreren Betriebssystemen funktioniert.) Anstatt git als Synchronisierungslösung zu verwenden, verwende ich sie ausschließlich als Code-Tracking-Lösung und synchronisieren mit Dropbox. Auf diese Weise werden alle lästigen Dateien behoben, die nicht in der Versionskontrolle enthalten sein sollten.
Ich habe jedoch das Ziel, dass meine Konfiguration aus dem Quellcode wiederhergestellt werden kann, wenn meine Dropbox-Konfiguration aus irgendeinem Grund verschwindet. Daher verfolge ich alle installierten Pakete und alles, was nicht im Quellcode enthalten ist. Meine privaten Informationen werden ebenfalls in einem Git-Modul gespeichert. Für die tägliche Synchronisierung ist Git jedoch keine großartige Lösung.
quelle