Y GIT IZ BETTR THAN X

where "x" is one of
DIS SIET IZ HER CUZ I SEEM 2 BE SPENDIN LOT OV TIEM LATELY DEFENDIN GITSTERS AGAINST CHARGEZ OV FANBOYISM, BANDWAGONISM AN KOOLAID-THIRST. SO, HER IZ Y PEEPS R SWITCHIN 2 GIT FRUM X, AN Y U SHUD 2. JUS CLICK ON REASON 2 VIEW IT.
hg bzr svn perforce

CHEAP LOCAL BRANCHIN

PROBABLY GITS MOST COMPELLIN FEACHUR DAT RLY MAKEZ IT STAND APART FRUM NEARLY EVRY OTHR SCM OUT THAR IZ ITZ BRANCHIN MODEL. IT COMPLETELY DIFFERENT FRUM ALL OV TEH MODELS IM COMPARIN IT 2 HER, MOST OV WHICH RECOMMEND DAT TEH BEST BRANCH IZ BASICALLY CLONE OV TEH REPOSITORY IN NEW DIRECTORY.
GIT DOEZ NOT WERK LIEK DAT. GIT WILL ALLOW U 2 HAS MULTIPLE LOCAL BRANCHEZ DAT CAN BE ENTIRELY INDEPENDENT OV EACH OTHR AN TEH CREASHUN, MERGIN AN DELESHUN OV DOSE LINEZ OV DEVELOPMENT TAEK SECONDZ.
THIZ MEANZ THAT YU CAN DO THINGZ LIKEZ:
  • CREATE BRANCH TO TRY OUT AN IDEA, COMMIT FEW TIMEZ, SWITCH BACK 2 WHERE YOO BRANCHED FROM, APPLY PATCH, SWITCH BACK TO WHERE YOO AR EXPERIMENTINS, THEN MERGE IT IN.
  • HAVE BRANCH THAT ALWAYZ CONTAINZ ONLY WHUT GOEZ TO PRODUCSHUN, ANUDDR THAT U MERGE WORK INTO FOR TESTINS AND SEVERAL SMALLR ONEZ FOR DAY T DAY WORK
  • CREATE NEW BRANCHEZ FOAR EACH NEW FEACHUR YOORE WORKINS ON, SO YU CAN SEAMLESSLY SWITCH BACK AND FORTH BETWEEN THEM, THEN DELETE EACH BRANCH WHEN THAT FEACHUR GETZ MERGED INTO YUR MAIN LINE.
  • CREATE BRANCH T EXPERIMENT IN, REALIZE ITZ NOT GOIN TO WORK AND JUS DELETE IT, ABANDONIN TEH WORK—WITH NOBODY ELSE EVR SEEINS IT (EVEN IF YOUZVE PUSHED UDDR BRANCHEZ IN TEH MEANTIME)
branches flowchart
IMPORTANTLY, WHEN U PUSH 2 REMOTE REPOSITORY, U DO NOT HAS 2 PUSH ALL OV UR BRANCHEZ. U CAN ONLY SHARE WAN OV UR BRANCHEZ AN NOT ALL OV THEM. DIS TENDZ 2 FREE PEEPS 2 TRY NEW IDEAS WITHOUT WORRYIN BOUT HAVIN 2 PLAN HOW AN WHEN THEY R GOIN 2 MERGE IT IN OR SHARE IT WIF OTHERS.
U CAN FIND WAYS 2 DO SUM OV DIS WIF OTHR SISTEMS, BUT TEH WERK INVOLVD IZ MUTCH MOAR DIFFICULT AN ERROR-PRONE. GIT MAKEZ DIS PROCES INCREDIBLY EASY AN IT CHANGEZ TEH WAI MOST DEVELOPERS WERK WHEN THEY LERN IT.
jamis twitter trevorturk twitter thillerson twitter boblmartens twitter mathie twitter
svn perforce

EVRYTHIN IZ LOCAL

DIS AR TEH BASICALLY TRUE OV ALL TEH DISTRIBUTD SCMS, BUT IN MAH EXPERIENCE EVEN MOAR SO WIF GIT. THAR IZ VRY LIL OUTSIDE OV FETCH, PULL AN PUSH DAT SPEEKZ IN ANY WAI WIF ANYTHIN OTHR THAN UR HARD DISK.
DIS NOT ONLY MAKEZ MOST OPERASHUNS MUTCH FASTR THAN U CUD BE USD 2, BUT IT ALSO ALLOWS U 2 WERK ON STUFF OFFLINE. DAT CUD NOT SOUND LIEK HOOJ DEAL, BUT IM ALWAYS AMAZD AT HOW OFTEN I AKSHULLY DO WERK OFFLINE. BEAN ABLE 2 BRANCH, MERGE, COMMIT AN BROWSE HISTORY OV UR PROJECT WHILE ON TEH PLANE OR TRAIN IZ VRY PRODUCTIV.
local repo to remote repo flowchart
EVEN IN MERCURIAL, COMMON COMMANDZ LIEK INCOMIN AN OUTGOIN HIT TEH SERVR, WHEREAS WIF GIT U CAN FETCH ALL TEH SERVERS DATA BEFORE GOIN OFFLINE AN DO COMPARISONS, MERGEZ AN LOGS OV DATA DAT IZ ON TEH SERVR BUT NOT IN UR LOCAL BRANCHEZ YET.
DIS MEANZ DAT IZ VRY EASY 2 HAS COPIEZ OV NOT ONLY UR BRANCHEZ, BUT ALSO OV EVRYONEZ BRANCHEZ DAT R WERKIN WIF U IN UR GIT REPOSITORY WITHOUT HAVIN 2 MES UR OWN STUFF UP.
bzr svn perforce

GIT IZ FAST

GIT IZ FAST. EVRYONE—EVEN MOST OV TEH HARD CORE USERS OV THEES OTHR SISTEMS—GENERALLY GIV GIT DIS TITLE. WIF GIT, ALL OPERASHUNS R PERFORMD LOCALLY GIVIN IT BIT OV LEG UP ON SVN AN PERFORCE, BOTH OV WHICH REQUIRE NETWORK ACCES 4 CERTAIN OPERASHUNS. HOWEVR, EVEN COMPARD 2 TEH OTHR DSCMS DAT ALSO PERFORM OPERASHUNS LOCALLY, GIT IZ PRITEE FAST.
PART OV DIS AR TEH LIKELY CUZ IT WUZ BUILT 2 WERK ON TEH LINUX KERNEL, WHICH MEANZ DAT IT HAS HAD 2 DEAL EFFECTIVELY WIF LARGE REPOSITORIEZ FRUM DAI WAN. ADDISHUNALLY, GIT IZ WRITTEN IN C, REDUCIN TEH OVERHEAD OV RUNTIMEZ ASSOCIATD WIF HIGHR-LEVEL LANGUAGEZ. ANOTHR REASON DAT GIT IZ SO FAST IZ DAT TEH PRIMARY DEVELOPERS HAS MADE DIS DESIGN GOAL OV TEH APPLICASHUN.
TEH FOLLOWIN R NUMBR OV BENCHMARKZ DAT I PERFORMD ON 3 COPIEZ OV TEH DJANGO SOURCE CODE REPOSITORY IN 3 DIFFERENT SCMS: GIT, MERCURIAL AN BAZAAR. I ALSO TESTD SUM OV DIS STUFF IN SVN, BUT TRUST ME, IZ SLOWR—BASICALLY TAEK TEH BAZAAR NUMBERS AN DEN ADD NETWORK LATENCY...
init benchmarks add benchmarks status benchmarks diff benchmarks branching benchmarks
tag benchmarks log benchmarks large commit benchmarks small commit benchmarks
TEH END RESULT WUZ DAT 4 EVRYTHIN BUT ADDIN NEW FILEZ, GIT WUZ FASTEST. (ALSO RLY LARGE COMMITS, WHICH HG WUZ BASICALLY TEH SAME AT, BUT TEH COMMIT I TESTD WUZ SO LARGE DAT URE UNLIKELY 2 EVR DO ANYTHIN LIEK IT—NORMAL COMMITS R MUTCH FASTR IN GIT.)
Git Hg Bzr
Init 0.024s 0.059s 0.600s
Add 8.535s 0.368s 2.381s
Status 0.451s 1.946s 14.744s
Diff 0.543s 2.189s 14.248s
Tag 0.056s 1.201s 1.892s
Log 0.711s 2.650s 9.055s
Commit (Large) 12.480s 12.500s 23.002s
Commit (Small) 0.086s 0.517s 1.139s
Branch (Cold) 1.161s 94.681s 82.249s
Branch (Hot) 0.070s 12.300s 39.411s
TEH COLD AN HAWT BRANCHIN NUMBERS R TEH NUMBERS 4 DA FURST AN SECOND TIEMS DAT I BRANCHD REPO—TEH SECOND NUMBR BEAN A BRANCH WIF HAWT DISK CACHE.
IT SHUD BE NOTD DAT ALTHOUGH TEH ADD NUMBERS R MUTCH SLOWR, DIS WUZ 4 MASIF ADD OPERASHUN—OVAR 2000 FILEZ. 4 DA MAJORITY OV WUT MOST PEEPS DO ON DAILY BASIS, ADD OPS IN ANY OV THEES SISTEMS WILL ONLY TAEK FRACSHUN OV SECOND. ALL OV TEH OTHR OPS TESTD HER (EXCEPT 4 DA LARGE COMMIT, POSIBLY) R MOAR INDICATIV OV THINGS U MITE AKSHULLY DO DAI 2 DAI.
THEES NUMBERS R RLY NOT DIFFICULT 2 RECREATE, SIMPLY CLONE TEH DJANGO PROJECT IN EACH OV TEH SISTEMS AN TRY OUT TEH SAME COMMANDZ IN EACH.
  • git clone git://github.com/brosner/django.git dj-git
  • hg clone http://hg.dpaste.com/django/trunk dj-hg
  • bzr branch lp:django dj-bzr
  • svn checkout http://code.djangoproject.com/svn/django/trunk dj-svn
svn

GIT IZ TINY

GIT IZ RLY GUD AT CONSERVIN DISK SPACE. UR GIT DIRECTORY WILL (IN GENERAL) BARELY BE LARGR THAN AN SVN CHECKOUT—IN SUM CASEZ AKSHULLY SMALLR (APPARENTLY LOT CAN GO IN DOSE .SVN DIRS).
TEH FOLLOWIN NUMBERS WUZ TAKEN FRUM CLONEZ OV TEH DJANGO PROJECT IN EACH OV ITZ SEMI-OFFISHUL GIT MIRRORS AT TEH SAME POINT IN ITZ HISTORY.
Git Hg Bzr Bzr* SVN
Repo Alone 24M 34M 45M 89M
Entire Directory 43M 53M 64M 108M 61M
* TEH SECOND BZR NUMBR IZ AFTR I RAN BZR PACK, WHICH I THOT WUD MAK IT SMALLR, BUT ENDD UP MAKIN IT MUTCH, MUTCH LARGR 4 SUM REASON.
hg bzr svn perforce

TEH STAGIN PLACE

UNLIKE TEH OTHR SISTEMS, GIT HAS WUT IT CALLS TEH "STAGIN AREA" OR "INDEX". DIS AR TEH AN INTERMEDIATE AREA DAT U CAN SETUP WUT U WANTS UR COMMIT 2 LOOK LIEK BEFORE U COMMIT IT.
TEH KEWL TING BOUT TEH STAGIN AREA, AN WUT SETS GIT APART FRUM ALL THEES OTHR TOOLS, IZ DAT U CAN EASILY STAGE SUM OV UR FILEZ AS U FINISH THEM AN DEN COMMIT THEM WITHOUT COMMITTIN ALL TEH MODIFID FILEZ IN UR WERKIN DIRECTORY, OR HAVIN 2 LIST THEM ON TEH COMMAND LINE DURIN TEH COMMIT
add commit workflow diagram
DIS ALSO ALLOWS U 2 STAGE ONLY PORSHUNS OV MODIFID FILE. GONE R TEH DAIS OV MAKIN 2 LOGICALLY UNRELATD MODIFICASHUNS 2 FILE BEFORE U REALIZD DAT U FORGOT 2 COMMIT WAN THEM. NAO U CAN JUS STAGE TEH CHANGE U NED 4 DA CURRENT COMMIT AN STAGE TEH OTHR CHANGE 4 TEH NEXT COMMIT. DIS FEACHUR SCALEZ UP 2 AS LOTZ DA DIFFERENT CHANGEZ 2 UR FILE AS U NED.
OV COURSE, GIT ALSO MAKEZ IT PRITEE EASY 2 IGNORE DIS FEACHUR IF U DOAN WANTS DAT KIND OV CONTROL—JUS SLAP -A 2 UR COMMIT COMMAND IN ORDR 2 ADD ALL CHANGEZ 2 ALL FILEZ 2 TEH STAGIN AREA.
commit only workflow diagram
svn perforce

DISTRIBUTD

WAN OV TEH COOLEST FEATUREZ OV ANY OV TEH DISTRIBUTD SCMS, GIT INCLUDD, IZ DAT IZ DISTRIBUTD. DIS MEANZ DAT INSTEAD OV DOIN "CHECKOUT" OV TEH CURRENT TIP OV TEH SOURCE CODE, U DO "CLONE" OV TEH ENTIRE REPOSITORY.
DIS MEANZ DAT EVEN IF URE USIN SENTRALIZD WERKFLOW, EVRY USR HAS WUT IZ ESSENTIALLY FULL BAKUP OV TEH MAIN SERVR, EACH OV WHICH CUD BE PUSHD UP 2 REPLACE TEH MAIN SERVR IN DA EVENT OV CRASH OR CORRUPSHUN. THAR IZ BASICALLY NO SINGLE POINT OV FAILURE WIF GIT UNLES THAR IZ ONLY SINGLE POINT.
DIS DOEZ NOT SLOW THINGS DOWN MUTCH, EITHR. ON AVERAGE, AN SVN CHECKOUT IZ ONLY MARGINALLY FASTR THAN ANY OV TEH DSCMS. OV TEH DSCMS I TESTD, GIT WUZ TEH FASTEST.
cloning benchmarks
Git 1m 59s
Hg 2m 24s
Bzr 5m 11s
SVN 1m 4s
svn perforce

ANY WERKFLOW

WAN OV TEH AMAZIN THINGS BOUT GIT IZ DAT CUZ OV ITZ DISTRIBUTD NACHUR AN SUPR BRANCHIN SISTEM, U CAN EASILY IMPLEMENT PRITEE MUTCH ANY WERKFLOW U CAN FINKZ OV RELATIVELY EASILY.

Subversion-Style Workflow

A VRY COMMON GIT WERKFLOW, ESPECIALLY FRUM PEEPS TRANZISHUNIN FRUM SENTRALIZD SISTEM, IZ SENTRALIZD WERKFLOW. GIT WILL NOT ALLOW U 2 PUSH IF SOMEONE HAS PUSHD SINCE TEH LAST TIEM U FETCHD, SO SENTRALIZD MODEL WER ALL DEVELOPERS PUSH 2 TEH SAME SERVR WERKZ JUS FINE.
subversion-style workflow

INTEGRASHUN MANAGR WERKFLOW

ANOTHR COMMON GIT WERKFLOW IZ WER THAR IZ AN INTEGRASHUN MANAGR—A SINGLE PERSON HOO COMMITS 2 TEH BLESD REPOSITORY, AN DEN NUMBR OV DEVELOPERS HOO CLONE FRUM DAT REPOSITORY, PUSH 2 THEIR OWN INDEPENDENT REPOSITORIEZ AN ASK TEH INTEGRATOR 2 PULL IN THEIR CHANGEZ. DIS AR TEH TEH TYPE OV DEVELOPMENT MODEL U OFTEN C WIF OPEN SOURCE OR GITHUB REPOSITORIEZ.
integration manager workflow

Dictator and Lieutenants Workflow

4 MOAR MASIF PROJECTS, U CAN SETUP UR DEVELOPERS SIMILAR 2 TEH WAI TEH LINUX KERNEL IZ RUN, WER PEEPS R IN CHARGE OV A SPECIFIC SUBSYSTEM OV TEH PROJECT (LIEUTENANTS) AN MERGE IN ALL CHANGEZ DAT HAS 2 DO WID DAT SUBSYSTEM. DEN ANOTHR INTEGRATOR (TEH DICTATOR) CAN PULL CHANGEZ FRUM ONLY HIS/HER LIEUTENANTS AN TEH PUSH 2 TEH BLESD REPOSITORY DAT EVRYONE DEN CLONEZ FRUM AGAIN.
dictator and lieutenants workflow

AGAIN, GIT IZ ENTIRELY FLEXIBLE BOUT DIS, SO U CAN MIX AN MATCH AN CHOOSE TEH WERKFLOW DAT IZ RITE 4 U.
hg bzr svn perforce

IN UR HUBZ LOOKIN AT UR GITZ

octocat
I CUD BE BIASD HER, GIVEN DAT I WERK 4 GITHUB, BUT I ADD DIS SECSHUN ANYWAY CUZ SO LOTZ DA PEEPS SAY DAT GITHUB ITSELF WUZ SPECIFICALLY Y THEY CHOOSE GIT.
GITHUB IZ REASON 2 USE GIT 4 LOTZ DA PEEPS CUZ IT MOAR LIEK SOSHUL NETWORK 4 CODE THAN SIMPLE HOSTIN SIET. PEEPS FIND OTHR DEVELOPERS OR PROJECTS DAT R SIMILAR 2 TEH THINGS THEY R DOIN, AN CAN EASILY FORK AN CONTRIBUTE, CREATIN VRY VIBRANT COMMUNITY AROUND GIT AN TEH PROJECTS DAT PEEPS USE IT 4.
THAR EXIST OTHR SERVICEZ, BOTH 4 GIT AN 4 DA OTHR SCMS, BUT FEW R USR-ORIENTD OR SOCIALLY TARGETD, AN NONE HAS ANYWHERE NEAR TEH USR-BASE. DIS SOSHUL ASPECT OV GITHUB IZ KILLR, AN DIS IN COMBINASHUN OV TEH ABOOV FEATUREZ MAK WERKIN WIF GIT AN GITHUB GREAT COMBINASHUN 4 RAPIDLY DEVELOPIN OPEN SOURCE PROJECTS.
DIS TYPE OV COMMUNITY IZ SIMPLY NOT AVAILABLE WIF ANY OV TEH OTHR SCMS.
puls twitter twitter
perforce

IT EASY 2 LERN

DIS DID NOT USD 2 BE TRUE—EARLY IN GITS LIFE, IT WUZ NOT RLY AN SCM SO MUTCH AS BUNCH OV TOOLS DAT LET U DO VERSHUND FILESYSTEM WERK IN DISTRIBUTD MANNR. HOWEVR, TODAI, TEH COMMAND SET AN LERNIN CURVE OV GIT R PRITEE SIMILAR 2 ANY OTHR SCM, AN EVEN BETTR THAN SUM.
SINCE DIS AR TEH DIFFICULT 2 PROOV OBJECTIVELY WITHOUT SUM SORT OV STUDY, ILL JUS SHOW TEH DIFFERENCE TWEEN TEH DEFAULT HALP MENU 4 DA MERCURIAL AN GIT COMMANDZ. I HAS HIGHLIGHTD TEH COMMANDZ DAT R IDENTICAL (OR NEARLY) TWEEN TEH 2 SISTEMS. (IN HG, IF U TYPE HG HALP, U GIT LIST OV 40-SUM COMMANDZ.)

Mercurial Help

add        add the specified files ...
annotate   show changeset informati...
clone      make a copy of an existi...
commit     commit the specified fil...
diff       diff repository (or sele...
export     dump the header and diff...
init       create a new repository ...
log        show revision history of...
merge      merge working directory ...
parents    show the parents of the ...
pull       pull changes from the sp...
push       push changes to the spec...
remove     remove the specified fil...
serve      export the repository vi...
status     show changed files in th...
update     update working directory

Git Help

add        Add file contents to the index
bisect     Find the change that introduce...
branch     List, create, or delete branches
checkout   Checkout a branch or paths to ...
clone      Clone a repository into a new ...
commit     Record changes to the repository
diff       Show changes between commits, ...
fetch      Download objects and refs from...
grep       Print lines matching a pattern
init       Create an empty git repository
log        Show commit logs
merge      Join two or more development h...
mv         Move or rename a file, a direc...
pull       Fetch from and merge with anot...
push       Update remote refs along with ...
rebase     Forward-port local commits to ...
reset      Reset current HEAD to the spec...
rm         Remove files from the working ...
show       Show various types of objects
status     Show the working tree status
tag        Create, list, delete or verify...
PRIOR 2 GIT 1.6, ALL OV TEH GIT COMMANDZ USD 2 BE IN DA EXECUTABLE PATH, WHICH WUZ VRY CONFUSIN 2 PEEPS. ALTHOUGH GIT STILL RECOGNIZEZ ALL OV DOSE COMMANDZ, TEH ONLY COMMAND IN DA PATH IZ NAO GIT. SO, IF U LOOK AT MERCURIAL AN GIT, GIT HAS NEARLY IDENTICAL COMMAND SET AN HALP SISTEM—THAR IZ VRY LIL DIFFERENCE FRUM A BEGINNIN UI PERSPECTIV TODAI.
THEES DAIS IZ PRITEE HARD 2 ARGUE DAT MERCURIAL OR BAZAAR IZ ANY EASIR 2 LERN THAN GIT IZ.