The document discusses version control systems and Git. It describes some key benefits of Git such as distributed version control which allows everyone to have the full codebase and commit history, easy branching and merging, and the ability to work offline. The document provides examples of basic Git commands like initializing a repository, adding files, and committing changes. It also highlights features like local repositories for fast operations, tagging releases, and tools for debugging like git blame.
Gen AI in Business - Global Trends Report 2024.pdf
Git talk from Open 2011 conference in Israel
1. Git
Reuven M. Lerner • reuven@lerner.co.il
Open Israel Conference
June 30th, 2011
2. Who am I?
• Web developer, software architect,
consultant, lecturer/trainer
• Linux Journal columnist since 1996
• Mostly Ruby on Rails + PostgreSQL, but
also Python, PHP, jQuery, and lots more...
• Git user (and enthusiast) since 2008
4. Time machine
• Return to any point in
a project’s history
• Find out how files,
folders have changed
• Learn which user
made which changes
5. Backup
• Never fear that you’ve
deleted a file — just
rewind the history
• Everything is recorded,
can be undone
6. Maintenance tool
• “Tag” releases
• Who is to blame for a particular bug?
• When did we introduce a particular
problem?
• Deploy specific versions on specific servers
7. Scratchpad
• Try out new ideas
• Experiment with alternative techniques
• Upgrade a library
• Refactor without affecting the “live” code
base
8. Collaboration tool
• Work without fear of
“stomping” on
someone else’s code
• Identify conflicts
between what
developers wrote
• Mix and match teams
for projects
9. Version control is great
• If you’re a programmer and not using
version control, you’re really missing out
• It’s also good for non-programs, such as
configuration files
• If you’re a CTO/team leader/VP R&D and
your people aren’t using version control,
you’re inviting disaster
10. What do people use?
• RCS (ancient history)
• CVS (should be ancient history)
• Subversion (“a better CVS”)
• SourceSafe
• Perforce
• lots of other systems
11. Problems with these
• Work requires a server connection
• (You can work, but not commit.)
• Branching and merging is painful and slow
• So no one does it!
• Enforces a particular workflow
• More code, more developers — slower VC
12. Distributed version
control
• Distributed: Everyone is their own server!
• Everyone has a complete commit history
• No single point of failure
• Commit whenever you want (i.e., often)
• Merge when two repositories connect
13. Git
• Linus needed a VCS... so he wrote one!
• Fast
• Accurate
• Distributed
• Massively scalable
• Super flexible
14. Open-source Git users
• Linux kernel
• PostgreSQL
• Ruby language
• Ruby on Rails
• Perl language
• among many, many others
15. Give me details!
• What does Git do that others don’t?
• Why do I claim that Git has changed my
life?
16. Branching & merging
• Branching and merging is both easy and fast
in Git
• I often branch and merge several times in a
given day
• When I used SVN, I would do everything
in my power to avoid branching, because
merges were long and difficult
17. Branching & merging
• Create a branch:
git checkout -b new-branch
• Merge commits from other-branch
git merge other-branch
• Yes, it’s really that easy.
• You don’t even have to change directories!
18. Easy branching
changes everything!
• Every new feature goes in a branch
• Merging becomes easy, fast, and natural
• Side projects are stored, not kept out of
version control for fear of “contamination”
• Commit, commit, commit all of the time, in
an appropriate branch — never lose work!
19. Local repository
is great
• Work without a network connection
• Commits, merges, and switching branches
are nearly instantaneous
• Reports and logs are super-fast
• “Show me all files modified on Tuesday of
last week” produces immediate resultss
26. The result
master ✔ /tmp/myapp $ git log
commit 030c6b691993e0f43d78119d9ff1c9e759120d11
Author: Reuven Lerner <reuven@lerner.co.il>
Date: Thu Jun 30 12:29:29 2011 +0300
I
27. Committing in stages
• You can commit all modified files (“git
commit -a”)
• You can add files to be committed (“git add
foo.rb”) over time
• Using the staging area gives you
tremendous flexibility before committing
28. Remote branches
• A local branch can “track” a remote branch
• Different branches can be on different
servers — and then you can merge across
them
• One possible workflow: Read from one
remote branch, and write to another
29. Integration
• Git is all small Unix commands
• Easily integrated into text editors, IDEs,
cron jobs, monitoring, and system tasks
• Example: Continuous integration servers
• Example: Code-analysis tools
• Also: Front ends to SVN and others!
30. git blame
• Shows the commit, user, and timestamp of
when each line of a file was changed
• Useful when you want to know who broke
the build
• Also useful for deflecting blame from
clients, who think you broke something!
36. git bisect
• You introduced a bug, but don’t know
where? Git can find it!
• Give two endpoints
• Git does a binary search between them
• For each commit, tell Git whether it is
“good” or “bad”
• This finds the bug very quickly
37. Stash
• Temporary storage space
• Useful if you have done enough work to
keep, but not enough for a commit
• Emergency fixes in the middle of working
on something else
• If you need, put the stash into a new branch
• Oh, you can have multiple stashes
38. Hooks
• Execute arbitrary code when things happen
• Example: Update submodules automatically
• Example: Send e-mail after a commit
• Example: Heroku uses hooks to deploy a
new version of your Web app when you
push to them!
39. Workflows
• Git supports many, many workflows
• Traditional centralized server
• BDFL and users
• BDFL and Lieutenants
• Do what works for you!
43. Cherry picking
• You can merge specific
commits, or parts of
commits
• Amazingly powerful
44. Rebase
• An alternative to regular merging
• First merge all external commits, then
replay your changes on top
• Helps to keep you aligned with remote
branches
• Avoids some merge-conflict issues
45. Submodules
• A Git repository can point to other
repositories — submodules
• Break a project into smaller projects
• Git puts the pieces together for you!
46. Amending commits
• Commits are not sacred in Git
• Rather, they are a tool to manage history
• Change, amend, and edit commits
• Yes, this can be dangerous!
• Also avoids hundreds of “fixed typo”
commits in a row...
47. Commercial hosting
• You can host Git repositories on your own
• Want to go commercial? GitHub,
Gitorious, and many others work great
• GitHub is free for open-source projects,
and thus very popular
48.
49. GUIs
• Yes, there are now GUIs for Git
• Windows, Mac, and Unix versions all exist
• Integration with Emacs and other editors
for hard-core hacker-nerds
• Also: Shell-prompt integration for Unix
50. In short
• Git has completely changed how I develop
code, both alone and with others
• The speed and easy branching/merging are
game-changers
• It’s really not that hard to start using...
• ... and once you start, you’ll never want to
go back to CVS or SVN
51. Want to learn more?
• Mailing lists, wikis, and blogs
• http://git-scm.com/
• http://progit.org/
• http://gitimmersion.com/
• I’m probably going to offer Git training
soon — let me know if you’re interested!
52. Thanks!
(Any questions?)
reuven@lerner.co.il
http://www.lerner.co.il/
054-496-8405
“reuvenlerner” on Skype/AIM