Wir sind kürzlich von SVN zu Git gewechselt und haben gleichzeitig unsere Live-Systeme in die Versionskontrolle versetzt (anstelle von lokalem Checkout und Dateikopie zu leben).
Bei dem Projekt, dem ich zugewiesen bin, greifen wir alle auf dasselbe Repository zu und um Änderungen ins Leben zu rufen, sind wir einfach git pull
da. Dies verursacht Probleme, da unsere Webdesigner Änderungen in das VCS übertragen, die noch nicht live sein sollten, sich jedoch in der Webtestumgebung befinden sollten.
Wenn einer der Entwickler nun ins Leben gerufen wird, erhält er alle (möglicherweise unvollendeten) Änderungen.
Ich dachte daran, live in eine zusätzliche Filiale zu wechseln und einfach zu verschmelzen, was sich geändert hat, aber aufgrund meines Mangels an Git-Kenntnissen habe ich keine Ahnung, wie.
Meine Idee ist:
- Erstelle einen neuen Branch in live (
git branch live
). - Jedes Mal muss etwas live gehen
- Pull Änderungen im Master (wie:
git checkout master; git pull; git checkout live
) git merge master
- Pull Änderungen im Master (wie:
Das Problem ist, dass ein Wechsel zum Master oder ein direktes Einspielen in das Live-System zu Problemen führen würde. Daher würde ich dies lieber vermeiden.
Gibt es eine Möglichkeit, dies zu tun oder gibt es eine bessere Möglichkeit, das Live-System zu verwalten?
git pull --all
Wird Master standardmäßig nicht in Live gezogen, wird Master gezogen und mit Master zusammengeführt, und (falls auf dem Server vorhanden) wird Live gezogen, um in Live zusammengeführt zu werden. Hast Du es versucht?git checkout -f
um das Problem zu ignorieren - aber ein Backup machen!Antworten:
Sie können
git stash
vor dem Auschecken von master und pullen und nach dem Auschecken von live wieder verwendengit stash pop
(oder wenn Ihr Git älter istgit stash apply
undgit stash clear
vorausgesetzt, Sie haben nichts anderes verstaut).quelle
git pull --all
ruft alle Fernbedienungen ab, aber es wird weiterhin versucht, einen Zweig (oder den Standardzweig) mit dem aktuellen Zweig zusammenzuführen.git fetch --all
wäre es vielleicht eine bessere Antwort gewesen--all
Option die verschiedenen Versionen des Zweigs mit einem Oktopus in den aktuellen Zweig einfügen ! Mein Rat ist also, sich fern zu halten, es--all
sei denn, das ist es, wonach Sie suchen, denn in den meisten anderen Fällen gibt es Ihnen nichts.Mit dem folgenden Befehl konnte ich Änderungen von
origin/master
inmaster
abrufen, während ich in einem anderen Zweig arbeitete:quelle
fetch
! =pull
Lösen Sie zuerst das Problem. Sie sollten nicht zu einer Niederlassung drängen, zu der sie kein Geschäft haben.
Was Sie zu fragen scheinen, wäre so etwas wie
Dadurch wird versucht, den Remote-Master und Ihren Live-Zweig zusammenzuführen.
quelle
Ich empfehle Ihnen, ein Test-Git-Repo zu erstellen, das jeder ausführen kann. Alle Repos, einschließlich Ihrer Live-Website, sind Klone des Testrepos. Auf diese Weise kann jeder zum Testen übergehen, ohne die Live-Website zu berühren. Wenn jemand die Live-Site aktualisieren muss, können Sie die Live-Site aus dem Git-Test-Repo ziehen. Dieser Workflow ist dem von SVN ziemlich ähnlich. Für zusätzliche Flexibilität empfehle ich die Verwendung des von Ihnen beschriebenen "Live" -Zweigs.
Zusammenfassend ist jedermanns Git-Repo ein Klon des Test-Repos. Die Live-Produktionsstätte ist nur ein Klon des Test-Repos. Alternativ könnte das Testen ein Klon der Live-Produktion sein, so dass ein "Git Push" immer in Richtung Produktion geht.
Weitere Optionen sind das Hinzufügen des "Live" -Zweigs zu diesem Arrangement oder ein "Staging" -Repo zwischen Test und Produktion. Für zusätzliche Sicherheit empfehle ich, den Zugriff auf das Live-Git-Repo einzuschränken und die Benutzer dazu zu zwingen, ein geschütztes Skript zu verwenden, das den Pull für die Live-Produktion ausführt.
quelle