Wie soll ich mein Bash-Profil versionieren?

10

Daher bin ich mit der Versionskontrolle sehr vertraut und habe mir überlegt, Versionen meines Bash-Profils zu verfolgen: ~/.bash_profilemit dem zusätzlichen Vorteil, dass ich meine verschiedenen Aliase und dergleichen auf GitHub teilen kann.

Angenommen, meine .bash_profile-Datei muss in meinem Ausgangsverzeichnis bleiben (ich kann sie nicht in ein Verzeichnis einbinden, um sie wie eine normale Datei alleine zu verfolgen). Was wäre der beste Weg, dies zu tun? Ich möchte kein Git-Repo in meinem Home-Verzeichnis initialisieren und muss jede andere vorhandene Datei ignorieren.

Was könnte also eine gute Lösung sein?

Ich nehme an, ich könnte einfach eine Kopie davon in einem separaten Verzeichnis erstellen und es von Zeit zu Zeit aktualisieren / festschreiben, aber ich bin gespannt, ob es eine gute Möglichkeit gibt, eine einzelne Datei in einem aufgefüllten Verzeichnis zu versionieren.

Elliotwhitehead
quelle
8
Symbolische Links sind deine Freunde.
Blrfl

Antworten:

10

Afaik, normalerweise gibt es zwei Möglichkeiten, dies zu tun: a) symbolische Verknüpfung b) Synchronisierungsskript. In beiden Fällen müssen Sie ein weiteres Repo erstellen (nennen Sie es dotfileunten) bash_profile, um die Version steuern zu können.

Verwenden Sie symbolische Links

bash_profilewird in Ihr versioniertes Verzeichnis verschoben (enthält .git), $HOME/.bash_profileist ein Softlink ⇢ $HOME/dotfile/bash_profile.

$HOME/dotfile/bash_profileHier befindet sich Ihr tatsächlicher bash_profileWohnsitz, siehe Holman Dotfile als Beispiel.

Verwenden Sie das Synchronisierungsskript

bash_profilebleibt in deinem HOMEVerzeichnis, aber es ist nur eine Kopie der 'neuesten'. Das Neueste bash_profilelebt noch in $HOME/dotfile.

Ja, es ist ein Copy-and-Paste-Ansatz. Deshalb benötigen Sie einige syncing script, um sich vor der DRY- Arbeit zu schützen . siehe mathiasbynens dotfiles als gutes Beispiel. Seine syncing script https://github.com/mathiasbynens/dotfiles/blob/master/bootstrap.sh .

Außerdem

Wie Sie vermuten:

Ich bin gespannt, ob es eine gute Möglichkeit gibt, eine einzelne Datei in einem aufgefüllten Verzeichnis zu versionieren

Die Versionskontrolle einer einzelnen Datei ist nicht sehr sinnvoll. Das Kopieren und Einfügen oder das einfache Ablegen auf einigen Cloud-Laufwerken erspart Ihnen viel Aufwand.

Der eigentliche Punkt ist , dass die Dinge nicht so skaliert erhalten, wenn die dotfilesin Ihrem $HOMEwächst, wenn Sie die Versionskontrolle Ihre Lieblings - Config (zB Text - Editors wollen vimrc), wenn Sie SSHzur Arbeit mit mehreren Shell - Remote, die Sie haben könnten zshrc, bashrc, fishrcusw.

Dies bedeutet, dass Sie auf lange Sicht möglicherweise alle Ihre dotfiles versionieren möchten . Githubs Dotfile ist ein guter Ausgangspunkt.

Xlee
quelle
1
Hatte noch nie von symbolischen Links gehört! Genau das habe ich gesucht. Vielen Dank!
Elliotwhitehead
Danke für die sehr hilfreiche Antwort. Viele andere gute Ideen für das Einfügen dieser und anderer Dotfiles in ein Repo finden Sie hier: dotfiles.github.io
kevinmicke
@ kevinmicke Ich bin froh, dass es hilft :)
Xlee
2

Ich möchte kein Git-Repo in meinem Home-Verzeichnis initialisieren und muss jede andere vorhandene Datei ignorieren.

Warum nicht? Sie möchten eine Datei in Ihrem Home-Verzeichnis verfolgen, daher sollte auch Ihr Home-Verzeichnis unter Versionskontrolle stehen.

Das bedeutet nicht, dass Ihr Home-Verzeichnis ein Git-Repository sein muss. Lassen Sie mich erklären:

Git-Repositorys bestehen aus zwei Teilen: einem Arbeitsbaum (es sei denn, es handelt sich natürlich um ein nacktes Repository) und dem .gitVerzeichnis "Datenbank". Normalerweise ist das letztere nur ein (verstecktes) Unterverzeichnis des ersteren, aber das ist nicht unbedingt notwendig. Git unterstützt die Verwendung eines getrennten Arbeitsbaums . Auf diese Weise können Sie Ihr Home-Verzeichnis unter Versionskontrolle halten, müssen jedoch kein .gitVerzeichnis enthalten , das Tools (vim, emacs, ...) oder git selbst verwirren könnte.

Einrichten:

cd ~
mkdir .dotfiles
cd .dotfiles
git init .

Jetzt gibt es ein ~/.dotfiles/.gitVerzeichnis. Verwenden Sie das, aber geben Sie das Ausgangsverzeichnis als Arbeitsbaum an. Dies erfordert eine ziemlich lange Befehlszeile, daher ist ein Alias ​​eine gute Idee:

alias dotfiles='git --git-dir ~/.dotfiles/.git --work-tree=$HOME'

Um es zu verwenden, verwenden Sie einfach den obigen Alias ​​anstelle von gitz dotfiles status.

Leistungen:

  • Keine anderen Werkzeuge nötig, nur Git
  • Keine Symlink-Hölle / nicht synchronisierte Situationen möglich
  • Git-Repositorys in Unterverzeichnissen unterhalb von home sind in keiner Weise betroffen

Ich habe dies von diesem Blog-Beitrag (der einige zusätzliche Infos enthält) erhalten und benutze es ohne Probleme. Ich nicht, aber mit einer einfachen Zeile *in können .gitignoreSie die möglicherweise große Menge an nicht verfolgten Dateien loswerden und sich ein wenig vor dem Hinzufügen von Dateien zum Repository schützen, die nicht zum Hinzufügen vorgesehen sind.

Daniel Jour
quelle
Guter Punkt! Außerdem muss möglicherweise ein vorhandener Git * Alias ​​neu definiert werden, denke ich.
Xlee
1

Eine andere Lösung wäre, Ihre spezifische Konfiguration (wie das Festlegen eigener Aliase oder das Definieren eigener Funktionen) in eine andere Datei als zu deportieren .bash_profile. Auf diese Weise wird nur Ihre spezifische Konfiguration versioniert und Sie müssen sie nur von Ihrem beziehen .bash_profile.

Mach es manuell

Angenommen, diese .bash_profileErweiterungsdatei ist benannt bash_profile_extund im /path/to/bash/profile/ext/Verzeichnis enthalten:

Am Ende Ihrer .bash_profileDatei haben Sie:

source /path/to/bash/profile/ext/bash_profile_ext

Und nur Ihr /path/to/bash/profile/extVerzeichnis wird versioniert.

Verwenden Sie dazu eine Drittanbieter-App

Noch einfacher (ich denke :-)) entwickle ich ein shprofile , mit dem Sie Ihr Shell-Profil verwalten können, indem Sie sich nur auf Ihre spezifische Profilkonfiguration konzentrieren. Mit shprofile können Sie alle Ihre spezifischen Profilkonfigurationen in einem einzigen Verzeichnis definieren, das dann versioniert werden kann. Beachten Sie, dass Sie auch mehrere Profile für denselben Benutzer verwalten können.

Auch hier müssen Sie nicht Ihre gesamte .bash_profileKonfiguration versionieren, sondern nur Ihre zusätzlichen Werte.

Aurélien Bourdon
quelle
0

Für das IT-Konfigurationsmanagement auf Unternehmensebene verwenden viele Puppet. Ich empfehle Puppet Kunden als Kostensenkungs- und Zuverlässigkeitsmaßnahme. Hier im Labor halten wir es einfach.

Unser Haupt-Repository enthält Dateien, die zum vollständigen Wiederherstellen eines abgestürzten Systems oder zum Erstellen eines neuen Benutzerkontos erforderlich sind. Die Versionskontrolle war bereits mehrfach hilfreich. Git ist in Ordnung mit Dateien und Verzeichnissen, die mit einem Punkt beginnen, solange Git nicht so konfiguriert ist, dass sie ignoriert werden.

Dies sind Repository-Pfade für die Installation und Konfiguration von Systemen und Anwendungen.

know.resources / install.linux / std.fedora.dnf.sh (dnf-Installationen) Knowledge.resources / install.linux / font.install.info.te (Schriftartinstallation) Knowledge.resources / install.linux / std.fedora. te (andere Installation und Konfiguration)

Dies sind allgemeine Benutzerkonfigurationsdateien.

Start / linux.basic.user / .bash_profile Start / linux.basic.user / .bashrc Start / linux.basic.user / .vimrc Start / linux.basic.user / .gitmessage Start / linux.basic.user / .gitconfig startup / linux.basic.user / use.ls.al.to.see.dot.files.here

Diese sind für Remote-Konten auf Servern.

Start / linux.remote / .bash_profile Start / linux.remote / .bashrc Start / linux.remote / .vimrc Start / linux.remote / .gitmessage Start / linux.remote / .gitconfig Start / linux.remote / use.ls. al.to.see.dot.files.here

Diese sind für das Root-Konto.

Start / linux.root / .bash_profile Start / linux.root / .bashrc Start / linux.root / .vimrc Start / linux.root / use.ls.al.to.see.dot.files.here

Ich verwende Dateien mit der Größe "use.ls.al.to.see.dot.files.here", um mich daran zu erinnern, dass das Verzeichnis nur leer aussieht.

Douglas Daseeco
quelle