5. What is Git?
• DVCS = Distributed Version Control System
• Technique for managing large/small coding projects
Large
Me, >1 million other
Small
people
6. What is Git?
• Two parts:
1. “Database” (hidden folder) to hold project history
2. Set of tools to interact with database
• Used via Command Line or GUI interfaces
9. What does Git do?
• Branching & Merging
version 1 version 2 version 3 version 4 version 5
version 4b version 4b.2
nch
new feature bra
10. Case Study – Analysis toolkit
• Improve interface, ~2 days work
- …while analyzing data
• Branch!
- Improvements on
“development” branch
- Work on “main” branch
- Merge when feature
completed
11. Case Study – Productivity tool
• 13"45!&"46.'3: productivity
bad word!
tool, on 1&"!)0,-./
• Downloaded, found bug
• Fixed bug, multiple local
check-ins
• Sent change histories
back via 1&"!)0,-./
12. Case Study – Productivity tool
• 13"45!&"46.'3: productivity
bad word!
tool, on 1&"!)0,-./
• Downloaded, found bug
• Fixed bug, multiple local
check-ins
• Sent change histories
back via 1&"!)0,-./
13. How Git can help YOU *
• Personally: • CNBC as a group:
- Keep track of changes - “Don’t reinvent the
wheel”
- Fix bugs quicker
- More eyes → better code
- Share code easier
- Collaboration
- Simplify adding new
features/changing code
* Or Mercurial, or Bazaar, or Monotone, or LibreSource, or...
16. Key Concepts
Things “about History, Same as
Work is
to be stored” branches are Repository,
done here
are put here stored here but remote
781&"8#)5!
781&"8966 781&"8-.//&"
781&"8#)++
Staging
Workspace Repository Remote
Area
17. • Create & edit some code
/9"!,/
:)'-"&.'8/9"!;<
*3")*'8=>=?
19. • Make changes, start working on new code
/9"!,/
:)'-"&.'8/9"!;< #*&'",/
:)'-"&.'8#*&'";9<
*3")*'8=>=? /9"!,/
3-!.89?
:)'-"&.'8/9"!;9@0<
*3")*'89>0?
20. …wash, rinse, repeat:
• Move completed code to
“Staging Area”
- Leave the rest “unstaged”
• Commit code
21. Key Concepts
• Finder (Explorer) not suited for Git
- Are these in the workspace
or staging area?
- What branch are we on?
- What revision is this?
Not enough information!
22. Git Interface
• Command line
• GUI
- Github for Mac
(signific
antly ) differe
ntly
ightly
All work sl
- GitExtensions
- Others
25. • Create & edit some code
/9"!,/
:)'-"&.'8/9"!;<
*3")*'8=>=?
26. • Code is in working state; ready for “commit”
Terminal
781&"89668/9"!,/
781&"8-.//&"84/8C-*39"368/9"!8:)'-"&.'D
27. • Code is in working state; ready for “commit”
Terminal
781&"89668/9"!,/
781&"8-.//&"84/8C-*39"368/9"!8:)'-"&.'D
28. • Code is in working state; ready for “commit”
Terminal
781&"89668/9"!,/
781&"8-.//&"84/8C-*39"368/9"!8:)'-"&.'D
29. • Code is in working state; ready for “commit”
Terminal
781&"89668/9"!,/
781&"8-.//&"84/8C-*39"368/9"!8:)'-"&.'D
30. • Make changes, add new code
/9"!,/
:)'-"&.'8/9"!;< #*&'",/
:)'-"&.'8#*&'";9<
*3")*'8=>=? /9"!,/
3-!.89?
:)'-"&.'8/9"!;9@0<
*3")*'89>0?
31. • See what we’ve done
Terminal
781&"85"9")5
E8F'80*9'-!8/95"3*
E8G!9'1358'."85"91368:.*8-.//&"$
E8;)538H1&"89668I:&+3J,,,H8".8)#69"38K!9"8K&++8038-.//&""36<
E
E8 /.6&:&36$8/9"!,/
E
E8L'"*9-M368:&+35$
E888;)538H1&"89668I:&+3J,,,H8".8&'-+)638&'8K!9"8K&++8038-.//&""36<
E
E8 #*&'",/
'.8-!9'1358966368".8-.//&"8;)538H1&"8966H89'6%.*8H1&"8-.//&"849H<
32. • See what we’ve done
Terminal
781&"85"9")5
E8F'80*9'-!8/95"3*
E8G!9'1358'."85"91368:.*8-.//&"$
E8;)538H1&"89668I:&+3J,,,H8".8)#69"38K!9"8K&++8038-.//&""36<
E
E8 /.6&:&36$8/9"!,/
E
E8L'"*9-M368:&+35$
E888;)538H1&"89668I:&+3J,,,H8".8&'-+)638&'8K!9"8K&++8038-.//&""36<
E
E8 #*&'",/
'.8-!9'1358966368".8-.//&"8;)538H1&"8966H89'6%.*8H1&"8-.//&"849H<
33. • See what we’ve done
Terminal
781&"85"9")5
E8F'80*9'-!8/95"3*
E8G!9'1358'."85"91368:.*8-.//&"$
E8;)538H1&"89668I:&+3J,,,H8".8)#69"38K!9"8K&++8038-.//&""36<
E
E8 /.6&:&36$8/9"!,/
E
E8L'"*9-M368:&+35$
E888;)538H1&"89668I:&+3J,,,H8".8&'-+)638&'8K!9"8K&++8038-.//&""36<
E
E8 #*&'",/
'.8-!9'1358966368".8-.//&"8;)538H1&"8966H89'6%.*8H1&"8-.//&"849H<
38. • Let’s see what we’ve done...
Terminal
781&"8+.1
-.//&"89U3-VW9ZVU:6VY3=[ZU9WVW=6U[2[03V]U:-U99
P)"!.*$8O+&3^3*8_9'9+8I3M9'9+`-/),36)J
Q9"3$888a!)8b)'8=V8=[$=$2=82W==84WYWW
8888966368S9*&90+358".8/9"!@8'3K8#*&'"8:)'-"&.'
-.//&"8603[]WW]9303V000[30:0-]9=]VY=6]2ZWW
P)"!.*$8O+&3^3*8_9'9+8I3M9'9+`-/),36)J
Q9"3$888a!)8b)'8=V8=[$==$WY82W==84WYWW
8888-*39"368/9"!8:)'-"&.'
39. Git Workflow – Complete
• Do some work
• See what you’ve changed, verify things look good:
re out
781&"85"9")5 Home work: figu
does
781&"86&::"..+8I:&+3'9/35J what this
• Tell Git what you’re ready to commit:
781&"89668I:&+3'9/35J
• Commit & log changes:
781&"8-.//&"8I:&+3'9/35J
!"#$%&'(&%)$*&('*+,'-+%&./
48. Branches
• Question: How can we integrate new features without
messing up our current working code?
• Branches let us work in a “new directory” which we
can later either delete or merge.
49. Branches & Tags
• Think of branches as separate folders, each with it’s
own content and history.
51. Branches & Merges
• If a branch is a split in the graph, then merge is a
merging of split branches
• One single command (SVN users rejoice!)
• Conflicts: Same code was changed in both branches
• Fix by hand, re-try the merge.
- !""#$%%KKK,M3*'3+,.*1%#)0%5.:"K9*3%5-/%1&"%6.-5%)53*4
/9')9+,!"/+E*35.+S&'1494/3*13
- better idea: Google “fixing a git merge conflict”
52. Branches & Merges
• Conflicts: Same code was changed in both branches
• Merge fails!
• Fix by hand, re-try the merge
- !""#$%%KKK,M3*'3+,.*1%#)0%5.:"K9*3%5-/%1&"%6.-5%)53*4
/9')9+,!"/+E*35.+S&'1494/3*13
- better idea: Search “fixing a git merge conflict”
53. c&"!)0,-./
git·hub /'ɡɪtˌhʌb/
GitHub is the best way to
collaborate with others. Fork,
send pull requests and
manage all your public and
private git repositories.
54. c&"!)0,-./
• Very easy collaboration
• Clear, detailed setup instructions
4 !""#$%%!3+#,1&"!)0,-./%
• Easy “forking” for Github projects
- Get your own copy of their code
- Contribute back with “pull requests”
58. SVN integration
• Very easy to move from SVN → Git
• Works best as one-time deal, can work side-by-side
• !""#$%%.*35"&5,1*%0+.1%2WWU%WU%2%1&"45S'4")".*&9+%
59. Good Git Practice
• Check in often!
- Rule of thumb… check in whenever code works
• Write detailed log notes! You’ll thank yourself for it
later!
• Branch for new features
- Avoid working on the master branch, it should always be the
“clean, working” code
62. Git Setup – one-time
Recommend downloading
xcode, just for the
FileMerge program
(“opendiff” when launched
from command line)
• Identify yourself to Git:
781&"8-.':&18441+.09+8)53*,'9/38He.)*8f9/3H88
781&"8-.':&18441+.09+8)53*,3/9&+8H(.)*`3/9&+,-./H8
All your work is logged using the name/email you
provide here.
• Give Git some color to make things easier to read:
781&"8-.':&18441+.09+8-.+.*,)&89)".8
• Line-ending bandaids:
781&"8-.':&18441+.09+8-.*3,59:3-*+:8"*)38
781&"8-.':&18441+.09+8-.*3,9)".-*+:8&'#)"
“"*)3”
Windows users: use
“&'#)"”
instead of
63. Git Setup
• Begin using Git for a project:
78-68#*.B3-"g.+63*%
781&"8&'&"
h'&"&9+&^3683/#"(8c&"8*3#.5&".*(8&'8%#*.B3-"g.+63*%,1&"%
Creates the (hidden) ,1&" folder. No files being tracked yet.
• Add files to repository:
781&"89668,
781&"8-.//&"84/8i:&*5"8-.//&"j
Instructs Git to manage all files in the folder %#*.B3-"g.+63*%.