SlideShare a Scribd company logo
1 of 31
1
CSE 390
Lecture 9
Version control with Git
slides created by Ruth Anderson & Marty Stepp, images from http://git-scm.com/book/en/
http://www.cs.washington.edu/390a/
2
Problems Working Alone
• Ever done one of the following?
 Had code that worked, made a bunch of changes and saved it, which
broke the code, and now you just want the working version back…
 Accidentally deleted a critical file, hundreds of lines of code gone…
 Somehow messed up the structure/contents of your code base, and
want to just “undo” the crazy action you just did
 Hard drive crash!!!! Everything’s gone, the day before deadline.
• Possible options:
 Save as (MyClass-v1.java)
• Ugh. Just ugh. And now a single line change results in duplicating the
entire file…
3
Problems Working in teams
 Whose computer stores the "official" copy of the project?
• Can we store the project files in a neutral "official" location?
 Will we be able to read/write each other's changes?
• Do we have the right file permissions?
• Lets just email changed files back and forth! Yay!
 What happens if we both try to edit the same file?
• Bill just overwrote a file I worked on for 6 hours!
 What happens if we make a mistake and corrupt an important file?
• Is there a way to keep backups of our project files?
 How do I know what code each teammate is working on?
4
Solution: Version Control
• version control system: Software that tracks and manages changes
to a set of files and resources.
• You use version control all the time
 Built into word processors/spreadsheets/presentation software
• The magical “undo” button takes you back to “the version before my last
action”
 Wiki’s
• Wiki’s are all about version control, managing updates, and allowing
rollbacks to previous versions
5
Software Version control
• Many version control systems are designed and used especially for
software engineering projects
 examples: CVS, Subversion (SVN), Git, Monotone, BitKeeper, Perforce
• helps teams to work together on code projects
 a shared copy of all code files that all users can access
 keeps current versions of all files, and backups of past versions
 can see what files others have modified and view the changes
 manages conflicts when multiple users modify the same file
 not particular to source code; can be used for papers, photos, etc.
• but often works best with plain text/code files
6
Repositories
• Repository (aka “repo”): a location storing a copy of all files.
 you don't edit files directly in the repo;
 you edit a local working copy or “working tree”
 then you commit your edited files into the repo
• There may be only one repository that all users share (CVS,
Subversion)
• Or each user could also have their own copy of the repository (Git,
Mercurial)
• Files in your working directory must be added to the repo in order
to be tracked.
7
What to put in a Repo?
• Everything needed to create your project:
 Source code (Examples: .java, .c, .h, .cpp )
 Build files (Makefile, build.xml)
 Other resources needed to build your project: icons, text etc.
• Things generally NOT put in a repo (these can be easily re-created
and just take up space):
 Object files (.o)
 Executables (.exe)
8
Repository Location
• Can create the repository anywhere
 Can be on the same computer that you’re going to work on, which
might be ok for a personal project where you just want rollback
protection
• But, usually you want the repository to be robust:
 On a computer that’s up and running 24/7
• Everyone always has access to the project
 On a computer that has a redundant file system (ie RAID)
• No more worries about that hard disk crash wiping away your project!
• Options:
 attu, CSE GitLab, GitHub (do NOT use GitHub for homework!!!)
9
Aside: So what is GitHub?
• GitHub.com is a site for online storage of Git repositories.
• Many open source projects use it, such as the Linux kernel.
• You can get free space for open source projects or you can pay for
private projects.
• Do NOT use GitHub to store your homework!!
Question: Do I have to use GitHub to use Git?
Answer: No!
• you can use Git completely locally for your own purposes, or
• you can use the CSE GitLab server, or
• you could share a repo with users on the same file system (e.g. attu)
as long everyone has the needed file permissions.
10
CSE GitLab
Everyone in this course has been given an account on CSE GitLab
To use CSE GitLab:
1. Log onto CSE GitLab: https://gitlab.cs.washington.edu/
 IMPORTANT: If you have a CSENetID use that, otherwise use your UWNetID
2. Add an ssh key: https://gitlab.cs.washington.edu/help/ssh/README.md
 Follow the instructions in README.md created specifically for you.
For me, I type:
ssh-keygen -t rsa -C rea@cs.washington.edu
• Just hit return to accept defaults and do not need a password so hit return
for both passwords
 Then type: cat ~/.ssh/id_rsa.pub
 Copy-paste the key to the 'My SSH Keys' section under the 'SSH' tab in
your user profile on CSE GitLab
11
Git
HTTP://XKCD.COM/1597/
12
Git Resources
• At the command line: (where <verb> = config, add, commit, etc.)
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
• Free on-line book: https://git-scm.com/book/en/v2
• Git tutorial: http://schacon.github.com/git/gittutorial.html
• Reference page for Git: http://gitref.org/index.html
• Git website: http://git-scm.com/
• Git for Computer Scientists: http://eagain.net/articles/git-for-computer-scientists/
13
History of Git
• Came out of Linux development community
• Linus Torvalds, 2005
• Initial goals:
 Speed
 Support for non-linear development (thousands of parallel branches)
 Fully distributed
 Able to handle large projects like Linux efficiently
14
Git uses a distributed model
Centralized Model Distributed Model
(CVS, Subversion, Perforce) (Git, Mercurial)
Result: Many operations are local
15
Ways to use Git
Using Git on your own
computer, one user
Using Git on multiple computers,
multiple users or one user on
multiple computers
Possible servers:
• CSE GitLab
• attu
• GitHub (NOT for homework!)
16
A Local Git project has three areas
Unmodified/modified
Files
Staged
Files
Committed
Files
Note: working directory sometimes called the “working tree”, staging area sometimes called the “index”.
17
Git file lifecycle
18
Basic Workflow
Basic Git workflow:
1. Modify files in your working directory.
2. Stage files, adding snapshots of them to your staging area.
3. Do a commit, which takes the files as they are in the staging area
and stores that snapshot permanently to your Git directory (your
local copy of the repo).
• Notes:
 If a particular version of a file is in the git directory, it’s considered committed.
 If it’s modified but has been added to the staging area, it is staged.
 If it was changed since it was checked out but has not been staged, it is modified.
19
Get ready to use Git!
1. Set the name and email for Git to use when you commit:
$ git config --global user.name “Bugs Bunny”
$ git config --global user.email bugs@gmail.com
• You can call git config –-list to verify these are set.
• These will be set globally for all Git projects you work with.
• You can also set variables on a project-only basis by not using the
--global flag.
• You can also set the editor that is used for writing commit messages:
$ git config --global core.editor emacs(it is vim by default)
• The latest version of git will also prompt you that push.default is
not set, you can make this warning go away with:
$ git config --global push.default simple
20
Create a local copy of a repo
2. Two common scenarios: (only do one of these)
a) To clone an already existing repo to your current directory:
$ git clone <url> [local dir name]
This will create a directory named local dir name, containing a working
copy of the files from the repo, and a .git directory which you can
ignore (used to hold the staging area and your actual repo)
Example: git clone git@gitlab.cs.washington.edu:rea/superTest.git
b) To create a Git repo in your current directory:
$ git init
This will create a .git directory in your current directory which you
can ignore (used to hold the staging area and your actual repo).
Then you can commit files in your current directory into the repo:
$ git add file1.java
$ git commit –m “initial project version”
21
Git commands
command description
git clone url [dir] copy a git repository so you can add to it
git add files adds file contents to the staging area
git commit records a snapshot of the staging area
git status view the status of your files in the working
directory and staging area
git diff shows diff of what is staged and what is
modified but unstaged
git help [command] get help info about a particular command
git pull fetch from a remote repo and try to merge
into the current branch
git push push your new branches and data to a
remote repository
others: init, reset, branch, checkout, merge, log, tag
22
Committing files
• The first time we ask a file to be tracked, and every time before we
commit a file we must add it to the staging area:
$ git add README.txt hello.java
This takes a snapshot of these files at this point in time and adds it to
the staging area.
• To move staged changes into the repo we commit:
$ git commit –m “Fixing bug #22”
Note: These commands are just acting on your local version of repo.
23
Use Good Commit Messages
HTTP://XKCD.COM/1296/
24
Status and Diff
• To view the status of your files in the working directory and staging
area:
$ git status or
$ git status –s
(-s shows a short one line version)
• To see difference between your working directory and the staging
area (This shows what is modified but unstaged):
$ git diff
• To see difference between the staging area and your local copy of
the repo (This shows staged changes):
$ git diff --cached
25
After editing a file…
$emacs rea.txt
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: rea.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
$ git status -s
M rea.txt  Note: M is in second column = “working tree”
$ git diff  Shows modifications that have not been staged.
diff --git a/rea.txt b/rea.txt
index 66b293d..90b65fd 100644
--- a/rea.txt
+++ b/rea.txt
@@ -1,2 +1,4 @@
Here is rea's file.
+
+One new line added.
$ git diff --cached  Shows nothing, no modifications have been staged yet.
$
26
After adding file to staging area…
$ git add rea.txt
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: rea.txt
#
$ git status -s
M rea.txt  Note: M is in first column = “staging area”
$ git diff  Note: Shows nothing, no modifications that have not been staged.
$ git diff --cached  Note: Shows staged modifications.
diff --git a/rea.txt b/rea.txt
index 66b293d..90b65fd 100644
--- a/rea.txt
+++ b/rea.txt
@@ -1,2 +1,4 @@
Here is rea's file.
+
+One new line added.
27
Viewing logs
To see a log of all changes in your local repo:
• $ git log or
• $ git log --oneline (to show a shorter version)
1677b2d Edited first line of readme
258efa7 Added line to readme
0e52da7 Initial commit
• git log -5 (to show only the 5 most recent updates, etc.)
Note: changes will be listed by commitID #, (SHA-1 hash)
Note: changes made to the remote repo before the last time you
cloned/pulled from it will also be included here
28
Pulling and Pushing
Good practice:
1. Add and Commit your changes to your local repo
2. Pull from remote repo to get most recent changes (fix conflicts if
necessary, add and commit them to your local repo)
3. Push your changes to the remote repo
To fetch the most recent updates from the remote repo into your
local repo, and put them into your working directory:
$ git pull origin master
To push your changes from your local repo to the remote repo:
$ git push origin master
Notes: origin = an alias for the URL you cloned from
master = the remote branch you are pulling from/pushing to,
(the local branch you are pulling to/pushing from is your current branch)
29
Branching
To create a branch called experimental:
• $ git branch experimental
To list all branches: (* shows which one you are currently on)
• $ git branch
To switch to the experimental branch:
• $ git checkout experimental
Later on, changes between the two branches differ, to merge changes
from experimental into the master:
• $ git checkout master
• $ git merge experimental
Note: git log --graph can be useful for showing branches.
Note: These branches are in your local repo!
30
SVN vs. Git
• SVN:
 central repository approach – the main repository is the only “true”
source, only the main repository has the complete file history
 Users check out local copies of the current version
• Git:
 Distributed repository approach – every checkout of the repository is a
full fledged repository, complete with history
 Greater redundancy and speed
 Branching and merging repositories is more heavily used as a result
31
Wrap-up
• You *will* use version control software when working on projects,
both here and in industry
 Rather foolish not to
 Advice: just set up a repository, even for small projects, it will save you
time and hassle

More Related Content

Similar to CSE 390 Lecture 9 - Version Control with GIT

Git 101 - Crash Course in Version Control using Git
Git 101 - Crash Course in Version Control using GitGit 101 - Crash Course in Version Control using Git
Git 101 - Crash Course in Version Control using GitGeoff Hoffman
 
Git is a distributed version control system .
Git is a distributed version control system .Git is a distributed version control system .
Git is a distributed version control system .HELLOWorld889594
 
Git installation and configuration
Git installation and configurationGit installation and configuration
Git installation and configurationKishor Kumar
 
Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)
Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)
Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)Ahmed El-Arabawy
 
IS - section 1 - modifiedFinal information system.pptx
IS - section 1 - modifiedFinal information system.pptxIS - section 1 - modifiedFinal information system.pptx
IS - section 1 - modifiedFinal information system.pptxNaglaaAbdelhady
 
Luis atencio on_git
Luis atencio on_gitLuis atencio on_git
Luis atencio on_gitLuis Atencio
 
Source andassetcontrolingamedev
Source andassetcontrolingamedevSource andassetcontrolingamedev
Source andassetcontrolingamedevMatt Benic
 
Git Session 2K23.pptx
Git Session 2K23.pptxGit Session 2K23.pptx
Git Session 2K23.pptxEshaan35
 
git and github-1.pptx
git and github-1.pptxgit and github-1.pptx
git and github-1.pptxtnscharishma
 

Similar to CSE 390 Lecture 9 - Version Control with GIT (20)

Git 101 - Crash Course in Version Control using Git
Git 101 - Crash Course in Version Control using GitGit 101 - Crash Course in Version Control using Git
Git 101 - Crash Course in Version Control using Git
 
Git is a distributed version control system .
Git is a distributed version control system .Git is a distributed version control system .
Git is a distributed version control system .
 
sample.pptx
sample.pptxsample.pptx
sample.pptx
 
390a gitintro 12au
390a gitintro 12au390a gitintro 12au
390a gitintro 12au
 
GIT-FirstPart.ppt
GIT-FirstPart.pptGIT-FirstPart.ppt
GIT-FirstPart.ppt
 
Git installation and configuration
Git installation and configurationGit installation and configuration
Git installation and configuration
 
Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)
Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)
Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)
 
Mini git tutorial
Mini git tutorialMini git tutorial
Mini git tutorial
 
Git 101
Git 101Git 101
Git 101
 
GitHub Event.pptx
GitHub Event.pptxGitHub Event.pptx
GitHub Event.pptx
 
1-Intro to VC & GIT PDF.pptx
1-Intro to VC & GIT PDF.pptx1-Intro to VC & GIT PDF.pptx
1-Intro to VC & GIT PDF.pptx
 
Git 101 for Beginners
Git 101 for Beginners Git 101 for Beginners
Git 101 for Beginners
 
Git Training
Git TrainingGit Training
Git Training
 
IS - section 1 - modifiedFinal information system.pptx
IS - section 1 - modifiedFinal information system.pptxIS - section 1 - modifiedFinal information system.pptx
IS - section 1 - modifiedFinal information system.pptx
 
GIT.pptx
GIT.pptxGIT.pptx
GIT.pptx
 
git and github
git and githubgit and github
git and github
 
Luis atencio on_git
Luis atencio on_gitLuis atencio on_git
Luis atencio on_git
 
Source andassetcontrolingamedev
Source andassetcontrolingamedevSource andassetcontrolingamedev
Source andassetcontrolingamedev
 
Git Session 2K23.pptx
Git Session 2K23.pptxGit Session 2K23.pptx
Git Session 2K23.pptx
 
git and github-1.pptx
git and github-1.pptxgit and github-1.pptx
git and github-1.pptx
 

Recently uploaded

CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfLivetecs LLC
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....kzayra69
 

Recently uploaded (20)

CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdf
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....
 

CSE 390 Lecture 9 - Version Control with GIT

  • 1. 1 CSE 390 Lecture 9 Version control with Git slides created by Ruth Anderson & Marty Stepp, images from http://git-scm.com/book/en/ http://www.cs.washington.edu/390a/
  • 2. 2 Problems Working Alone • Ever done one of the following?  Had code that worked, made a bunch of changes and saved it, which broke the code, and now you just want the working version back…  Accidentally deleted a critical file, hundreds of lines of code gone…  Somehow messed up the structure/contents of your code base, and want to just “undo” the crazy action you just did  Hard drive crash!!!! Everything’s gone, the day before deadline. • Possible options:  Save as (MyClass-v1.java) • Ugh. Just ugh. And now a single line change results in duplicating the entire file…
  • 3. 3 Problems Working in teams  Whose computer stores the "official" copy of the project? • Can we store the project files in a neutral "official" location?  Will we be able to read/write each other's changes? • Do we have the right file permissions? • Lets just email changed files back and forth! Yay!  What happens if we both try to edit the same file? • Bill just overwrote a file I worked on for 6 hours!  What happens if we make a mistake and corrupt an important file? • Is there a way to keep backups of our project files?  How do I know what code each teammate is working on?
  • 4. 4 Solution: Version Control • version control system: Software that tracks and manages changes to a set of files and resources. • You use version control all the time  Built into word processors/spreadsheets/presentation software • The magical “undo” button takes you back to “the version before my last action”  Wiki’s • Wiki’s are all about version control, managing updates, and allowing rollbacks to previous versions
  • 5. 5 Software Version control • Many version control systems are designed and used especially for software engineering projects  examples: CVS, Subversion (SVN), Git, Monotone, BitKeeper, Perforce • helps teams to work together on code projects  a shared copy of all code files that all users can access  keeps current versions of all files, and backups of past versions  can see what files others have modified and view the changes  manages conflicts when multiple users modify the same file  not particular to source code; can be used for papers, photos, etc. • but often works best with plain text/code files
  • 6. 6 Repositories • Repository (aka “repo”): a location storing a copy of all files.  you don't edit files directly in the repo;  you edit a local working copy or “working tree”  then you commit your edited files into the repo • There may be only one repository that all users share (CVS, Subversion) • Or each user could also have their own copy of the repository (Git, Mercurial) • Files in your working directory must be added to the repo in order to be tracked.
  • 7. 7 What to put in a Repo? • Everything needed to create your project:  Source code (Examples: .java, .c, .h, .cpp )  Build files (Makefile, build.xml)  Other resources needed to build your project: icons, text etc. • Things generally NOT put in a repo (these can be easily re-created and just take up space):  Object files (.o)  Executables (.exe)
  • 8. 8 Repository Location • Can create the repository anywhere  Can be on the same computer that you’re going to work on, which might be ok for a personal project where you just want rollback protection • But, usually you want the repository to be robust:  On a computer that’s up and running 24/7 • Everyone always has access to the project  On a computer that has a redundant file system (ie RAID) • No more worries about that hard disk crash wiping away your project! • Options:  attu, CSE GitLab, GitHub (do NOT use GitHub for homework!!!)
  • 9. 9 Aside: So what is GitHub? • GitHub.com is a site for online storage of Git repositories. • Many open source projects use it, such as the Linux kernel. • You can get free space for open source projects or you can pay for private projects. • Do NOT use GitHub to store your homework!! Question: Do I have to use GitHub to use Git? Answer: No! • you can use Git completely locally for your own purposes, or • you can use the CSE GitLab server, or • you could share a repo with users on the same file system (e.g. attu) as long everyone has the needed file permissions.
  • 10. 10 CSE GitLab Everyone in this course has been given an account on CSE GitLab To use CSE GitLab: 1. Log onto CSE GitLab: https://gitlab.cs.washington.edu/  IMPORTANT: If you have a CSENetID use that, otherwise use your UWNetID 2. Add an ssh key: https://gitlab.cs.washington.edu/help/ssh/README.md  Follow the instructions in README.md created specifically for you. For me, I type: ssh-keygen -t rsa -C rea@cs.washington.edu • Just hit return to accept defaults and do not need a password so hit return for both passwords  Then type: cat ~/.ssh/id_rsa.pub  Copy-paste the key to the 'My SSH Keys' section under the 'SSH' tab in your user profile on CSE GitLab
  • 12. 12 Git Resources • At the command line: (where <verb> = config, add, commit, etc.) $ git help <verb> $ git <verb> --help $ man git-<verb> • Free on-line book: https://git-scm.com/book/en/v2 • Git tutorial: http://schacon.github.com/git/gittutorial.html • Reference page for Git: http://gitref.org/index.html • Git website: http://git-scm.com/ • Git for Computer Scientists: http://eagain.net/articles/git-for-computer-scientists/
  • 13. 13 History of Git • Came out of Linux development community • Linus Torvalds, 2005 • Initial goals:  Speed  Support for non-linear development (thousands of parallel branches)  Fully distributed  Able to handle large projects like Linux efficiently
  • 14. 14 Git uses a distributed model Centralized Model Distributed Model (CVS, Subversion, Perforce) (Git, Mercurial) Result: Many operations are local
  • 15. 15 Ways to use Git Using Git on your own computer, one user Using Git on multiple computers, multiple users or one user on multiple computers Possible servers: • CSE GitLab • attu • GitHub (NOT for homework!)
  • 16. 16 A Local Git project has three areas Unmodified/modified Files Staged Files Committed Files Note: working directory sometimes called the “working tree”, staging area sometimes called the “index”.
  • 18. 18 Basic Workflow Basic Git workflow: 1. Modify files in your working directory. 2. Stage files, adding snapshots of them to your staging area. 3. Do a commit, which takes the files as they are in the staging area and stores that snapshot permanently to your Git directory (your local copy of the repo). • Notes:  If a particular version of a file is in the git directory, it’s considered committed.  If it’s modified but has been added to the staging area, it is staged.  If it was changed since it was checked out but has not been staged, it is modified.
  • 19. 19 Get ready to use Git! 1. Set the name and email for Git to use when you commit: $ git config --global user.name “Bugs Bunny” $ git config --global user.email bugs@gmail.com • You can call git config –-list to verify these are set. • These will be set globally for all Git projects you work with. • You can also set variables on a project-only basis by not using the --global flag. • You can also set the editor that is used for writing commit messages: $ git config --global core.editor emacs(it is vim by default) • The latest version of git will also prompt you that push.default is not set, you can make this warning go away with: $ git config --global push.default simple
  • 20. 20 Create a local copy of a repo 2. Two common scenarios: (only do one of these) a) To clone an already existing repo to your current directory: $ git clone <url> [local dir name] This will create a directory named local dir name, containing a working copy of the files from the repo, and a .git directory which you can ignore (used to hold the staging area and your actual repo) Example: git clone git@gitlab.cs.washington.edu:rea/superTest.git b) To create a Git repo in your current directory: $ git init This will create a .git directory in your current directory which you can ignore (used to hold the staging area and your actual repo). Then you can commit files in your current directory into the repo: $ git add file1.java $ git commit –m “initial project version”
  • 21. 21 Git commands command description git clone url [dir] copy a git repository so you can add to it git add files adds file contents to the staging area git commit records a snapshot of the staging area git status view the status of your files in the working directory and staging area git diff shows diff of what is staged and what is modified but unstaged git help [command] get help info about a particular command git pull fetch from a remote repo and try to merge into the current branch git push push your new branches and data to a remote repository others: init, reset, branch, checkout, merge, log, tag
  • 22. 22 Committing files • The first time we ask a file to be tracked, and every time before we commit a file we must add it to the staging area: $ git add README.txt hello.java This takes a snapshot of these files at this point in time and adds it to the staging area. • To move staged changes into the repo we commit: $ git commit –m “Fixing bug #22” Note: These commands are just acting on your local version of repo.
  • 23. 23 Use Good Commit Messages HTTP://XKCD.COM/1296/
  • 24. 24 Status and Diff • To view the status of your files in the working directory and staging area: $ git status or $ git status –s (-s shows a short one line version) • To see difference between your working directory and the staging area (This shows what is modified but unstaged): $ git diff • To see difference between the staging area and your local copy of the repo (This shows staged changes): $ git diff --cached
  • 25. 25 After editing a file… $emacs rea.txt $ git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: rea.txt # no changes added to commit (use "git add" and/or "git commit -a") $ git status -s M rea.txt  Note: M is in second column = “working tree” $ git diff  Shows modifications that have not been staged. diff --git a/rea.txt b/rea.txt index 66b293d..90b65fd 100644 --- a/rea.txt +++ b/rea.txt @@ -1,2 +1,4 @@ Here is rea's file. + +One new line added. $ git diff --cached  Shows nothing, no modifications have been staged yet. $
  • 26. 26 After adding file to staging area… $ git add rea.txt $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: rea.txt # $ git status -s M rea.txt  Note: M is in first column = “staging area” $ git diff  Note: Shows nothing, no modifications that have not been staged. $ git diff --cached  Note: Shows staged modifications. diff --git a/rea.txt b/rea.txt index 66b293d..90b65fd 100644 --- a/rea.txt +++ b/rea.txt @@ -1,2 +1,4 @@ Here is rea's file. + +One new line added.
  • 27. 27 Viewing logs To see a log of all changes in your local repo: • $ git log or • $ git log --oneline (to show a shorter version) 1677b2d Edited first line of readme 258efa7 Added line to readme 0e52da7 Initial commit • git log -5 (to show only the 5 most recent updates, etc.) Note: changes will be listed by commitID #, (SHA-1 hash) Note: changes made to the remote repo before the last time you cloned/pulled from it will also be included here
  • 28. 28 Pulling and Pushing Good practice: 1. Add and Commit your changes to your local repo 2. Pull from remote repo to get most recent changes (fix conflicts if necessary, add and commit them to your local repo) 3. Push your changes to the remote repo To fetch the most recent updates from the remote repo into your local repo, and put them into your working directory: $ git pull origin master To push your changes from your local repo to the remote repo: $ git push origin master Notes: origin = an alias for the URL you cloned from master = the remote branch you are pulling from/pushing to, (the local branch you are pulling to/pushing from is your current branch)
  • 29. 29 Branching To create a branch called experimental: • $ git branch experimental To list all branches: (* shows which one you are currently on) • $ git branch To switch to the experimental branch: • $ git checkout experimental Later on, changes between the two branches differ, to merge changes from experimental into the master: • $ git checkout master • $ git merge experimental Note: git log --graph can be useful for showing branches. Note: These branches are in your local repo!
  • 30. 30 SVN vs. Git • SVN:  central repository approach – the main repository is the only “true” source, only the main repository has the complete file history  Users check out local copies of the current version • Git:  Distributed repository approach – every checkout of the repository is a full fledged repository, complete with history  Greater redundancy and speed  Branching and merging repositories is more heavily used as a result
  • 31. 31 Wrap-up • You *will* use version control software when working on projects, both here and in industry  Rather foolish not to  Advice: just set up a repository, even for small projects, it will save you time and hassle

Editor's Notes

  1. http://xkcd.com/1597/
  2. Initial goals were to support development of Linux
  3. http://git-scm.com/book/en/Getting-Started-About-Version-Control
  4. Note: To unstage a change on a file before you have committed it: $ git reset HEAD -- filename Note: To unmodify a modified file: $ git checkout -- filename
  5. http://xkcd.com/1296/
  6. Git diff HEAD will show diff between working tree and staging area vs. the repo
  7. $ git remote -v origin https://github.com/rea2000/santalist.git (fetch) origin https://github.com/rea2000/santalist.git (push)