Definition
Ein Pull Request ist ein Mechanismus in der Softwareentwicklung, mit dem Änderungen an einem Quellcode-Repository vorgeschlagen und zur Integration in den Hauptzweig (Branch) eingereicht werden. Dabei wird ein separater Entwicklungszweig mit dem Ziel erstellt, die neuen oder geänderten Programmteile in den Hauptzweig zusammenzuführen. Pull Requests dienen als formaler Schritt, um Code-Änderungen zu überprüfen und zu diskutieren, bevor sie in das zentrale Repository übernommen werden.
Der Begriff stammt aus der Versionsverwaltung mit Git, insbesondere bei Plattformen wie GitHub, GitLab oder Bitbucket. Dort wird ein Pull Request oft auch als Merge Request bezeichnet, wobei beide Begriffe denselben Prozess beschreiben: die Anfrage, Änderungen in den Zielzweig zu integrieren. Pull Requests sind ein zentraler Bestandteil kollaborativer Softwareentwicklung und unterstützen die Code-Qualität durch Peer-Reviews.
Was bedeutet das für Ihr Unternehmen?
Pull Requests sind für Sie als Auftraggeber ein Zeichen für ein geordnetes Entwicklungsvorgehen: Jede Änderung wird von einer zweiten Person geprüft und ist später nachvollziehbar. Arbeitet ein Dienstleister allein ohne solche Prüfungen, landen Fehler und Abkürzungen leichter im Live-System. Haben Sie Zugriff auf das Repository, sehen Sie in der Liste der Pull Requests, woran gearbeitet wurde und wann es ausgeliefert wurde.
Hintergrund und Entstehung
Pull Requests entstanden mit der Verbreitung verteilter Versionskontrollsysteme wie Git, das 2005 von Linus Torvalds entwickelt wurde. Git ermöglicht es mehreren Entwicklern, unabhängig an eigenen Zweigen zu arbeiten. Um die Integration dieser parallelen Entwicklungen zu koordinieren, wurde der Pull-Request-Workflow eingeführt.
Plattformen wie GitHub, gegründet 2008, popularisierten den Begriff und die Praxis des Pull Requests, indem sie eine benutzerfreundliche Oberfläche für das Erstellen, Verwalten und Überprüfen von Pull Requests bereitstellten. Dies erleichterte die Zusammenarbeit in großen Entwicklerteams und Open-Source-Projekten erheblich.
Funktionsweise
Ein Entwickler erstellt zunächst einen eigenen Branch, in dem er neue Funktionen implementiert oder Fehler behebt. Nach Abschluss der Änderungen wird ein Pull Request eröffnet, der die Unterschiede zwischen dem eigenen Branch und dem Zielbranch darstellt. Dieser Pull Request enthält eine Beschreibung der Änderungen sowie oft auch Verweise auf zugehörige Tickets oder Aufgaben.
Andere Entwickler oder Reviewer können den Pull Request einsehen, den Code kommentieren, Verbesserungsvorschläge machen oder Tests durchführen. Erst nach erfolgreicher Überprüfung und gegebenenfalls Anpassungen wird der Pull Request vom Maintainer oder Projektverantwortlichen akzeptiert und in den Zielbranch gemerged.
Einsatzgebiete
Pull Requests werden vor allem in der kollaborativen Softwareentwicklung eingesetzt, sowohl in Open-Source-Projekten als auch in kommerziellen Softwareunternehmen. Sie ermöglichen eine strukturierte Code-Review, die Fehler frühzeitig erkennt und die Codequalität verbessert.
Darüber hinaus dienen Pull Requests als Dokumentation der Änderungen und der Diskussionen rund um den Code. Sie sind auch in Continuous-Integration-Workflows eingebunden, bei denen automatisierte Tests und Prüfungen vor dem Merge ausgeführt werden, um die Stabilität des Hauptzweigs zu gewährleisten.
Abgrenzung zu verwandten Begriffen
Ein Pull Request unterscheidet sich von einem einfachen Commit oder Push darin, dass er eine formale Anfrage zur Integration darstellt, die eine Überprüfung durch andere Entwickler erfordert. Ein Commit ist eine einzelne Änderung am Code, während ein Pull Request eine Sammlung von Commits umfasst, die zusammengeführt werden sollen.
Im Vergleich zu einem Merge ist ein Pull Request ein vorgeschalteter Prozess. Ein Merge ist die tatsächliche Zusammenführung der Codebasis, während der Pull Request die Diskussion und Prüfung dieser Zusammenführung ermöglicht. Ähnliche Konzepte sind Merge Requests, die vor allem in GitLab verwendet werden, wobei die Funktionalität identisch ist.