Wie kann ich ein Git-Projekt sicher aktualisieren (ziehen) und bestimmte Dateien unberührt lassen, selbst wenn Änderungen vorgelagert sind?
myrepo / config / config.php
Gibt es eine Möglichkeit, selbst wenn diese Datei auf der Fernbedienung geändert wurde, beim Git-Pull alles andere zu aktualisieren, aber diese Datei bleibt unverändert (nicht einmal zusammengeführt)?
PS. Ich muss tun, was ich verlange, weil ich nur git-basierte Bereitstellungsskripte schreibe. Ich kann Konfigurationsdateien nicht in Vorlagen ändern.
Ich brauche also eine Möglichkeit, Update-Skripte zu schreiben, die nicht verlieren, was lokal geändert wurde. Ich hatte auf etwas so Einfaches gehofft wie:
git assume-remote-unchanged file1
git assume-remote-unchanged file2
dann git pull
config.php
zugesagt?Antworten:
Es gibt eine einfache Lösung, die auf Git Stash basiert. Bewahren Sie alles auf, was Sie geändert haben, ziehen Sie alle neuen Dinge heraus und wenden Sie Ihren Vorrat an.
Bei Stash Pop kann es zu Konflikten kommen. In dem von Ihnen beschriebenen Fall würde es tatsächlich einen Konflikt für geben
config.php
. Die Lösung des Konflikts ist jedoch einfach, da Sie wissen, dass das, was Sie in den Vorrat legen, das ist, was Sie wollen. Also mach das:quelle
git merge
'uns' befindet sich das, was sich derzeit im Arbeitsverzeichnis befindet. Aber für eingit rebase
(odergit rebase -onto
) kann die Bedeutung getauscht werden.git stash , git pull , git stash apply
Sie können dasgit stash drop
git stash
.Wenn Sie eine Datei in Ihrem Repo haben, die von den meisten Pullern angepasst werden soll, benennen Sie die Datei in eine ähnliche Datei um
config.php.template
und fügen Sie sieconfig.php
zu Ihrer hinzu.gitignore
.quelle
.gitattributes
, um Ihre Änderungen beim Zusammenführen immer beizubehalten.Update: Dies beantwortet buchstäblich die gestellte Frage, aber ich denke, KurzedMetals Antwort ist wirklich das, was Sie wollen.
Vorausgesetzt, dass:
master
master
inorigin
.... du könntest es tun:
Sie können dafür einen Alias erstellen, wenn Sie dies häufig tun müssen. Beachten Sie, dass Änderungen, an denen Sie nicht festgeschrieben haben
config/config.php
, diese wegwerfen würden.quelle
Wir können auch Git Pull mit Rebase versuchen
quelle
Um die Frage zu beantworten: Wenn Sie bestimmte Dateien einer Kasse ausschließen möchten, können Sie die Sparse-Kasse verwenden
1)
.git/info/sparse-checkout
Definieren Sie in , was Sie behalten möchten. Hier wollen wir alle (*) außer (beachten Sie das Ausrufezeichen) config.php:2) Sagen Sie git, dass Sie Sparse-Checkout berücksichtigen möchten
3) Wenn Sie diese Datei bereits lokal haben, machen Sie das, was git bei einem spärlichen Checkout macht (sagen Sie ihm, dass diese Datei ausgeschlossen werden muss, indem Sie das Flag "skip-worktree" darauf setzen).
4) Genießen Sie ein Repository, in dem Ihre config.php-Datei Ihnen gehört - unabhängig davon, welche Änderungen im Repository vorgenommen wurden.
Beachten Sie, dass .gitignore keine Auswirkungen mehr hat, sobald eine Datei von git übernommen wurde.
Sobald die Datei der Quellcodeverwaltung unterliegt, haben Sie nur zwei Möglichkeiten (): - Erstellen Sie den gesamten Verlauf neu, um die Datei zu entfernen (mit
git filter-branch
) - Erstellen Sie ein Commit, mit dem die Datei entfernt wird. Es ist, als würde man einen verlorenen Kampf führen, aber manchmal muss man damit leben.quelle
Wenn es sich um lokale, nicht festgeschriebene Änderungen handelt, vermeiden Sie Zusammenführungskonflikte beim Ziehen.
Siehe - https://happygitwithr.com/pull-tricky.html
quelle