Om du har en plug-in värd i WordPress-förvaret så är du ganska bekant med SVN och några av dess kommandon. I den här handledningen visar jag dig hur du kan använda Git, ett annat versionsstyrningssystem populärt av GitHub, för att publicera och underhålla din plugin.
Git och SVN är båda exemplen på Version Control Systems. WordPress 'repository använder det senare (om du har ett plugin-program som är värd på WordPress kommer du att känna till "checka in" för att göra ändringar i det här arkivet). De båda låter dig spåra ändringar i din kod, men det finns stora skillnader mellan dem på hur de gör det här.
SVN bygger på ett enda "centralförvar" av koden (i vårt sammanhang: WordPress plug-in repository). Varje gång du vill redigera plugin-modulen måste du göra en lokal kopia, göra ändringarna och sedan "checka in" dessa ändringar i WordPress-förvaret.
Git är ett decentraliserat versionsstyrningssystem. Snarare än att ha bara en lokal kopia av din plugin-modul, har du en hel klon i ditt plugin-arkiv, komplett med alla dess ändringar. Förvaret finns nu i sin egen rätt på din dator. Du kan begå och spåra ändringar, återställa ändringar eller "filialera" din plugin-modul i olika riktningar allt på din lokala dator. Bara när du är glad att uppdatera plugin-modulen trycker du sedan på dina ändringar i ditt WordPress-förråd för att göra dem offentliga.
I den här handledningen antar du att du har en plugin värd på WordPress-plugin-arkivet, eller åtminstone du har fått din värdförfrågan godkänd. Om du inte är säker på hur du får din plug-in värd av WordPress, föreslår jag att du läser vår artikel om hur man publicerar till WordPress-pluginförvaret.
Det finns många argument för och emot att använda Git över SVN (liksom decentraliserade versionsstyrningssystem i allmänhet). Många av dessa härrör från det fundamentalt olika sättet Git och SVN spår ändras. En utmärkt, djupgående analys av Git och SVN finns i CodeForests Git vs SVN-artikel, men för WordPress-utvecklaren:
En nackdel med att använda Git, får det att spela bra med ett SVN-arkiv. Det är inte så svårt tack vare git svn
, och den här artikeln är här för att vägleda dig genom den.
Om du inte redan har det vill du installera Git. Hur man installerar Git är täckt ganska bra i Git Community-boken och Pro Git-boken (båda excellent resurser om du är ny på Git). Hur man installerar Git kommer att bero på ditt operativsystem, liksom vilka GUI-program som är tillgängliga för dig. I denna handledning ska jag göra allt via kommandoraden - och jag uppmuntrar dig att göra detsamma. I slutet av artikeln föreslår jag några GUI-program du kan använda, men vanligtvis använder jag dem bara för att hjälpa till att visualisera filialens grenar.
Som tidigare nämnts, gör du inte med Git en "kopia" av din plugin-du klonar förvaret, komplett med en historia av de ändringar som gjorts och alla dess grenar och taggar. Steg 1 klickar sedan på plug-inens WordPress-värdförteckning. Som ett exempel kommer jag att publicera ett plugin för Post Type Archives Link baserat på en tidigare handledning. Så (när du väl har tagits emot på WordPress-förvaret) öppnar du kommandoradsgränssnittet och navigerar till var du vill lagra den lokala versionen av din plugin. Jag ska lägga den in i en mapp som heter "plugins'. En gång där vill vi berätta för Git var att hitta vår plugin. Vid skrivetiden finns det nästan 20 000 plugin-program som finns i WordPress-förvaret och över 500 000 revisioner. Vi vill inte vänta på att Git trawl igenom var och en för att hitta plugin-modulen. Så först och främst hittar vi vilken översyn vår plugin startar (vi vill ha hela historien). För att göra detta får vi den första loggen i din plugin-modul (när den ursprungligen lagts till i förvaret):
svn log -r 1: HEAD - limit 1 http://plugins.svn.wordpress.org/your-plug-in-name
Det kommer att tänka ett tag och då bör du se något så här:
r520657 | plugin-master | 2012-03-19 03:56:31 +0000 (mån, 19 mars 2012) | 1 linje
Det första numret, "520657" för min plugin, är den första versionen. Vi använder den i nästa kommando som berättar Git att klona pluginprogrammets historia. Ersätt XXXXXX med ditt revisionsnummer.
git svn klon -s -rXXXXXX - inte-minimera-url http://plugins.svn.wordpress.org/your-plug-in-name cd your-plugin-namn git svn hämta git svn rebase
"-s
"berättar Git att förvänta sig standard (Tag, Trunk, Branches) layout av ett SVN-arkiv. "--no-minimera-url
'stoppar det ser utanför din plugin-mapp. Se till att det inte saknas. Om du lämnar det kan du sluta kopiera hela WordPress-plugin-arkivet. De -rXXXXXX
berättar Git vilken revision att leta efter. Om du lämnar det kommer Git att söka igenom hela förvarets historia. Det är över 500 000 revisioner. Jag lämnade det här en gång och det tog ungefär två timmar. Med den i, bör det bara ta några minuter.
När det är klart borde du upptäcka att det har skapats en mapp som heter "your-plug-in-namn"i mappen" Plugins ". Låt oss utforska lite. Navigera till "your-plug-in-namn'mapp och kör ett kommando för att se vilka "grenar" existerar:
git filial -a
Detta kommer att lista alla grenar, lokala och fjärranslutna. Den enda lokala filialen ska vara Master (stjärnan indikerar att detta är filialen du är på). Den andra filialen är "stammen" och, om du har någon, en gren för varje tagg (SVN behandlar taggar som grenar, men Git är lite smartare än det).
Gå till din "lokala mapp", "plugins / din-plugin-namn', bör du se dina plug-in-filer (om det fanns några). Innan vi skapar eller redigerar några filer där, ska vi skapa en egen filial för att arbeta vidare.
Uppdatering: Kommandona ovan har uppdaterats på grund av ett problem som noteras i kommentarerna nedan av Neerav och John Eckman. Koden ovan återspeglar nu Stephen Harris rekommendation.
En av fördelarna med att använda Git är att du enkelt kan behålla en version av din plugin på GitHub. Detta gör din plugin mer tillgänglig för andra utvecklare, som kan föreslå förbättringar eller till och med göra egna ändringar som du kan dra in i ditt eget förråd. Om du redan är konfigurerad med GitHub kan du vid det här tillfället trycka in din plugin på ditt konto. För att göra det måste du först skapa dig ett nytt förvar på ditt GitHub-konto och lägg sedan till det som en fjärranslutning till ditt lokala förråd:
git remote add ursprung [email protected]:/ .git
'ditt användarnamn'refererar till ditt GitHub användarnamn och'your-repo-namn'hänvisar till namnet på det förråd du skapat på GitHub. Då trycker du bara på ditt lokala förråd:
git push origin master
Vi ska skapa en ny filial "arbete". Det är inom denna gren att vi ska ändra vår plugin, göra ändringar och lägga till funktioner etc. Det betyder att vår "Master" -gren hålls i sitt ursprungliga tillstånd. Detta gör att vi kan växla tillbaka till huvudgrenen och avgrena igen. Antag särskilt att det finns en stor bugg i din plugin medan du arbetar med några nya funktioner i din "work" -gren. Du kan växla tillbaka till din "master" -gren (som inte innehåller någon av de funktioner du arbetar för närvarande), begära en åtgärd för buggan och tryck sedan på den i WordPress-förvaret. Du kan sedan växla tillbaka till din arbetsgren och fortsätt där du slutade. (Notera: Git skapar inte kopior av dina filer - det finns alltid bara en uppsättning filer i din lokala mapp. Vad dessa filer innehåller beror på vilken filial du är på.)
Det är faktiskt en bra idé att skapa en filial för varje ny funktion som du lägger till i din plugin. När du är klar sammanfogar du bara dessa tillbaka till huvudgrenen. Om detta orsakar några "konflikter" blir du ombedd att lösa dem manuellt.
Skapa först en filial som heter "arbete":
git branch arbete
Sedan "kolla in" (gå till) filial "arbete":
git checkout arbete
Ett meddelande kommer att berätta att du har bytt till "jobbet" -grenen. Använd nu din favorittextredigerare för att öppna dina plugin-filer i din lokala mapp (eller skapa dem om det inte finns några). När du har gjort några kanske du vill se vilka filer du har ändrat. Du gör detta med det enkla kommandot:
git status
Detta kommer att lista ändringar av spåras och spårats filer. Det kan finnas filer som du inte vill att Git stöter på spårning (som tillfälliga filer), men om du har lagt till några nya filer i mappen måste du berätta för Git att spåra dem. Du kan göra detta med kommandot:
git lägg till
Jag har skapat två filer "post-typ-archive-links.php"och"metabox.js"i min lokala mapp, så jag har lagt till dem för att berätta för Git att spåra dem. Du måste se till att du spårar din readme fil.
Du kan också se ändringarna sedan ditt senaste engagemang (det här är ett GUI-program som blir väldigt användbart)
git diff
När du vill begå ändringarna i ditt lokala förråd:
git commit -a -m "Gick aby till xyz"
tillhandahålla en (detaljerad) meddelande om ändringarna i commit.
När du gör förändringar kan du (och borde) begå så ofta som möjligt - men på ett logiskt sätt, helst med en begå för varje "sak" du gör. Du bör se till att det inte finns några uppenbara fel i dina förpliktelser heller. "Ångra" ett engagemang är snabbt och smärtfritt: Du gör det genom att utföra ett annat engagemang som vänder tillbaka den föregående:
git återställ HEAD
(Du kommer att bli uppmanad till ett meddelande för att beskriva detta engagemang.)
Antag att du nu är i en position där du vill driva alla dina ändringar i SVN-förvaret. Innan vi gör det måste vi bara tänka på något. Git uppmuntrar dig att begå ofta, och det är bra att göra det ... för utveckling. Däremot finns ditt WordPress-plugin-arkiv distribution. Det behöver inte varje engagemang. Faktum är att det verkligen inte gör det vilja det heller, som Otto (WordPress-kärnbidragare) varnar:
"Om jag fångar dig på det [trycker varje engagemang separat], så kommer jag att förbjuda dig från WordPress.org. SVN behöver bara din slutliga arbetsversion åtagit sig, inte hela hundravis av förändringar som du gjort med Git. Flytta dina ändringar till ett enda engagemang. "
För att undvika detta, när vi är redo att trycka på WordPress-förvaret, sammanfogar vi alla förpliktelser i ett engagemang. Det finns ett par sätt att göra detta. Vi ska slå samman (och samtidigt squash) våra förändringar från vår arbetsgren till vår huvudgren. Då visas alla våra förändringar som en begåv på huvudgrenen. Vi tar sedan bort arbetsgrenen och trycker på huvudgrenen till vår plugin SVN-bagage.
Först vill vi byta tillbaka till huvudgrenen:
git checkout mästare
Sedan squash och slå samman arbetsgrenen ändras till mästaren:
git-sammanslagning - kvittningsarbete
Om det hade gjorts ändringar i huvudgrenen, kan det hända att konflikten sammanfaller. Du uppmanas att manuellt lösa dessa konflikter innan sammanslagningen kan slutföra. När du har gått ihop, begå ändringarna (den här commit kommer att innehålla alla förpliktelser från vår arbetsgren):
git commit -a -m "Made ändringar a, b, c, d"
Slutligen tar vi bort arbetsgrenen
git grenen -D arbete
Om du har flera grenar vill du gå in i, så kan du göra det för var och en av dem. Det finns alternativa metoder, som jag inte kommer att täcka, att utplåna din historia (som interaktiv återhämtning).
Vid den här tiden kan du, om du vill, trycka på dina senaste ändringar i ditt GitHub-konto:
git push -u-ursprungsmästare
För att trycka på WordPress-förvaret kontrollerar vi först att vårt lokala arkiv är "aktuellt":
git svn rebase
Git kommer sedan hämta din subversion repository och slå samman förändringar där med de förändringar som vi just gjort. Normalt bör det inte finnas några ändringar i WordPress-förvaret, så du borde se meddelandet: Aktuell grenmästare är uppdaterad.
Nu kan vi driva våra ändringar i WordPress-förvaret
git svn dcommit
Git kan sedan be dig om dina WordPress.org-referenser. När du har skrivit in ändras dina ändringar till WordPress-förvaret. I korthet bör du få ett e-postmeddelande från WordPress-förvaret och informera dig om förpliktelserna.
För tillfället kommer dessa förändringar att ligga i bagaget. Vad händer om vi vill ta en ny version av pluginprogrammet? När du skapar nästa version för din plugin bör du ha uppdaterat ReadMe-filen, så att den stabila taggen pekar på din nya version (säg '2.0'). Du borde också ha uppdaterat din plugin-rubrikinformation i din your-plug-in-name.php fil. Om du har glömt att göra detta, bara springa igenom ovanstående procedur, har gjort dessa ändringar.
När din "bagage" är helt uppdaterad (inklusive den senaste versionen) måste vi helt enkelt skapa den nya taggen i WordPress-förvaret:
git svn tagg "2.0"
Detta kopierar allt i din bagage i taggar / 2,0 (vad du normalt uppnår i SVN med svn cp trunk tags / 2.0
).
Om du vill tagga utgåvan i ditt lokala förråd:
git tag -a 2.0 -m "Tagging 2.0"
Liknande vad vi gjorde med WordPress-förvaret, se till att våra arkiv överens, tryck sedan på våra ändringar och taggar:
git pull -rebase ursprung master git push origin master git push origin - taggar
Slutligen finns det ett par Git "fusk" som kan komma till nytta: här och här.