Wenn Sie ein Plug-in für das WordPress-Repository gehostet haben, sind Sie mit SVN und einigen Befehlen ziemlich vertraut. In diesem Tutorial zeige ich Ihnen, wie Sie mit Git, einem anderen von GitHub beliebten Versionskontrollsystem, Ihr Plug-In veröffentlichen und verwalten können.
Git und SVN sind Beispiele für Versionskontrollsysteme. Das WordPress-Repository verwendet Letzteres (wenn Sie ein Plug-In in WordPress gehostet haben, sind Sie mit dem Einchecken vertraut, um Änderungen an diesem Repository vorzunehmen). Beide ermöglichen es Ihnen, Änderungen an Ihrem Code zu verfolgen, aber es gibt große Unterschiede zwischen ihnen, wie sie dies tun.
SVN basiert auf einem einzigen "zentralen Repository" des Codes (in unserem Kontext: dem WordPress Plug-In-Repository). Jedes Mal, wenn Sie Ihr Plug-In bearbeiten möchten, müssen Sie eine lokale Kopie erstellen, die Änderungen vornehmen und diese Änderungen anschließend in das WordPress-Repository "einchecken".
Git ist ein dezentrales Versionskontrollsystem. Anstatt nur eine lokale Kopie Ihres Plug-Ins zu haben, haben Sie einen vollständigen Klon Ihres Plug-In-Repositorys, einschließlich aller Änderungen. Das Repository ist jetzt eigenständig auf Ihrem Computer vorhanden. Sie können Änderungen festschreiben und verfolgen, Änderungen rückgängig machen oder Ihr Plug-In in verschiedene Richtungen "verzweigen", alles auf Ihrem lokalen Computer. Erst wenn Sie Ihr Plug-in gerne aktualisieren, können Sie Ihre Änderungen in Ihrem WordPress-Repository veröffentlichen, um sie öffentlich zu machen.
In diesem Lernprogramm gehe ich davon aus, dass Sie ein Plug-In im Repository für WordPress-Plug-Ins gehostet haben oder zumindest Ihre Hosting-Anfrage genehmigt wurde. Wenn Sie nicht sicher sind, wie Sie Ihr Plug-in von WordPress hosten lassen, sollten Sie unseren Artikel zur Veröffentlichung im WordPress-Plugin-Repository lesen.
Es gibt zahlreiche Argumente für und gegen die Verwendung von Git über SVN (sowie dezentrale Versionskontrollsysteme im Allgemeinen). Viele davon beruhen auf den grundsätzlich unterschiedlichen Wegen, mit denen Git und SVN Änderungen verfolgen. Eine hervorragende, eingehende Analyse von Git und SVN finden Sie in CodeForests Artikel "Git vs SVN", jedoch für WordPress-Entwickler:
Ein Nachteil der Verwendung von Git besteht darin, es mit einem SVN-Repository gut zu spielen. Es ist eigentlich nicht so schwer dank git svn
, und dieser Artikel soll Sie durch diesen Artikel führen.
Wenn Sie es noch nicht getan haben, sollten Sie Git installieren. Wie Git installiert wird, ist im Git Community-Buch und im Pro Git-Buch (beides) ziemlich gut beschrieben Ausgezeichnet Ressourcen, wenn Sie Git noch nicht kennen. Wie Git installiert wird, hängt von Ihrem Betriebssystem ab und auch davon, welche GUI-Programme Ihnen zur Verfügung stehen. In diesem Tutorial mache ich alles über die Befehlszeile - und ich ermutige Sie, dies ebenfalls zu tun. Am Ende des Artikels werde ich einige GUI-Programme vorschlagen, die Sie verwenden können, aber normalerweise verwende ich sie nur, um die Verzweigungen des Repositorys zu visualisieren.
Wie zuvor erwähnt, checken Sie mit Git keine Kopie Ihres Plug-Ins aus. Sie klonen das Repository mit einem Verlauf der vorgenommenen Änderungen sowie aller zugehörigen Verzweigungen und Tags. Schritt 1 ist das Klonen des von WordPress gehosteten Repositorys Ihres Plug-Ins. Als Beispiel werde ich ein Plug-In "Post Type Archives Link" veröffentlichen, das auf einem vorherigen Tutorial basiert. Öffnen Sie also Ihre Befehlszeilenschnittstelle (sobald Sie in das WordPress-Repository aufgenommen wurden), und navigieren Sie zu dem Ort, an dem Sie die lokale Version Ihres Plug-Ins speichern möchten. Ich werde es in einem Ordner namens 'Plugins'. Dort möchten wir Git mitteilen, wo er unser Plug-In finden kann. Zum Zeitpunkt des Schreibens gibt es fast 20.000 Plug-Ins im WordPress-Repository und über 500.000 Versionen. Wir möchten nicht darauf warten, dass Git jedes dieser Elemente durchsucht, um unser Plug-in zu finden. Wir finden also zunächst heraus, mit welcher Revision unser Plug-In beginnt (wir wollen die gesamte Geschichte). Dazu erhalten wir das erste Protokoll Ihres Plug-Ins (wenn es ursprünglich zum Repository hinzugefügt wurde):
svn log -r 1: HEAD --limit 1 http://plugins.svn.wordpress.org/ihr-plug-in-name
Es wird eine Weile nachdenken und dann sollten Sie so etwas sehen:
r520657 | Plugin-Master | 2012-03-19 03:56:31 +0000 (Mo, 19 Mär 2012) | 1 Zeile
Diese erste Nummer, '520657' für mein Plug-In, ist die erste Revision. Wir werden es im nächsten Befehl verwenden, mit dem Git aufgefordert wird, den Verlauf unseres Plug-Ins zu klonen. Ersetzen Sie XXXXXX durch Ihre Revisionsnummer.
git svn klon -s -rXXXXXX --no-minimier-url http://plugins.svn.wordpress.org/ihr-plug-in-name cd ihr-plugin-name git svn holen git svn rebase ab
Das '-s
'gibt Git an, das Standardlayout (Tag, Trunk, Branches) eines SVN-Repositorys zu erwarten. Das '--No-Minimierungs-URL
'stoppt es außerhalb des Plug-In-Ordners. Stellen Sie sicher, dass es nicht fehlt. Wenn Sie es weglassen, können Sie das gesamte WordPress Plug-In-Repository kopieren. Das -rXXXXXX
sagt Git, nach welcher Revision gesucht werden soll. Wenn Sie dies nicht angeben, wird Git den gesamten Verlauf des Repositorys durchsuchen. Das sind über 500.000 Versionen. Ich habe das einmal weggelassen und es dauerte ungefähr zwei Stunden. Damit sollte es nur wenige Minuten dauern.
Sobald es fertig ist, sollten Sie feststellen, dass ein Ordner mit dem Namen '' erstellt wurde.Ihr-Plugin-Name'in Ihrem' Plugins 'Ordner. Lass uns ein bisschen erkunden. Navigiere zu 'Ihr-Plugin-Name'Ordner und führen Sie einen Befehl aus, um zu sehen, welche' Zweige 'vorhanden sind:
Git-Zweig -a
Dies listet alle Niederlassungen auf, lokal und entfernt. Der einzige lokale Zweig sollte Master sein (das Sternchen zeigt an, dass dies der Zweig ist, in dem Sie sich befinden). Die anderen Zweige sind der 'Trunk' und, falls vorhanden, ein Zweig für jedes Tag (SVN behandelt Tags als Zweige, aber Git ist ein bisschen schlauer als das)..
Gehen Sie zu Ihrem 'lokalen Ordner', 'plugins / dein-plugin-name', sollten Sie Ihre Plug-In-Dateien sehen (falls vorhanden). Bevor Sie dort Dateien erstellen oder bearbeiten, erstellen Sie einen separaten Zweig, an dem Sie arbeiten können.
Aktualisieren: Die obigen Befehle wurden aufgrund eines Problems aktualisiert, das in den folgenden Kommentaren von Neerav und John Eckman angegeben wurde. Der obige Code spiegelt jetzt die Empfehlung von Stephen Harris wider.
Die Verwendung von Git hat den Vorteil, dass Sie auf einfache Weise eine Version Ihres Plug-Ins auf GitHub verwalten können. Dadurch ist Ihr Plug-In für andere Entwickler zugänglicher, die Verbesserungen vorschlagen oder sogar eigene Änderungen vornehmen können, die Sie in Ihr eigenes Repository übernehmen könnten. Wenn Sie bereits mit GitHub eingerichtet sind, möchten Sie möglicherweise Ihr Plug-In auf Ihr Konto verschieben. Erstellen Sie dazu zunächst ein neues Repository in Ihrem GitHub-Konto und fügen Sie dieses als Remote-Zweig Ihrem lokalen Repository hinzu:
git remote add origin [email protected]:/ .git
'dein Benutzername'bezieht sich auf Ihren GitHub-Benutzernamen und'Ihr Repo-Name'bezieht sich auf den Namen des Repositorys, das Sie in GitHub erstellt haben. Dann pushen Sie einfach Ihr lokales Repository:
git Push Ursprungsmaster
Wir werden einen neuen Zweig "Arbeit" schaffen. In diesem Zweig werden wir unser Plug-In ändern, Änderungen vornehmen und Funktionen hinzufügen usw. Dies bedeutet, dass sich unser 'Master'-Zweig in seinem ursprünglichen Zustand befindet. Dadurch können wir zurück zum Master-Zweig wechseln und wieder verzweigen. Angenommen, es liegt ein schwerwiegender Fehler in Ihrem Plug-In vor, während Sie an neuen Funktionen in Ihrem Zweig arbeiten. Sie können zurück zu Ihrem 'Master'-Zweig wechseln (der keine der Funktionen enthält, an denen Sie gerade arbeiten), einen Fix für den Fehler festlegen und diesen dann in das WordPress-Repository verschieben. Sie können dann wieder zu Ihrem Arbeitszweig wechseln und dort weitermachen, wo Sie aufgehört haben. (Hinweis: Git erstellt keine Kopien Ihrer Dateien - in Ihrem lokalen Ordner befindet sich immer nur eine Gruppe von Dateien. Was diese Dateien enthalten, hängt davon ab, in welchem Zweig Sie sich befinden.)
Tatsächlich ist es eine gute Idee, für jedes neue Feature, das Sie Ihrem Plug-In hinzufügen, einen Zweig zu erstellen. Wenn Sie fertig sind, führen Sie diese einfach wieder in den Master-Zweig ein. Wenn dies zu „Konflikten“ führt, werden Sie aufgefordert, diese manuell zu lösen.
Erstellen Sie zuerst einen Zweig namens "Arbeit":
Git Zweigarbeit
Dann "check out" (gehe zu) Zweig "Arbeit":
git checkout arbeiten
In einer Nachricht erfahren Sie, dass Sie zum Zweig 'Arbeit' gewechselt sind. Verwenden Sie jetzt Ihren bevorzugten Texteditor, um die Dateien des Plug-Ins in Ihrem lokalen Ordner zu öffnen (oder erstellen Sie sie, falls noch keine vorhanden sind). Nachdem Sie einige erstellt haben, möchten Sie möglicherweise sehen, welche Dateien Sie geändert haben. Sie tun dies mit dem einfachen Befehl:
Git-Status
Dadurch werden Änderungen von angezeigt verfolgt und untracked Dateien. Möglicherweise gibt es Dateien, die Git nicht stört (z. B. temporäre Dateien). Wenn Sie dem Ordner jedoch neue Dateien hinzugefügt haben, müssen Sie Git diese mitteilen. Sie können dies mit dem Befehl tun:
git add
Ich habe zwei Dateien erstelltpost-type-archive-links.php' und 'metabox.js'in meinem lokalen Ordner, also habe ich sie hinzugefügt, damit Git sie aufspüren kann. Sie müssen sicherstellen, dass Sie Ihre Daten verfolgen Readme Datei.
Sie können auch die Änderungen seit Ihrem letzten Commit anzeigen (hier ist ein GUI-Programm sehr praktisch)
git diff
Wenn Sie die Änderungen in Ihr lokales Repository übernehmen möchten:
git commit -a -m "Abc in xyz"
Bereitstellung eines (detailliert) Meldung der im Commit enthaltenen Änderungen.
Bei der Durchführung von Änderungen können (und sollten) Sie so oft wie möglich festlegen - jedoch auf logische Weise, vorzugsweise mit einem Commit für jedes "Ding", das Sie tun. Sie sollten auch sicherstellen, dass Ihre Commits keine offensichtlichen Fehler enthalten. 'Einen Commit rückgängig machen' ist schnell und problemlos: Sie tun dies, indem Sie einen weiteren Commit ausführen, der den vorherigen rückgängig macht:
git kehrt HEAD zurück
(Sie werden aufgefordert, eine Nachricht zur Beschreibung dieses Commits anzugeben.)
Angenommen, Sie befinden sich jetzt in einer Position, in der Sie alle Änderungen in das SVN-Repository übernehmen möchten. Bevor wir dies tun, müssen wir uns etwas vor Augen halten. Git ermutigt Sie, sich häufig zu verpflichten, und es ist eine gute Praxis, dies zu tun… für Entwicklung. Ihr WordPress-Plugin-Repository ist jedoch dafür da Verteilung. Es braucht nicht jedes Commit. Tatsächlich tut es wirklich nicht wollen Es ist auch, als Otto (WordPress-Kernmitarbeiter) warnt:
"Wenn ich Sie dabei erwische [jedes Commit separat drückt], dann werde ich Sie von WordPress.org verbannen. Für den SVN ist nur Ihre endgültige Arbeitsversion erforderlich, nicht die gesamte Geschichte der Hunderte von Änderungen, die Sie mit Git vorgenommen haben. Reduzieren Sie Ihre Änderungen zu einem einzigen Commit. "
Um dies zu vermeiden, führen wir alle Commits zu einem Commit zusammen, wenn wir bereit sind, zum WordPress-Repository zu pushen. Dafür gibt es mehrere Möglichkeiten. Wir werden unsere Veränderungen aus unserem Arbeitszweig in unseren Hauptzweig einbinden (und gleichzeitig zerquetschen). Dann erscheinen alle unsere Änderungen als ein Commit für den Master-Zweig. Dann löschen wir den Arbeitszweig und schieben den Masterzweig in den SVN-Trunk unseres Plug-Ins.
Zunächst wollen wir zurück zum Master-Zweig wechseln:
Git Checkout-Master
Squash und mischen Sie die Arbeitszweigänderungen in den Master ein:
git merge --squash work
Wenn Änderungen am Master-Zweig vorgenommen wurden, kann es zu Konflikten bei der Zusammenführung kommen. Sie werden aufgefordert, diese Konflikte manuell zu lösen, bevor die Zusammenführung abgeschlossen werden kann. Nach dem Zusammenführen übernehmen Sie die Änderungen (dieses Commit enthält alle Commits aus unserem Arbeitszweig):
git commit -a -m "Änderungen vorgenommen a, b, c, d"
Zum Schluss löschen wir den Arbeitszweig
Git-Zweig -D Arbeit
Wenn Sie mehrere Zweige zusammenführen möchten, können Sie dies für jeden Zweig tun. Es gibt alternative Methoden, die ich nicht behandeln werde, um Ihren Verlauf zu glätten (z. B. interaktive Umbasierung)..
An diesem Punkt könnten Sie, wenn Sie wollten, Ihre letzten Änderungen in Ihr GitHub-Konto übernehmen:
git push -u Ursprungsmeister
Um zum WordPress-Repository zu gelangen, stellen wir zunächst sicher, dass unser lokales Repository auf dem neuesten Stand ist:
git svn rebase
Git holt dann Ihr Subversion-Repository ab und führt dort alle Änderungen mit den gerade vorgenommenen Änderungen zusammen. Normalerweise sollten keine Änderungen am WordPress-Repository vorgenommen werden. Daher sollte die folgende Meldung angezeigt werden: Aktueller Zweigmaster ist auf dem neuesten Stand.
Jetzt können wir unsere Änderungen in das WordPress-Repository verschieben
git svn dcommit
Git fordert Sie möglicherweise auf, Ihre WordPress.org-Anmeldeinformationen einzugeben. Nach der Eingabe werden Ihre Änderungen in das WordPress-Repository übernommen. In Kürze sollten Sie eine E-Mail vom WordPress-Repository erhalten, in der Sie über die Commits informiert werden.
Derzeit befinden sich diese Änderungen im Kofferraum. Was ist, wenn wir eine neue Version unseres Plug-Ins mit Tags versehen möchten? Wenn Sie die nächste Version für Ihr Plug-In erstellen, sollten Sie die ReadMe-Datei aktualisiert haben, sodass das Stable-Tag auf Ihre neue Version verweist (beispielsweise '2.0'). Sie sollten auch die Header-Informationen Ihres Plug-Ins in Ihrem aktualisiert haben Ihr-Plugin-Name.php Datei. Wenn Sie dies vergessen haben, führen Sie einfach die oben beschriebene Prozedur durch, nachdem Sie diese Änderungen vorgenommen haben.
Sobald Ihr "Trunk" vollständig auf dem neuesten Stand ist (einschließlich der neuesten Versionsinformationen), müssen Sie einfach das neue Tag im WordPress-Repository erstellen:
git svn tag "2.0"
Dies kopiert alles in Ihren Kofferraum Tags / 2,0 (was Sie normalerweise in SVN mit erreichen svn cp trunk tags / 2.0
).
Wenn Sie das Release in Ihrem lokalen Repository mit einem Tag versehen möchten:
git tag -a 2.0 -m "Tagging 2.0"
Vergewissern Sie sich ähnlich wie beim WordPress-Repository, dass unsere Repositorys übereinstimmen, und drücken Sie dann unsere Änderungen und Tags:
git pull --rebase ursprung master git push ursprung master git push ursprung --tags
Schließlich gibt es ein paar Git-Spickzettel, die sich als nützlich erweisen können: hier und hier.