it-swarm.com.de

Ziehen Sie für einen anderen Git-Zweig, ohne zu wechseln

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).

In dem Projekt, dem ich zugewiesen bin, greifen wir alle auf dasselbe Repository zu und um die Änderungen in die Realität umzusetzen, git pull dort. Dies verursacht Probleme, da unsere Webdesigner Änderungen in das VCS übertragen, die noch nicht live sein sollten, sich aber 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 einen anderen Zweig zu wechseln und einfach das 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, wenn etwas live gehen muss
    • Änderungen im Master übernehmen (wie: git checkout master; git pull; git checkout live)
    • git merge master

Das Problem ist, dass ein Wechsel zum Master oder ein direktes Einspielen in das Live-System zu Problemen führen würde. Ich würde es daher vorziehen, dies zu vermeiden.

Gibt es eine Möglichkeit, dies zu tun, oder gibt es eine bessere Möglichkeit, das Live-System zu verwalten (mit Ausnahme des Trainings der Webbies, um nicht unfertiges Material zu pushen)?.

46
Morfildur

Sie können git stash verwenden, bevor Sie Master auschecken und ziehen, und nach dem erneuten Auschecken von Live git stash pop verwenden (oder wenn Ihr Git älter ist, git stash apply und git stash clear, sofern Sie dies annehmen) habe nichts anderes verstaut)

19
Tobias Kienzler

Ich konnte Änderungen von Origin/master in master ziehen, während ich in einem anderen Zweig arbeitete, indem ich diesen Befehl verwendete:

git fetch Origin master:master
36
Jeff Bridgman

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

git checkout live
git pull Origin master

Dadurch wird versucht, den Remote-Master und Ihren Live-Zweig zusammenzuführen.

5
Josh K

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 pushen, 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.

0
edgester