The 10 commandments of good.docx
- 文档编号:26742721
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:14
- 大小:484.61KB
The 10 commandments of good.docx
《The 10 commandments of good.docx》由会员分享,可在线阅读,更多相关《The 10 commandments of good.docx(14页珍藏版)》请在冰豆网上搜索。
The10commandmentsofgood
Ahsourcecontrol,ifthere’samoreessentialtoolwhichindiscriminatelyspansprogramminglanguageswithoutfavour,I’myettoseeit.It’sanessentialcomponentofhowsomanyofuswork;thelifebloodofmanydevelopmentteams,ifyoulike.Sowhydoweoftengetitsowrong?
Whyaresomeofthereallycore,fundamentalsofversioncontrolsystemsoftensopoorlyunderstood?
Iboilitdownto10practices–or“commandments”ifyoulike–whichoftenbreakdownorarenotproperlyunderstandtobeginwith.Theseareallrelevanttoversioncontrolproductsofalltypesandprogramminglanguagesofallflavours.I’llpicksomeexamplesfromSubversionand.NETbutthey’rebroadlyapplicabletoothertechnologies.
1.Stoprightnowifyou’reusingVSS– juststopit!
It’sdead.Letitgo.Noreally,it’sbeenonlifesupportforyears,takingitsdyinggaspsasyoungerandfitterVCStoolshaverocketedpastit.Andnowit’sreallyseriouslyabouttodieasMicrosoft finallypullstheplugnextyear (afterseveralstaysofexecution).
Inallfairness,VSSwasagreattool.In1995.ItjustsimplygoteclipsedbytoolslikeSubversionthenthedistributedguyslikeGitandMercurial.Microsofthasclearlysignalleditsintenttosupersedeitformanyyearsnow–thewholeTFSthingwasn’texactlyanaccident!
ThepointisthatVSSisverybroadly,extensively,almostunanimouslydespisedduetoaseriesofmajorshortcomingsbytoday’sstandards.Colloquiallyknownas Microsoft’ssourcedestructionsystem,somehowitmanagestojustkeepclingingontolifedespiteextensivelydocumentedglitches,shortcomingsandessentialfunctionality(bytoday’sstandards),whichsimplyjustdoesn’texist.
2.Ifit’snotinsourcecontrol,itdoesn’texist
Repeatthismantradaily–“Theonlymeasureofprogressisworkingcodeinsourcecontrol”.Untilyourworkmakesanappearanceintheonetruesourceofcodetruth–thesourcecontrolrepositoryfortheproject–itsimplydoesn’texist.
Sure,you’vegotitsecretedawaysomewhereonyourlocalmachinebutthat’snotreallydoinganyoneelseanygoodnow,isit?
Theycan’ttakeyourversion,theycan’tmergetheirs,youcan’tdeployit(unless you’redeployingitwrong)andyou’reoneSSDfailureawayfromlosingitallpermanently.
Onceyoutakethemindsetofitnotexistinguntilit’scommitted,awholebunchofothergoodpracticesstarttofallintoplace.Youbreaktasksintosmallerunitssoyoucancommitatomically.Youintegratemorefrequently.Youinsureyourselfagainstthosepeskylocalhardwarefailures.
Butmoreimportantly(atleastforyourteamlead),youshowthatyou’reactuallyproducingsomething.Decliningburndownchartsortickedofftaskslistsaregreat,butwhatdotheyactuallyreconcilewith?
Unlesstheycorrelatewithworkingcodeinsourcecontrol,theymeanzip.
3.Commitearly,commitoftenanddon’tsparethehorses
Furthertothepreviouspoint,theonlywaytoavoid“ghostcode”–thatwhichonlyyoucanseeonyourlocalmachine–istogetitintoVCSearlyandoftenand don’tsparethehorses.Addressingtheissuesfromthepreviouspointisonethingtheearlyandoftenapproachachieves,buthere’afewotherswhichcanmakeasignificantdifferencetothewayyouwork:
1.Everycommittedrevisiongivesyouarollbackposition. Ifyouscrewupfundamentally(don’tlie,wealldo!
),areyourollingbackonehourofchangesoroneweek?
2.Theriskofamergenightmareincreasesdramaticallywithtime. Mergingisneverfun.Ever.Whenyou’venotcommittedcodefordaysandyousuddenlyrealiseyou’vegot50conflictswithotherpeople'schanges,you’renotgoingtobeahappycamper.
3.Itforcesyoutoisolatefeaturesintodiscreteunitsofwork. Let’ssayyou’vegot a3mandayfeaturetobuild.Oftentimespeoplewon’tcommituntiltheendofthatperiodbecausethey’retryingtobuildthewholeboxanddiceintoonelogicalunit.Ofcourseataskaslargeasthisisinevitablycomprisedofsmaller,discretefunctionsandcommittingfrequentlyforcesyoutoidentifyeachofthese,buildthemonebyoneandcommitthemtoVCS.
Whenyouworkthisway,yourcommithistoryinevitablystartstoresembleasemi-regularpatternofmultiplecommitseachworkday.Ofcourseit’snotalwaysgoingtobeaconsistentpattern,therearetimeswestopandrefactororgothroughtestingphasesoranyothermannerofperfectlylegitimateactivitieswhichinterruptthenormaldevelopmentcycle.
However,whenIseeanindividual–andparticularlyanentireproject–whereIknowweshouldbeinanormaldevelopmentcycleandthereareentiredaysorevenmultipledayswherenothingishappening,Igetveryworried.I’mworriedbecauseasperthepreviouspoint,nomeasurableworkhasbeendonebutI’malsoworriedbecauseitusuallymeanssomethingiswrong.Oftendevelopmentishappeninginavery“boiltheocean”sortofway(i.e.tryingtodoeverythingatonce)orabsolutelynothingofvalueishappeningatallbecausepeoplearestuckonaproblem.Eitherway,somethingiswrongandsourcecontroliswavingabigredflagtoletyouknow.
4.Alwaysinspectyourchangesbeforecommitting
Committingcodeintosourcecontroliseasy–tooeasy!
(Makesyouwonderwhythepreviouspointseemstobesohard.)Anyway,whatyouendupwithischangesandfilesbeingcommittedwithrecklessabandon.“There’sachangesomewherebeneathmyprojectroot–quick–getitcommitted!
”
Whathappensisone(orboth)oftwothings:
Firstly,peopleinadvertentlyendupwithawholebunchofjunkfilesintherepository.Someoneseesawindowliketheonebelow,clicks“Selectall”andbingo–therepositorygetspollutedwiththingslikedebugfoldersandotherjunkthatshouldn’tbeinthere.
Orsecondly,peoplecommitfileswithoutcheckingwhatthey’veactuallychanged.Thisisrealeasytodoonceyougetthingslikeconfigurationorprojectdefinitionfileswheretherearealotgoingonatonce.Itmakesit really easytoinadvertentlyputthingsintotherepositorythatsimplyweren’tintendedtobecommittedandthenofcoursethey’requitepossiblytakendownbyotherdevelopers.Canyoureallyremember everything youchangedinthatconfigfile?
Thesolutionissimple:
youmustinspecteachchangeimmediatelybeforecommitting.Thisiseasierthanitsounds,honest.Thewhole“inadvertentlycommittedfile”thingcanbelargelymitigatedbyusingthe“ignore”featuremanysystemsimplement.You never wanttocommittheThumbs.dbfilesojustignoreitandbedonewithit.Youalsomaynotwanttocommiteveryfilethathaschangedineachrevision–sodon’t!
Asforchangeswithinfiles,you’veusuallygotaprettyniftydifffunctionintheresomewhere.WhyamIcommittingthatWeb.configfileagain?
Ah,Iremembernow,Iwantedtodecreasethemaximuminvalidpasswordattemptsfrom5downto3.Oh,andIplayedaroundwithadummyloginpagewhichIdefinitely don’t wanttoputintotherepository.Thispracticeofpre-commitinspectionalsomakesitmucheasierwhenyoucometothenextsection…
5.Remembertheaxe-murdererwhenwritingcommitmessages
There’sanoldadage(sourceunknown),alongthelinesof“Writeeverycommitmessagelikethenextpersonwhoreadsitisanaxe-wieldingmaniacwhoknowswhereyoulive”.IfIwasthatmaniacandI’mdelvingthroughreamsofyourcodetryingtotrackdownabugandallIcanunderstandfromyourcommitmessageis“updatedsomecodes”,lookout,I’mcomingafteryou!
Thewholeideaofcommitmessagesistoexplainwhyyoucommittedthecode. Everytimeyoumakeanychangetocode,you’redoingitforareason.Maybesomethingwasbroken.Maybethecustomerdidn’tlikethecolourscheme.Maybeyou’rejusttweakingthebuildconfiguration.Whateveritis,there’sareasonforitandyouneedtoleavethisbehindyou.
Why?
Wellthereareafewdifferentreasonsandtheydifferdependingonthecontext.Forexample,usinga“blame”featureorothersimilarfunctionalitywhichexposeswhochangedwhatand hopefully,why.Ican’trememberwhatIwasdoingintheWeb.configofthisproject18monthsagoorwhyIwasmuckingaroundwithappsettings,butbecauseIleftadecentcommitmessage,itallbecomesverysimple:
It’sasimilarthingforlookingatchangesovertime.WhetherIwanttoseetheentirehistoryofafile,likebelow,orIjustwanttoseewhattheteamaccomplishedyesterday,havingadescriptivepapertrailofcommentsmeansitdoesn’ttakemuchmorethanacasualglancetogetanideaofwhat’sgoingon.
Andfinally,commitmessagesare absolutelyinvaluable whenitcomestotrackingdownerrors.Forexample,gettingtothebottomofwhythebuildisbreakinginyourcontinuousintegrationenvironment.Obviouslymyexampleisovertlyobvious,butthepointisthatbringingthisinformationtothesurfacecanturntrickyproblemsintoabsoluteno-brainers.
Withthisinmind,herearesomeanti-patternsofgoodcommitmessages:
1.Someshit.
2.Itworks!
3.fixsomefuckingerrors
4.fix
5.Fixedalittlebug...
6.Updated
7.typo
8.Revision1024!
!
Ok,IpickedthesealloutoftheStackOverflowquestionabout WhatistheWORSTcommitmessageyouhaveeverauthored butthethingisthatnoneofthemarethatdissimilartomanyofthemessagesI’veseeninthepast.Theytellyou absolutelynothing aboutwhathasactuallyhappenedinthecode;they’rejunkmessages.
Onelastthingaboutcommitmessages; subsequentcommitmessagesfromthesameauthorshouldneverbeidentical.Thereasonissimple:
you’reonlycommittingtosourcecontrolbecausesomethinghaschangedsincethepreviousversion.Yourcodeisnowinadifferentstatetothatpreviousversionandifyourcommitmessageis
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- The 10 commandments of good