Verwalten mehrerer Personen, die mit GIT an einem Projekt arbeiten

32

Ich bin sehr neu bei GIT / GitHub (so neu wie gestern). Ich würde gerne wissen, wie sich mehrere Personen, die mit Github an einem Projekt arbeiten, am besten verwalten lassen. Derzeit leite ich ein Projekt mit vier Entwicklern.

  1. Wie gehe ich beim Workflow vor und stelle sicher, dass alles synchron ist?

    (Hinweis: Alle Entwickler haben ein universelles Konto.)

  2. Muss sich jeder Entwickler in einem anderen Zweig befinden?

  3. Kann ich mit 2 Personen arbeiten, die an derselben Datei arbeiten?

Bitte poste eine ausführliche Antwort, ich bin kein schüchterner Leser. Ich muss das gut verstehen.

badZoke
quelle
7
Ein Account für alle Entwickler? Das könnte funktionieren, ist aber höchstwahrscheinlich keine gute Idee.
Marstato
Ein Blick auf GitFlow und Trunk Based Development lohnt sich . Persönlich habe ich mit letzterem großen Erfolg gehabt
J Lewis

Antworten:

29

Wenn alle Entwickler Commit-Zugriff auf das Repo haben, sollten Sie nichts Besonderes tun müssen. Sie werden Änderungen aus dem Repo ziehen, ihre eigenen Änderungen vornehmen, lokal festschreiben und dann in das öffentliche Repo zurückschieben, wenn etwas funktioniert.

Wenn Sie andererseits einen (oder mehrere) Entwickler haben, die für das Commit des Repos verantwortlich sind, und die anderen Patches für diese bereitstellen. Lassen Sie jeden von ihnen das Repo in ihre eigenen Konten klonen und Pull-Requests senden, wenn er eine Änderung am Haupt-Repo wünscht.

Wenn Sie möchten, können Sie auch bestimmte Klone erstellen, um an bestimmten Funktionen zu arbeiten. Verwenden desselben Workflows mit Pull-Requests, um Änderungen am Haupt-Repo zu erhalten, wenn die Funktion abgeschlossen ist.

Wenn mit "Alle Entwickler haben ein universelles Konto" gemeint ist, dass alle Entwickler ein GitHub-Konto teilen und als derselbe Committer im Repo erscheinen, ist das eine schlechte Idee. Erstellen Sie separate Konten und richten Sie sie als Mitbearbeiter ein, wenn Sie möchten, dass alle über Commit-Zugriff verfügen.

Für Ihre spezifischen Fragen:

  1. Nein, verwenden Sie Verzweigungen für Funktionen, Korrekturen usw., für die mehr als ein Commit erforderlich ist. In einem Zweig können mehrere Entwickler arbeiten.

  2. Ja, git behandelt Konflikte sehr gut, so dass es keine Probleme gibt, wenn Leute an derselben Datei arbeiten. Keine Probleme außer, die Konfliktlösung ist möglicherweise nicht immer trivial, wenn grundlegende Änderungen an einer Datei vorgenommen wurden, die von mehr als einem Mitglied bearbeitet wurde. Dies ist jedoch nichts, was durch ein gemeinsames Gespräch nicht überwunden werden kann. Die Versionskontrolle ersetzt nicht die Kommunikation.

Viel Glück!

harald
quelle
Ein paar Punkte, die Sie dort angesprochen haben, sind echte Augenöffner, die mich dazu gebracht haben, alle zusammen in eine andere Richtung zu denken, danke!
BadZoke
Hapy, wenn es Ihnen helfen kann. Git und DVCS sind gewöhnungsbedürftig, aber wenn Sie sich erst einmal daran gewöhnt haben, sind sie äußerst flexibel.
Harald
Danke dafür. Ich hatte eine bestimmte Frage. Wenn mehrere Entwickler in einem Zweig arbeiten. Müssen die übrigen Entwickler jedes Mal, wenn einer der Entwickler Änderungen vornimmt und diese an den Arbeitszweig weiterleitet, die Änderungen übernehmen (um sicherzustellen, dass sie lokal über den neuesten Code verfügen, an dem sie arbeiten können)?
Eswar Rajesh Pinapala
Nein, nicht jedes Mal, wenn Sie synchronisieren möchten. Betrachten Sie Ihre lokale Kopie des Zweigs als Ihren privaten Zweig und den vorgelagerten Zweig als den, in den Sie zusammenführen möchten. Wenn Sie etwas wie git fetch upstreamgefolgt von verwenden, git merge upstream/branchsollten Sie synchronisiert werden, ohne den lokalen Festschreibungsverlauf neu zu schreiben. Wenn dies kein Problem ist, git pull --rebasewerden Ihre lokalen nicht beschleunigten Änderungen einfach in den oberen Bereich des Upstream-Zweigs verschoben.
Harald
@badZoke .... was Sie getan haben, um Ihre 3. Frage zu behandeln (behandeln Sie 2 Personen, die an der gleichen Datei arbeiten) ...
Moumit
25

Wir arbeiten mit 2 Entwicklern und verwenden diesen Workflow:

  • Auf Github haben wir einen Master Branch und einen Dev Branch
  • Die Hauptniederlassung entspricht der Produktion oder enthält Bereitstellungscode
  • Der dev-Zweig ist dem master voraus und enthält den gesamten neuen Code, an dem gerade gearbeitet wird
  • Vor Ort arbeiten wir beide am Dev-Zweig und drücken auf Github, wenn etwas fertig ist
  • Der andere Entwickler ruft alle neuen Änderungen aus dem Entwicklerzweig ab, bevor er seinen neuen Code überträgt
  • Wenn der Dev-Zweig gut ist, verschmelzen wir mit dem Master-Zweig
  • Vor Ort haben wir mehrere Feature-Branches, Issue-Branches etc.
John
quelle
1
Schön und einfach, vielen Dank! Ich werde damit anfangen, bevor ich in die komplexen Sachen einziehe;)
badZoke
Was passiert, wenn der andere Entwickler die neuen Änderungen abruft, bevor er seinen Code verschiebt, und die neuen Änderungen den Code ändern, den er bereits geändert hat?
Wayofthefuture
+1, dies ist in der Tat die einfachste und funktioniert einwandfrei. Was Sie verwenden, heißt vereinfachter Gitflow: marcgg.com/assets/blog/git-flow-before.jpg
Jelle
5

Ich sehe hier nur Textantworten, daher dachte ich, ich würde zuerst ein Bild von einem netten Gitflow posten. Ein Bild beschreibt mehr als tausend Wörter:

Vereinfachter Gitflow

  • Dieser Ablauf eignet sich auch für die kontinuierliche Bereitstellung.
  • Ihr Hauptzweig enthält Code, der derzeit auf Ihrem Produktionsserver ausgeführt wird.
  • Ihr Entwicklungszweig enthält Code, der derzeit auf einem Staging- / Testserver ausgeführt wird.
Jelle
quelle
+1, Git Flow oder ähnliches ist wahrscheinlich die richtige Antwort auf diese Frage.
Vielleicht_Faktor
0

Ich arbeite mit 3 anderen Entwicklern zusammen und wir haben einiges damit zu tun. Manchmal bringen Entwickler Commits in die Produktion, die noch nicht zur Hauptsendezeit bereit sind, weil sie andere Commits in ihre Änderungen einbinden und dann in die Produktion einbinden. Versionszweige scheinen für uns in Ordnung zu sein. Wenn also Version 1.0 die aktuelle stabile Version ist, erstellen wir einen Zweig für die v1.1-Entwicklung. Die Entwickler werden Änderungen in diesem Zweig vornehmen. Unser Testserver checkt diesen Zweig aus und ruft nach Bedarf Änderungen ab. Wenn alle Funktionen für Version 1.1 fertig sind und der Test abgeschlossen ist, werden wir Version 1.1 mit Master und Push zusammenführen. Mit Verzweigungen kann Entwicklerteam A an Version 1.1 und Entwicklerteam B an Version 1.2 arbeiten. Beide Teams können arbeiten, ohne sich gegenseitig zu beeinflussen. Wenn Team A etwas entwickelt, das B verwenden kann,

Wir verwenden auch einen Hotfix-Zweig, der für sofortige Änderungen verwendet wird.

Hier ist ein Link zu einem Bild, wie das aussieht. http://nvie.com/img/[email protected]

Greg
quelle
Das hört sich für mich nicht so an, als würden Sie Git Flow wirklich so implementieren, wie es beabsichtigt war - das heißt, jedes unabhängige Feature aufzuteilen oder auf einen eigenen Zweig zu fixieren, und nicht nur jede Veröffentlichung
Brad Thomas