[2015/2016] collaborative software development with git

Post on 12-Apr-2017

694 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Ivano Malavolta

Collaborative software development

with Git

Roadmap

Concepts & workflow

Commands

Branching

GitHub

Lab

Global software engineering

Global softwareengineering

Collaboration Coordination

Communication Awareness

Global software engineering

CollaborationWhen the technology brings improvements to the shared space or to the way users interact with shared artifacts synchronously or asynchronously

CoordinationWhen the technology brings improvements to the support offered for people managing themselves, or themselves within a team

CommunicationWhen the technology brings improvements to the way messages and information are exchanged among people, reducing gaps, ambiguity, or the effort needed to understand, establish, or continue a conversation

AwarenessAn understanding of the activities of others, which provides a context for your own activity

Version control

“A system that records changes to a file or set of files over time so that you can recall specific versions later”

Files can refer to anything:

• source files

• images

• Powerpoint slides

• documents

à more concretely, if you screw things up or lose files, you can easily recover!

Local version control

Centralized version control

CVS

Distributed version control

Git

• Distributed Source Control system

• Open source, free (GNU GPL V2)

• Came out of Linux development community – Linus Torvalds, 2005

• Goals:– Speed – Simple design – Strong support for non-linear development (thousands of parallel

branches) – Fully distributed – Able to handle large projects like the Linux kernel efficiently

(speed and data size)

Key points of Git

• Snapshot-based– no deltas

• Integrity– Checksums as identification scheme

• Three states– working-staging-production

Key points: snapshot based

Storing data as changes to a base version of each file

Storing data as snapshots of the project over time

key points: integrity

• Everything in Git is check-summed before it is stored– This means it’s impossible to change the contents of any file or directory

without Git knowing about it

• Git generates a unique SHA-1 hash – 40 character string of hex digits, for every commit

• Git identifies files and directories by their ID rather than a version number– Often you will see only the first 7 characters:

1677b2d Edited first line of readme258efa7 Added line to readme0e52da7 Initial commit

Key points: 3 states

These are all local changes

Key points: 3 states

You modify files in your working directory

Basic Git workflow:

You stage the files, adding snapshots of them to your staging area

You do a commit, which takes the files as they are in the staging area and stores that snapshot permanently to your Git directory

1

2

3

A more complete workflow

http://documentup.com/skwp/git-workflows-book

Commands

Contents of this part of lecture coming fromhttps://training.github.com/kit/downloads/github-git-cheat-sheet.pdf

Commands

Commands

Commands

Commands

Commands

Commands

Commands

Commands

Branching

Branching

Branch = an independent line of development

Each branch has its own working directory, staging area, and project history

Git branches are extremely light and fast– Instead of copying files from directory to directory, Git stores a branch as a

reference to a commit

image from https://www.atlassian.com/git/tutorials/using-branches/git-branch

Branching workflow

Git ENCOURAGES workflows that branch and merge often, even multiple times in a day

When you want to add a new feature or fix a bug—no matter how big or how small—you spawn a new branch to encapsulate your changes

https://www.atlassian.com/git/tutorials/using-branches/git-branch

The main code base is always stable

It is possible to work in parallel on different features

Branching and merging

Imagine you already have 3 commits in your project

Master = The main branch in your project – Doesn’t have to be called master, but almost always is!

Creating branches

You have to fix issue #53 of your project

à you create a branch called iss53

You fix the issue and commit

Switching branches

Now there is an issue with your production code (e.g., a new bug)

à you have to switch to the master branch

Let’s make the hotfix

By doing this, Git will reset your working directory at the last commit of the branch

Merging branches

After you checked your hotfix, you can put it in production

à you merge the hotfix branch with master

Let’s make the hotfix

Fast-forward: Git just moves the master pointer forward towards hotfix

Deleting branches

Now the hotfix branch is no longer needed because it points to the same place as masterà you delete the hotfix branch

And now you can continue working on your iss53

Merging branches

If your work on iss53 is finished, then you can put it in production

à you merge iss53 into the master branch

This is not a fast-forward merge

In this case Git automatically does a 3-way merge between the 2 snapshots to be merged and the common ancestor

Merging branches 1

If your work on iss53 is finished, then you can put it in production

à you merge iss53 into the master branch

This is not a fast-forward merge

In this case Git automatically does a 3-way merge between the 2 snapshots to be merged and the common ancestor

Merging branches 2

Git automatically creates:

1. a new snapshot containing the result of the 3-way merge

2. a new commit pointing to the new snapshot

If you changed the same part of the same file -> CONFLICT

GitHub

A site for online storage of Git repositories– You can get free space for open source projects – or you can pay for private projects

Adds extra functionalities, like:– web UI– documentation– bug tracking (issues)– feature requests, pull requests– social interactions among developers

• following, check activities, discover new repos

It is not mandatory, you can:

• use Git locally

• setup a private Git server

Lab

1. Register to GitHub

2. fork this repo: https://github.com/iivanoo/rest-biter3. create a Python script your_name.py

4. in the script, add a simple function definition that does something(even just a print statement)

5. in restBiter.py add:– an import statement for importing your Python script of step 4– a statement for calling the function defined in your Python script

6. test the main function by running the script in the terminal:python restBiter.py http://www.google.com 2 0 500 1000

7. do commit and push your changes to your repo

8. [optional] open a new pull request to merge your changes with the original repo

References

• Official git site and tutorials– https://git-scm.com

• GitHub guides– https://guides.github.com

• Commands cheatsheet– https://training.github.com/kit/downloads/github-git-cheat-sheet.pdf

ContactIvano Malavolta |

Post-doc researcherGran Sasso Science Institute

iivanoo

ivano.malavolta@gssi.infn.it

www.ivanomalavolta.com

top related