Top Banner
Git AN INTRODUCTION Introduction to Git as a version control system: concepts, main features and practical aspects.
100

Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

May 25, 2018

Download

Documents

vongoc
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

GitAN INTRODUCTION

Introduction to Git as a version control system:

concepts, main features and practical aspects.

Page 2: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Have you ever lost your work?

3/10/2017 Version Control with Git 2

Page 3: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Have you ever lost your work?

3/10/2017 Version Control with Git 3

Phase A: Start to work at your project

Page 4: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Have you ever lost your work?

3/10/2017 Version Control with Git 4

Phase A: Start to work at your project Phase B: hard work to finish asap

Page 5: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Have you ever lost your work?

3/10/2017 Version Control with Git 5

Phase B: hard work to finish asap

Phase C: happy because you have finally finish it … BUT …

Phase A: Start to work at your project

Page 6: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Have you ever lost your work?

3/10/2017 Version Control with Git 6

Phase C: happy because you have finally finish it … BUT …

Phase D: you understand your work was lost …

Phase A: Start to work at your project Phase B: hard work to finish asap

Page 7: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Solutions?

3/10/2017 Version Control with Git 7

Have you ever lost your work?

Page 8: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Solutions?

3/10/2017 Version Control with Git 8

Have you ever lost your work?

Page 9: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Solutions?

3/10/2017 Version Control with Git 9

Have you ever lost your work?

Page 10: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Solutions?

3/10/2017 Version Control with Git 10

Have you ever lost your work?

Page 11: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Solutions?

3/10/2017 Version Control with Git 11

Have you ever lost your work?

Page 12: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Which are the situations in which it happens?

3/10/2017 Version Control with Git 12

Have you ever lost your work?

Page 13: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Situation 1:

• “I’m working solo … and I only have

one computer”

3/10/2017 Version Control with Git 13

Have you ever lost your work?

Page 14: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Situation 1:

• “I’m working solo … and I only have

one computer”

3/10/2017 Version Control with Git 14

What I need:

- backup;

- different saved versions;

- early and frequently saving.

Have you ever lost your work?

Page 15: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Situation 1:

• “I’m working solo … and I only have

one computer”

3/10/2017 Version Control with Git 15

What I need:

- backup;

- different saved versions;

- early and frequently saving.

Have you ever lost your work?

I can use:

- external hard drives;

- dedicated folder;

- Dropbox folder;

- …

Page 16: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Situation 1:

• “I’m working solo … and I only have

one computer”

3/10/2017 Version Control with Git 16

What I need:

- backup;

- different saved versions;

- early and frequently saving.

Have you ever lost your work?

I can use:

- external hard drives;

- dedicated folder;

- Dropbox folder;

- …

What if…

- … I forget to save a specific version

and then I need it?

- … I delete/lose a previous version?

Page 17: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Situation 2:

• “I’m working solo … and I have more than one

computer”

3/10/2017 Version Control with Git 17

Have you ever lost your work?

Page 18: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Situation 2:

• “I’m working solo … and I have more than one

computer”

3/10/2017 Version Control with Git 18

Have you ever lost your work?

What I need:

- backup;

- different saved versions;

- early and frequently saving;

- file & version synchronization

- conventions on file names.

Page 19: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Situation 2:

• “I’m working solo … and I have more than one

computer”

3/10/2017 Version Control with Git 19

Have you ever lost your work?

Example:

Page 20: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 20

Have you ever lost your work?

function prova()

{

alert("hello");

}

Situation 2:

• “I’m working solo … and I have more than one

computer”

Example:

Page 21: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 21

Have you ever lost your work?

function prova()

{

alert("hello");

}

COPY

file.js

Situation 2:

• “I’m working solo … and I have more than one

computer”

Example:

Page 22: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 22

Have you ever lost your work?

function prova()

{

alert("hello");

}

function prova()

{

alert("hello");

}

Situation 2:

• “I’m working solo … and I have more than one

computer”

Example:

Page 23: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 23

Have you ever lost your work?

function prova()

{

alert("hello");

}

Situation 2:

• “I’m working solo … and I have more than one

computer”

Example:

Page 24: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 24

Have you ever lost your work?

function prova()

{

alert("BYE");

}

Situation 2:

• “I’m working solo … and I have more than one

computer”

Example:

Page 25: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 25

Have you ever lost your work?

function prova()

{

alert("BYE");

}

COPY

file.js

Situation 2:

• “I’m working solo … and I have more than one

computer”

Example:

Page 26: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 26

Have you ever lost your work?

function prova()

{

alert("BYE");

}

function prova()

{

alert("BYE");

}

Situation 2:

• “I’m working solo … and I have more than one

computer”

Example:

Page 27: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 27

Have you ever lost your work?

function prova()

{

alert("BYE");

}

function prova()

{

alert("BYEBYE");

}

Situation 2:

• “I’m working solo … and I have more than one

computer”

Example:

Page 28: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 28

Have you ever lost your work?

function prova()

{

alert("HEY");

}

function prova()

{

alert("BYEBYE");

}

Situation 2:

• “I’m working solo … and I have more than one

computer”

Example:

Page 29: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 29

Have you ever lost your work?

function prova()

{

alert("HEY");

}

function prova()

{

alert("BYEBYE");

}

COPY

file.js

We are loosing

our work

Situation 2:

• “I’m working solo … and I have more than one

computer”

Example:

Page 30: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 30

Have you ever lost your work?

function prova()

{

alert("HEY");

}

function prova()

{

alert("HEY");

}

COPY

file.js

Our work was

lost

Situation 2:

• “I’m working solo … and I have more than one

computer”

Example:

Page 31: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 31

Have you ever lost your work?

function prova()

{

alert("HEY");

}

function prova()

{

alert("HEY");

}

COPY

file.js

Our work was

lost

Situation 2:

• “I’m working solo … and I have more than one

computer”

Example:

Page 32: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 32

What I can use:

- USB memory sticks;

- external hard drives;

- Dropbox folder;

- shared folder;

- …

Have you ever lost your work?

Situation 2:

• “I’m working solo … and I have more than one

computer”

What I need:

- backup;

- different saved versions;

- early and frequently saving;

- file & version synchronization

- conventions on file names.

Page 33: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 33

What I can use:

- USB memory sticks;

- external hard drives;

- Dropbox folder;

- shared folder;

- …

Have you ever lost your work?

Situation 2:

• “I’m working solo … and I have more than one

computer”

What I need:

- backup;

- different saved versions;

- early and frequently saving;

- file & version synchronization

- conventions on file names.

What if…

- … I forget to save a specific version

and then I need it?

- … I delete/lose a previous version?

- … I have different projects in the

“shared” workspace?

- … I forget to copy one version

between computers?

Page 34: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 34

Have you ever lost your work?MORE DIFFICULT

Situation 3:

• “I’m working in team”

[Image from http://www.petsharing.it/]

Page 35: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 35

What I need:

- backup;

- different saved versions;

- early and frequently saving;

- file & version synchronization

- shared conventions on file names.

What I can use:

- USB memory sticks;

- external hard drives;

- Dropbox folder;

- e-mails;

- …

Situation 3:

• “I’m working in team”

Have you ever lost your work?

Page 36: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 36

Other issues:

- who has the latest version?

- who has the right to edit?

- how to ensure that everyone

sees up-to-date versions of

everything?

- how to handle conflicts?

What if…

- … a team member forgets to save a

specific version and then someone

else needs it?

- … someone deletes/loses a version?

- … someone forgets to share a specific

version of the projects?

Situation 3:

• “I’m working in team”

Have you ever lost your work?

Page 37: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 37

One possible solution:

Page 38: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 38

One possible solution:

Page 39: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 39

One possible solution:

Page 40: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

3/10/2017 Version Control with Git 40

One possible solution:

Version Control Systems

(VCS)

Page 41: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Version Control Systems

3/10/2017 Version Control with Git 41

Record changes to a file or a set of files over time so that you

can recall specific versions later

Page 42: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Basic Concepts

3/10/2017 Version Control with Git 42

Page 43: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Basic Concepts

Repository

– place where you store all your

work

– contains every version of your work that has ever

existed

• files

• directories layout

• history

– can be shared by the whole team

3/10/2017 Version Control with Git 43

Page 44: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Basic Concepts

Working copy

– a snapshot of the repository used

for… working

– the place where changes happens

– private, not shared by the team

– it also contains some metadata so that it can keep

track of the state of things

• has a file been modified?

• is this file new?

• has a file been deleted?

3/10/2017 Version Control with Git 44

Page 45: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Version Control Systems

Three generations of VCS:

1. Local (RCS, SCCS)

2. Centralized (CVS, Subversion, Team Foundation

Server)

3. Distributed (Git, Mercurial)

3/10/2017 Version Control with Git 45

NOW

More datails: https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control

Page 46: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Local Version Control

• a simple local database that stores all the

changes to files

3/10/2017 Version Control with Git 46

Page 47: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Centralized Version Control

• one central repository

• client-server relationship

3/10/2017 Version Control with Git 47

Page 48: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Distributed Version Control

• clients and server have the full copy of the repository

– local repositories clone a remote repository

• it is possible to have more than one server

3/10/2017 Version Control with Git 48

Page 49: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Basic Concepts

Commit

– the operation that

modifies the repository

– atomically performed by modern version control tools

• the integrity of the repository is assured

– it is typical to provide a log message (or comment)

when you commit

• to explain the changes you have made

• the message becomes part of the history of the repository

3/10/2017 Version Control with Git 49

Page 50: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Basic Concepts

Update

– update the working copy

with respect to a specified

revision of the repository

• apply changes from the repository

• merge such changes with the ones you have made to your

working copy, if necessary

3/10/2017 Version Control with Git 50

Page 51: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

More Basic Concepts

Push

– copy changesets from a

local repository instance

to a remote one

• synchronization between two repository instances

3/10/2017 Version Control with Git 51

Page 52: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

More Basic Concepts

Pull

– copy changesets from a

remote repository

instance to a local one

• synchronization between two repository instances

3/10/2017 Version Control with Git 52

Page 53: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Introducing… Git

• Distributed Version Control System

• Born– on 2005 for the Linux kernel project

– to be used via command line

• Website: http://git-scm.com

• Highlights:– free and open source

– strong support for non-linear development

– fully distributed

– efficient handling of large projects

– cryptographic authentication of history

3/10/2017 Version Control with Git 53

Page 54: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Who uses Git?

3/10/2017 Version Control with Git 54

Page 55: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Getting started with Git

• Standard installations

– http://git-scm.com/downloads

• Available for all the platform

• Git Graphical Applications

– http://git-scm.com/downloads/guis

• For this course, Git is

– integrated in WebStorm

– to be installed in the Room 5T computers

3/10/2017 Version Control with Git 55

Page 56: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Installing Git

• Windows– download and install Git from http://git-scm.com/downloads

• Linux– check if it is already installed

• open a terminal and type “git”

– otherwise, install it from your package manager or via http://git-scm.com/downloads

• Mac– check if it is already installed

• open a terminal and type “git”

– otherwise, install it from http://git-scm.com/downloads

3/10/2017 Version Control with Git 56

Page 57: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Git by Example

Marco and Dave work for the same company, but

in two different countries.

They have to realize a new software project, so

they decided to make it as a web app and to use

Git for version control.

3/10/2017 Version Control with Git 57

SOMEWHERE IN THE USA

MARCO, ITALY DAVE, ENGLAND

Page 58: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

SOMEWHERE IN THE USA

MARCO, ITALY DAVE, ENGLAND

Git by Example

Marco starts the project by creating a new Git repository on the central server.

He goes into the project directory and types:

to initialize an empty Git repository for the project.

3/10/2017 Version Control with Git 58

git init --bare myproject.git

Page 59: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

SOMEWHERE IN THE USA

MARCO, ITALY DAVE, ENGLAND

Git by Example

When the central repository is ready, Dave create

a folder named myproject on his computer and

initializes a repository in it:

3/10/2017 Version Control with Git 59

git init

Page 60: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Git by Example

• initializes an empty Git repository inside an

existing folder

• creates a .git directory inside it

• without parameters, typically

– on the server, it is used with the --bare parameter

3/10/2017 Version Control with Git 60

git init

Page 61: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

SOMEWHERE IN THE USA

MARCO, ITALY DAVE, ENGLAND

Git by Example

Dave writes some code in the myproject folder.

Before committing, Dave needs to really put the created file under version control, by adding the file to the Staging area:

3/10/2017 Version Control with Git 61

git add index.html

Page 62: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

The Staging Area

• A sort of loading dock

• It can contain things that are neither in the working copy nor in the repository instance

• Also called “index”

3/10/2017 Version Control with Git 62

STAGING AREA

Page 63: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

The Staging Area: an example

• Imagine to modify an existing file in the working

copy

• The file is marked as “modified”

3/10/2017 Version Control with Git 63

STAGING AREA

Page 64: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

The Staging Area: an example

• Before committing, the modified file needs to be “staged”– i.e., add a snapshot of it in the staging area

• Modified data has been marked in its current version to go into the next commit snapshot

3/10/2017 Version Control with Git 64

STAGING AREA

ADD

Page 65: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

The Staging Area: an example

• Then, changes can be “committed”

– i.e., take the file from the staging area and store

permanently the snapshot in the local repository

3/10/2017 Version Control with Git 65

STAGING AREA

Page 66: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

SOMEWHERE IN THE USA

MARCO, ITALY DAVE, ENGLAND

Git by Example

If Dave wants permanently to exclude from version

control some files in the project folder, he can add

them in the .gitignore file

– such files and folders will not be staged

3/10/2017 Version Control with Git 66

Page 67: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

SOMEWHERE IN THE USA

MARCO, ITALY DAVE, ENGLAND

Git by Example

After adding index.html to the Staging area, Dave

can commit the file to the local repository:

3/10/2017 Version Control with Git 67

git commit -m “initial commit”

Page 68: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Git by Example

• store the current snapshot in the local repository

• -m “put a message here”

– perform the commit with a log message

– useful to know what you have committed

• - a

– a useful parameter

– it performs an add for modified files, too

• useless at this point

3/10/2017 Version Control with Git 68

git commit -m “initial commit”

Page 69: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Git by Example

Dave is ready to load the data to the remote

repository. He has to specify what is the remote

server to use:

3/10/2017 Version Control with Git 69

SOMEWHERE IN THE USA

MARCO, ITALY DAVE, ENGLAND

git remote add origin http://centralserver.com/myproject.git

Page 70: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Git by Example

• add a new remote repository– multiple remotes can exists

• for each remote, a name and an address is specified– origin is the “standard” name for indicating the

principal remote

– the address can be in the format http(s):// or git://

• remotes can also be removed, renamed, etc.

3/10/2017 Version Control with Git 70

git remote add origin http://centralserver.com/myproject.git

Page 71: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Git by Example

Now Dave can push the data to the remote repository:

where origin is the remote name and master is the default branch name

3/10/2017 Version Control with Git 71

SOMEWHERE IN THE USA

MARCO, ITALY DAVE, ENGLAND

git push -u origin master

Page 72: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Git by Example

• Git pushes only to matching branches– for every branch that exists on the local side, the remote

side is updated if a branch of the same name already exists there

• this behavior will change with Git 2.0

– you have to push the branch explicitly the first time

• -u– set other information useful for other commands (e.g., pull)

• After the first time, you can simply use:– git push

3/10/2017 Version Control with Git 72

git push -u origin master

Page 73: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

SOMEWHERE IN THE USA

MARCO, ITALY DAVE, ENGLAND

Git by Example

Marco starts working on the project and clones the remote repository on his computer:

Now Marco has the code!

3/10/2017 Version Control with Git 73

git clone http://centralserver.com/myproject.git

Page 74: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Git by Example

• creates a directory named myproject

• initializes a .git directory inside it

• pulls down all the data for that repository

• checks out a working copy of the latest version

If you want to clone the repository into a directory

with another name, you can specify that as:

3/10/2017 Version Control with Git 74

git clone http://centralserver.com/myproject.git

git clone http://centralserver.com/myproject.git first_project

Page 75: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

SOMEWHERE IN THE USA

MARCO, ITALY DAVE, ENGLAND

Git by Example

Marco wants to see the details of what Dave did:

The result will be something like:

3/10/2017 Version Control with Git 75

git log

commit bcb39bee268a92a6d2930cc8a27ec3402ebecf0d

Author: Dave <[email protected]>

Date: Wed Mar 12 10:06:13 2015

initial commit

Page 76: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

SOMEWHERE IN THE USA

MARCO, ITALY DAVE, ENGLAND

Git by Example

Marco wants to see the details of what Dave did:

The result will be something like:

3/10/2017 Version Control with Git 76

git log

commit bcb39bee268a92a6d2930cc8a27ec3402ebecf0d

Author: Dave <[email protected]>

Date: Wed Mar 12 10:06:13 2015

initial commit

bcb39bee268a92a6d2930cc8a27ec3402ebecf0d

SHA-1 hash for data integrity

Page 77: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Git by Example

• At this point, Marco edits the source code and saves

• To see the pending changes, he can use:– git status

• To see the difference between his version and the previous one, he can use:– git diff (--cached, to include staged files)

• Marco decides to commit and to push his work

3/10/2017 Version Control with Git 77

git commit -a -m “added new functionalities”

git push

Page 78: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

SOMEWHERE IN THE USA

MARCO, ITALY DAVE, ENGLAND

Git by Example

Meanwhile, Dave found some bugs in the code.

He looks for update on the central server and get it

(if any):

3/10/2017 Version Control with Git 78

git pull

Page 79: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Pull and Fetch in Git

Fetch

– copy changesets from a

remote repository

instance to a local one

– previously, we called it “pull”

Pull

– perform fetch

– update the working copy

3/10/2017 Version Control with Git 79

Page 80: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

SOMEWHERE IN THE USA

MARCO, ITALY DAVE, ENGLAND

Git by Example

However, no new data is available since Marco

has not yet pushed his changes.

So, Dave fixes the bugs, and commits:

3/10/2017 Version Control with Git 80

git commit -a -m “bug fixing”

Page 81: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

SOMEWHERE IN THE USA

MARCO, ITALY DAVE, ENGLAND

Git by Example

After some time, Dave tries to push his changes

but something goes wrong

3/10/2017 Version Control with Git 81

git push

To http://centralserver.com/myproject

! [rejected] master -> master (non-fast-forward)

error: failed to push some refs to ‘http://centralserver.com/myproject’

Page 82: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Git by Example

• What happens?

– Git is not allowing Dave to push his changes because

Marco has already pushed something to the master

branch

• Solution:

– Dave has to do a pull, to bring in changes before

pushing his modifications

• Two possible scenarios:

– merging of files goes smoothly;

– merging of files generates conflicts.

3/10/2017 Version Control with Git 82

Page 83: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Git by Example

• Merge with conflicts

• Git includes both Marco’s code and Dave’s code

with conflict markers to delimit things

3/10/2017 Version Control with Git 83

From http://centralserver.com/myproject

b19f36c..b77378f master -> origin/master

Auto-merging index.html

CONFLICT (content): Merge conflict in main.rb

Automatic merge failed; fix conflicts and then commit the result.

<<<<<<< HEAD

# Marco’s code here

=======

# Dave’s code here

>>>>>>> b77378f6eb0af44468be36a085c3fe06a80e0322

Page 84: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

SOMEWHERE IN THE USA

MARCO, ITALY DAVE, ENGLAND

Git by Example

After (manually) resolving these conflicts, Dave is

able to push the changes:

3/10/2017 Version Control with Git 84

git push

Page 85: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Other Useful Commands

• Operations on files

– Remove: git rm [filename]

– Move/rename: git mv [file-from] [file-to]

– Unstage some staged files: git reset HEAD [filename-list]

– Unmodify a modified file: git checkout -- [filename]

• Change the last commit

– git commit --amend

3/10/2017 Version Control with Git 85

Page 86: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Other Useful Commands

• Operations on remotes

– List: git remote (-v, to show the URLs)

– Add: git remote add [shortname] [url]

– Inspect: git remote show [remote-name]

– Rename: git remote rename [old-name] [new-name]

– Remove: git remote rm [remote-name]

3/10/2017 Version Control with Git 86

Page 87: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Tags and Branches in a Nutshell

[Image from http://nvie.com/posts/a-successful-git-branching-model/]

3/10/2017 Version Control with Git 87

Page 88: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Branches… in brief

3/10/2017 Version Control with Git 88

• Each repository is structured like a tree

• Git doesn’t store data as a series of changesets,

but instead as a series of snapshots

• When we commit, Git stores a commit object that

contains a pointer to the snapshot of the content

you staged (with other info) and one or more

pointers to the commit(s) that was(were) the

direct parent(s) commit b4ff13f

commit 15cBe79

commit 32c0dbf

Page 89: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Branches… in brief

3/10/2017 Version Control with Git 89

• A branch is a lightweight movable pointer to one

commit: the parent of a sequence of commits

• the master branch is the “default” branch when

you create a repository

– you should use other branches for development and

merge them back to the master branch upon

completion

commit b4ff13f

commit 15cBe79

commit 32c0dbf

Page 90: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Branches… in brief

• used to develop features isolated from each other

• really lightweight in Git

• commands:– git branch [branch-name], create a new branch

– git branch, lists all existing branches

– git checkout [branch-name], switches to the selected branch

– git branch -d [branch-name], removes the selected branch

3/10/2017 Version Control with Git 90

Page 91: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Tags… in brief

• useful to mark release points

• two types:– lightweight

– annotated (more complete)

• commands:– git tag, shows the available existing tags

– git tag [tag-name], creates a lightweight tag

– git tag -a [tag-name] -m [message]‚ creates an annotated tag

– tag show [tag-name], shows the tag data

3/10/2017 Version Control with Git 91

Page 92: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Hosted Git

• To have (at least) one remote repository

– alternative: set up your own Git server!

• Most popular:

– GitHub, https://github.com/

– Bitbucket, https://bitbucket.org/

– GitLab, https://about.gitlab.com/gitlab-com/

– Sourceforge, http://sourceforge.net/

– CodePlex (by Microsoft), https://www.codeplex.com/

3/10/2017 Version Control with Git 92

Page 93: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

GitHub

• Slightly different than other code-hosting sites– instead of being primarily based on the project, it is

user-centric

– social coding

• A commercial company– charges for accounts that maintain private repository

– free account to host as many open source project as you want

– free Micro plan for students• 5 private repositories, unlimited public repositories

• https://education.github.com

3/10/2017 Version Control with Git 93

Page 94: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Bitbucket

• Similar to GitHub

• Less used than GitHub, right now

• Mercurial support

• A commercial company– free private and public repositories for small team (up

to 5 private collaborators)

– charges for project involving bigger team

– free for academia (also for students)• unlimited public and private repositories

• unlimited users for single projects

3/10/2017 Version Control with Git 94

Page 95: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

GitHub Pages

• Website for your (GitHub) repository– https://pages.github.com/

• We will use it for hosting your project documentation/website– your website will be reachable from

http://sonet-2017.github.io/your-project-name

• FAQ– https://help.github.com/categories/github-pages-

basics/

3/10/2017 Version Control with Git 95

Page 96: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Homework(s)

• Create a personal GitHub account

– you can also ask for a “student discount” at

https://education.github.com

– we will require your username to set up your team

repositories for final projects

• report your GitHub username on the shared Google doc!

• Try Git!

– http://try.github.io/

– 15 minutes tutorial

3/10/2017 Version Control with Git 96

Page 97: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

References

• Git Reference– http://gitref.org/

• Git - the simple guide– http://rogerdudler.github.io/git-guide/

• Git Documentation– http://git-scm.com/docs

• Pro Git (online book)– http://git-scm.com/book

• Version Control by Example (online book)– http://www.ericsink.com/vcbe/

3/10/2017 Version Control with Git 97

Page 98: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

References

• Try Git!– http://try.github.io/

• Various Git resources– https://help.github.com/articles/what-are-other-good-

resources-for-learning-git-and-github

• A successful Git branching model– http://nvie.com/posts/a-successful-git-branching-

model/

• Some Git (graphical) clients– http://git-scm.com/downloads/guis

3/10/2017 Version Control with Git 98

Page 99: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

Questions?01QYAPD SOCIAL NETWORKING: TECHNOLOGIES

AND APPLICATIONS

My contact information:

Teodoro Montanaro ([email protected])

Thanks to Luigi De Russis ([email protected]), the

creator of the slides I used as basis!

Page 100: Introduction to Git - polito.it · Git AN INTRODUCTION Introduction to Git as a version control system: ... I delete/lose a previous ... Record changes to a file or a set of files

License

• This work is licensed under the Creative Commons “Attribution-NonCommercial-ShareAlike Unported (CC BY-NC-SA 3,0)” License.

• You are free:– to Share - to copy, distribute and transmit the work

– to Remix - to adapt the work

• Under the following conditions:– Attribution - You must attribute the work in the manner specified by the

author or licensor (but not in any way that suggests that they endorse you or your use of the work).

– Noncommercial - You may not use this work for commercial purposes.

– Share Alike - If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.

• To view a copy of this license, visit http://creativecommons.org/license/by-nc-sa/3.0/

3/10/2017 Version Control with Git 100