Managing code with Git and Stash

Quick Poll

  • Who is using a VCS for their code?
  • Who is using a centralized VCS (svn, cvs, etc)?
  • Who is using a DVCS (git, hg, bazar)?
  • Who is using GitHub or Bitbucket?

Why Version Control?

Why should I care about version control?

  • Develop collaboratively
  • Central location of all code
  • Infinite history/undo
  • Sandbox big changes
  • Development log
  • Tagging specific points
  • Compare versions 

Centralize vs Decentralized

Centralized (SVN)

  • Server-based (required)
  • Network connection needed to checkout, commit, revert, branch, etc.
  • Operations can be slow based on server and connection speed
  • All commits, branches and tags are public

Decentralized (Git)

  • Client based (you have the entire repo on your machine)
    • No server is needed to use git locally
  • Committing will only commit to you local cloned/init'd repo
  • Branching and tagging happens locally
  • Changes are "pushed" to the server in a separate step
  • Stash incomplete changes and apply any time
  • Pull changes from a server or other users
  • Multiple remote repositories

Management Server

  • Stash, GitHub, Bitbucket, etc.
  • Custom Workflows for team projects
  • Fork a repo
  • Pull requests using remotely accessible repository
    • Review code before merging in to blessed branch
    • Commenting
  • User Roles

Git Basics

Local only demo

Starting a project

$ cd existing-project
$ git init
$ git add --all
$ git commit -m "Initial Commit"
$ git remote add origin ssh://git@jiraapps2:7999/~abk/git-pres.git
$ git push origin master

OR

Cloning an exiting repo

$ git clone ssh://git@jiraapps2:7999/~abk/git-pres.git
Cloning into 'git-pres'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Receiving objects: 100% (3/3), done.
Checking connectivity... done.

$ ls
git-pres

Commit Some Code

$ git push origin master
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 456 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://git@jiraapps2:7999/~abk/git-pres.git

Push Commits to Server

$ git init
Initialized empty Git repository in /Users/abk/Projects/git-presentation/.git/
$ git add MyCoolFile.php
$ git commit -m "Added my first file"
[master (root-commit) 0b3486d] Added my first file
 1 file changed, 3 insertions(+)
 create mode 100644 MyCoolFile.php

Branching

$ git branch NewFeature
$ git branch
  NewFeature
* master
$ git checkout NewFeature
Switched to branch 'NewFeature'

Commit and Push to a Branch

$ git commit -a -m "Added a new line"
[NewFeature e5a4c95] Added a new line
 1 file changed, 1 insertion(+)

$ git push origin NewFeature
Counting objects: 9, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 315 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To ssh://git@jiraapps2:7999/~abk/git-pres.git
 * [new branch]      NewFeature -> NewFeature

Centralized Git with Stash

Demo

  • Existing Code
  • New Project

Resources

Workflows

Questions?

Managing code with Git and Stash

By akoebbe

Managing code with Git and Stash

  • 1,844