2016-04-29 5 views
4

Ich habe mir ein dotfiles Repo eingerichtet, das auf einem Remote-Server gehostet und auf verschiedenen Rechnern benutzt wurde. Für einige Dinge hätte ich gerne individuelle Konfigurationen, z.B. Die Umgebungsvariablen unterscheiden sich zwischen den Maschinen.dotfile management für verschiedene maschinen mit git branches zumutbar?

dachte ich, es wäre schön, einen zusätzlichen Zweig für die maschinenabhängigen Veränderungen haben, so zum Beispiel habe ich die Zweige server, notebook, desktop, alle basierend auf master mit wenig individuellen Änderungen (1 bis einige Commits). Jetzt ist das Problem, ich möchte, dass diese einzelnen Änderungen oben natürlich angewendet haben. Also würde ich master für häufige Änderungen ändern und rebase der lokale desktop Zweig darauf. Aber mit rebase kann ich nicht mehr push auf den Remote-Repo. Und ich möchte, dass als Backup und zum Synchronisieren natürlich, und es kann auch vorkommen, dass ich den Zweig der Maschine A während der Arbeit an Maschine B ändern möchte.

Ist es überhaupt sinnvoll, einen einzigen Zweig für zu unterhalten Jede Maschine oder gibt es eine bessere Lösung? Wie würde ich in der Lage sein, die lokalen Änderungen oben, wie mit Rebase, aber nicht die Fähigkeit zu push zu verlieren? Vielen Dank

+0

Wäre es eine Option sein, alle maschinenabhängig in einer einzigen Datei Variablen zu speichern, und haben ein Git Hook propagieren die Werte wenn nötig? –

Antwort

-1

Sie können auch Dateien in Ihrem gitconfig

[include] 
    path = ~/my_std_git_config 

So könnte man eine gemeinsame Datei mit Standard-Sachen haben. Und mehrere Gitconfig-Dateien für Ihre verschiedenen Hosts.

Dann verknüpfen Sie nur einen der Host-spezifischen gitconfigs mit ~/.gitconfig. Halten Sie alle Dateien in einem Zweig zusammen.

i.E. in Ihrem Repository:

common_gitconfig 
laptop_gitconfig 
server_gitconfig 

Schließen Sie common_gitconfig in laptop_ * und server_ * ein. Verbinden Sie Ihre laptop_gitconfig mit ~/.gitconfig auf Ihrem Laptop. Auf Ihrem Server verbinden Sie server_gitconfig.

1

Ihr Ansatz mit mehreren Zweigen klingt vernünftig und ist die Lösung einiger Probleme, die ich mit maschinenspezifischen Skripten (Arbeit/Personal) hatte.

Das Problem, das Sie beschreiben, ist, dass Sie keine Änderungen nach einem git rebase schieben können.

Der Grund, warum Sie nicht drücken können, ist, weil git rebase Geschichte neu schreibt. Es entfernt Ihre branchenspezifische Commits, synchronisiert mit Master und erneut angewendet Commits auf:

enter image description here

Warum nicht statt rebase fusionieren?

Durch das Zusammenführen (git merge master) werden Sie keine Geschichte neu schreiben und Sie werden keine Probleme haben, auf Ihre Fernbedienung zu schieben.

Ich empfehle Ihnen, lesen Sie this Artikel, erklärt es den Unterschied zwischen Zusammenführung und Rebasse.

Wenn Sie wirklich wollen/müssen, um rebase, werden Sie Ihre Änderungen an der Fernbedienung drücken zwingen müssen durch git push --force <remote_name> <branch_name> Lauf

Verwandte Themen