source code management slides
DESCRIPTION
A version control seminar I held with pre-graduates of ITT Tech in 2011TRANSCRIPT
![Page 1: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/1.jpg)
Version ControlAnd how it will change your workflow
![Page 2: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/2.jpg)
Key Topics
• What is version control?• Why is it important?• Should I be using it?• What Version Control app should I
use?
![Page 3: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/3.jpg)
Version control started as scratching an itch…
• It’s why we use “Save As”. You want the new file without obliterating the old one. It’s a common problem, and solutions are usually like this:– Chances are you've already rolled your own without
knowing it...– Make a single backup copy (Document.old.txt).– If we’re clever, we add a version number or date:
Document_V1.txt, DocumentMarch2007.txt– We may even use a shared folder so other people
can see and edit files without sending them over email. Hopefully they re-label the file after they save it.
![Page 4: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/4.jpg)
Version Control to the rescue
File Management
• Backup and Restore• The Ultimate Undo
Team Management
• Blame-Storming Credit!
• Sandboxing• Synchronization
![Page 5: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/5.jpg)
TerminologyMake with the lingo jack…
• Repository (repo) – Database storing the files• Working Copy – Your local directory of files• Trunk / Master * – The primary location for code in the
repo.
Basics• Add – Begin tracking with VC• Revision – What version a file is on• Head – The latest version in the repo• Checkout – Download a file from the repo• Check in - Upload to the repo
– The file gets a new version number, people can check it out
• Change-log / History – List of changes to the file since it was created in VC
• Update / Sync – Synchronize your files with Head • Revert – Throw away your changes, and reload from
HEAD
*Some systems call this main
![Page 6: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/6.jpg)
The Two Models
CentralizedDistributed
Can anyone tell me the potential problem with using a centralized approachto version control?
Bonus Question
![Page 7: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/7.jpg)
Version Control What are my options?
VCS Name Type Rating
Git (the topic today) Distributed
SVN Centralized
Bazaar Distributed
Mercurial Distributed
Team Foundation Server
Centralized
CVS (Legacy) Centralized
Source: http://en.wikipedia.org/wiki/Comparison_of_revisoin_control_software
![Page 8: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/8.jpg)
Cloning the Repository
Repo
mkdir ~/repository && cd repositorygit clone [email protected]:chuckbutler/dotfiles
![Page 9: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/9.jpg)
Basic Checkins
TRUNK
MilkMilk
Bread
MilkBreadEggs
Rev 1 Rev2 Rev3
echo “Milk” >> list.txtgit add list.txtgit commit –m “Added milk to the list”git push origin master
![Page 10: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/10.jpg)
Checkout and Edit
TRUNK
MilkEggsJuice
Check out
MilkEggsSoupRevert Check in
MilkEggsSoup
![Page 11: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/11.jpg)
Basic Diffs
TRUNK
The repository has a history of changes as a file evolves. Diffs are the changes you made while editing: imagine “peeling” them off and applying
them to a file
MilkMilkEggs
MilkEggsJuice
MilkEggsSoup
+Eggs+Juic
e
- Juice
+ Soup
R1 R2 R3 R4
To go from R1 to R2, we add eggs. Imagine peeling off that red sticker and placing it on R1 to get to R2.
And from R2 to R3 we add Juice, from R3 to R4 we delete Juice and add Soup
Most VCS store diffs rather than full copies of the file. This saves disk space: 4 revs of a file doesn’t mean we have 4 copies; we have 1 copy with 4 small diffs.
![Page 12: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/12.jpg)
Diffs help us notice changes. (“How did you fix that bug?”) and even apply them from one branch to another. -- more on that in a second.
git rev-list --all1bc4b508a68c4dc85873beb0836823a0799d695a286d7c1b00a4bf408a046ccfda1e6064d6fc59604a5e80a2e83671de7985852a94a6c43549c4c4ab...Git diff 1a3a050aaf29b9411552c5a66c85698414b0611d
Note: (git uses computed hash’s for revisions)
Bonus Question: in the previous diagram, whats the diff from R1 to R4
+ Eggs+ Soup
Notice how “Juice” wasn’t even involved – The direct jump from R1 to R4 doesn’t need that change, since Juice was overridden by Soup
![Page 13: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/13.jpg)
Branching
TRUNK
New Feature
Milk EggsSoup
Milk EggsSoup
MilkEggsSoupRice
MilkEggsSoupBread
R4
R5 R6
R7
Other devs continue working, committing to trunk while you work out of your branch
![Page 14: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/14.jpg)
We branch for our new, experimental ideas.
Now that we have a branch, and we are working IN that branch, we can change our code and work out the kinks. Testing in isolation, knowing our changes wont hurt anyone, and our branch history is under version control
It’s a tough concept for newbie's, so pretend you copied your code into a different directory.
git branch nomsgit checkout noms
![Page 15: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/15.jpg)
Milk Egg
sSou
pMilkEggsSoupRice
MergingThis step is the most daunting of all and hangs up most first-time users
New Feature
Milk Egg
sSou
p
MilkEggsSoupBrea
dR4
R5
R6
R7
MilkEggsSoupBrea
dRice
TRUNK
R8
+Rice
Re-Integration of a branch usually winds up in conflicts – this is why it is seen as difficult. You will be making good use of the diff command
![Page 16: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/16.jpg)
git branch experimentalgit branch
experimental * master
git checkout experimental
(edit file)git commit -agit checkout master
(edit same file in master)git commit –agit merge experimental
We now have a conflict. PANIC! What do I do? Relax, grab a beer and start resolving conflicts with git-diff
![Page 17: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/17.jpg)
ValidCheckin
A charted example of conflicts
TRUNK
Milk Egg
sSou
p
- Eggs+Cheese
MilkCheese
Juice
- Eggs+Hot Dog
MilkHot Dog
Juice
Milk Cheese
JuiceR3
R3* Bob
R4
Conflicting Checkin(Cannot remove eggs)
R3* Judy
![Page 18: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/18.jpg)
Tagging
• Version Control Systems support a method of easy identification on –stable branches that we branch out of our source-tree called “tags”
• They are snapshots, of feature-complete code. Typically releases.
• To learn more about this however, you’ll have to visit the git manpage or mr google
![Page 19: Source Code Management Slides](https://reader034.vdocument.in/reader034/viewer/2022051413/5592b6641a28ab710d8b4781/html5/thumbnails/19.jpg)
Milo proofs all my code