0% found this document useful (0 votes)
51 views20 pages

Version Control With Git: Dylan Nugent

This document provides an overview of version control and Git. It discusses what version control is, why it's useful, and compares centralized and distributed version control systems. It then focuses on Git, explaining how Git stores data, the basic commands for creating and using a Git repository locally and sharing it remotely, best practices for collaboration, resolving conflicts, using branches and other advanced features, and hosting repositories.

Uploaded by

hector7095
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
51 views20 pages

Version Control With Git: Dylan Nugent

This document provides an overview of version control and Git. It discusses what version control is, why it's useful, and compares centralized and distributed version control systems. It then focuses on Git, explaining how Git stores data, the basic commands for creating and using a Git repository locally and sharing it remotely, best practices for collaboration, resolving conflicts, using branches and other advanced features, and hosting repositories.

Uploaded by

hector7095
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 20

Version Control with Git

Dylan Nugent
Agenda

• What is Version Control? (and why use it?)


• What is Git? (And why Git?)
• How Git Works (in theory)
• Setting up Git (surviving the CLI)
• The basics of Git (Just make it work!)
• Working together (without killing each other)
• Branching and merging and tagging (oh my!)
• Repairing our screw-ups (no matter how bad)
• Advanced features of Git
• How to learn more
Getting Started with Version Control

What is version control?


Getting Started with Version Control

Version Control - A system for managing changes made to


documents and other computer files

What kinds of files can we use it with?


• Source code
• Documentation
• Short stories
• Binary files (music and pictures)

What should we use it for?


• Text files
• Projects that have lots of revisions (changes)
• Collaborating
VCS Systems and their Operation

Lots of different choices available:


• CVS
• SVN
• Perforce
• Git
• Mercurial (Hg)
• Bazaar
• And more!

Most follow a repository model (though differ in how the


repositories work)
So why Git (and still, why VCS)?

Our goals
• Share code (or something else) easily
• Keep track of any changes we make (and undo them with
ease)
• Maintain multiple versions of the same project/code base
• Clearly communicate what changes have been made

Git is not like SVN


• Git is distributed (and we'll cover what that means)
• Git is powerful (even moreso than SVN)
• Git is easier than you think
• Git is the DVCS I know best
What is a DVCS?

Centralized VCS Distributed VCS


• One central repository • Everyone has a working
• Must be capable of repo
connecting to repo • Faster
• Need to solve issues with • Connectionless
group members making • Still need to resolve
different changes on the issues, but it's not an
same files argument against DVCS
How Git stores data

Let's quickly talk about what goes into a repository (and what a
repo is)

Commit - A snapshot of the trees and blobs at a point in time

It's easier to think of things in terms of changes in files


(but that's not really how Git does it--we'll ignore that for now)

Git (and other VCSes) get their power from working on files
where changes can be easily seen (i.e. not binary files)
Let's Get Started (Setting up Git)

Install git for your platform of choice (git-scm.org)


• Graphical installer for Windows
• DMGs for Mac
• Your favorite Linux package manager
• Or compile from source!

And let's get set up: (green = command, blue = variable)


git config --global user.name "Dylan Nugent"
git config --global user.email "[email protected]"

Quick thing about line endings:


Windows: git config --global core.autocrlf true
Mac/Linux: git config --global core.autocrlf input
Creating our first repository

Establish our first repository:


mkdir git-test
cd git-test
git init

What do we have here?


git status

Let's take a quick look around


• .git directory
• Add a file, make some changes, and run git status
Using our first repository

Let's commit a file into the repo:


git add test.py
git commit -m "My very first commit"
git status

Let's add a file we don't want to actually save


git add test.pyc
git commit -m "Something I didn't want to commit"
git rm test.pyc
git commit -m "Removing derivable data"

And stay out: .gitignore file


Looking deeper at the repository

What did we just do (at a glance)?


git hist
And what about in detail?
git log
git diff test.py

But why add and then commit


• Staging area -- Where we set up a commit between file
changes on the system and the commit to the repo

Quick thing about some fancy tools


• Gitk -- The git GUI
• tig -- The ncurses (in-terminal) frontend for git
Sharing -- Using a remote origin

Let's say our friend has set up a repository somewhere:


git clone [email protected]:Dylnuge/davesdots.git

Make changes and commit like normal, then:


git push

If they make any changes, we can get them:


git pull

We can also tell an active repo where the remote origin is:
git remote add origin nugent5@yt:~/davesdots.git
Best practices for code collaboration

When to commit?
• Source of major arguments (big changes vs small change)
• Never put broken code on the master branch (test first!)
• Try not to break things (don't do two weeks worth of work in
one commit)
• Always use a clear, concise commit message
o Put more details in lines below, but always make the first
line short
o Describe the why; the what is clear in the change log
• When making giant changes, consider branches (we'll talk
about these in a few slides)
• Oh, and make sure your name and email are right
Resolving commit conflicts

My friend and I both made changes. What happens when I try


to:
git push

Usually: automatic merging


Manual merging might be needed though--git will tell you to
edit, and then commit.

Getting the original version of a file:


git checkout -- test.py # "--" means local repo head

A quick look at the stash


git stash # Put my staging area on the stack
git stash pop # Pop it back off (after resolving)
Advanced Versioning: Branches

So what is a branch?
• Exactly what it sounds like!
• By default, everything is on the master branch
• We can make changes on another branch

Simple usage of branches:


git checkout -b testing # Make a new branch "testing"
make some changes and commit them
git checkout master # Switch to "master" branch
git merge testing # Merge the "testing" branch

Let's talk about use cases--versions, experimental


branches, major change branches, etc
Advanced Versioning: Reverting
changes
Revert ALL THE THINGS we changed:
git checkout -f

Ut oh, we already commited it:


git revert HEAD # Revert last commit (HEAD)

We can also use both of these commands to specify a revision


(by it's SHA hash tag, visible in git log)

Revert is a very complex and nuanced command. Look stuff up


as you need it
Tools for Organizing your Repository

Let's take a (very brief) look at a (very) powerful tool: rebase


git rebase -i HEAD~4 # Rebase last four commits

pick bdffc87 [some tag] Some commit


pick fed0f4c [game API] Another commit
pick 5df5842 [docs] [minor] Second! commit
pick 104c3c8 [data representation] First commit!

Basic operations:
• pick -- Use this commit
• reword -- Change the commit message
• squash -- Make this commit part of the above commit

DON'T rebase on a repo which has been pushed remotely!


Hosting Repositories

Github
Locally accessible repository
Bare repos (what's special about the origin)
Gitosis
Additional Powers of Git

There are a lot, but let's quickly talk about:


git bisect
git blame
hooks

And there are tons of ways to learn more:


Git Ready
Pro Git
Community Git Book
Git Website
Manpages (for reference)

You might also like