Why Java Devs Should Care About
	 	 Git & GitHub
at the San Francisco JUG
by Matthew McCullough
@matthewmccull
matthew@github.com
github.com/training
Matthew McCullough
@matthewmccull
Git
“Cool kids” version control system
Open Source
bash scripts C code
≉
I'm an egotistical bastard, and
I name all my projects
after myself. First Linux,
now git.
-Linus Torvalds
“
”
Git and
Java
Git and the
JVM
JGit
Git in pure Java
Central
Repo
Blessed
Repo
Certified
Repo
Development
Repo
Continuous
Integration
Server
➡How to commit, branch and tag
➡How Git implements a new commit-referencing syntax
➡How to pull and push changes between repositories
➡How to set up a Git repository
➡How to set up a Git repository
No daemon
No special repo area
> cd myproj
> git init
Initialized empty Git repository
in /stuff/myproj/.git/
➡How to commit, branch and tag
➡How Git implements a new commit-referencing syntax
➡How to pull and push changes between repositories
➡How to set up a Git repository
➡How to commit, branch and tag
The three basics
➡How to commit
> git add <FILENAME>
> git status
# On branch master
# Initial commit
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
# new file: myfile.txt
> git commit -m”<MESSAGE>”
[master (root-commit) 498cc44] My first commit
1 files changed, 5 insertions(+), 0 deletions(-)
create mode 100644 myfile.txt
Local
Branches
Remote
Branches
Upstream
Branches
Working
Copy
commit
➡How to branch
> git branch <BRANCHNAME>
Local
Branches
Remote
Branches
Upstream
Branches
Working
Copy
Local
Branches
Remote
Branches
Upstream
Branches
Working
Copy
> git checkout <BRANCHNAME>
Switched to branch 'mybranch'
Local
Branches
Remote
Branches
Upstream
Branches
Working
Copy
Local
Branches
Remote
Branches
Upstream
Branches
Working
Copy
➡How to tag
> git tag -a <TAGNAME> -m”<MESSAGE>”
➡How to commit, branch and tag
➡How Git implements a new commit-referencing syntax
➡How to pull and push changes between repositories
➡How to set up a Git repository
➡How Git implements a new commit-referencing syntax
9AB223D28B1AA46EF1780B22F304982E39872C34
<html>
<body>
<p>This is a test</p>
<img src="http://ai.com/icon.gif">
</body>
</html>
9AB223D28B1AA46EF1780B22F304982E39872C34
<html>
<body>
<p>This is a test</p>
<img src="http://ai.com/icon.gif">
</body>
</html>
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
v1 v2 v3
commit
tree: 9a87b
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the Javascript rendering
engine.
c67db
commit
tree: b22c1
parent: c67db
author: Tim
committer: Fird
message:
Minor update to HTML
9bd21
commit
tree: b22c1
parent: 9bd21
author: Johnny
committer: Joe
message:
New language transations
1c2d7
v1 v2 v3
commit
tree: 9a87b
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the Javascript rendering
engine.
c67db
commit
tree: b22c1
parent: c67db
author: Tim
committer: Fird
message:
Minor update to HTML
9bd21
commit
tree: b22c1
parent: 9bd21
author: Johnny
committer: Joe
message:
New language transations
1c2d7
v1 v2 v3
commit
tree: 9a87b
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the Javascript rendering
engine.
c67db
commit
tree: b22c1
parent: c67db
author: Tim
committer: Fird
message:
Minor update to HTML
9bd21
commit
tree: b22c1
parent: 9bd21
author: Johnny
committer: Joe
message:
New language transations
1c2d7
v1 v2 v3
commit
tree: 9a87b
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the Javascript rendering
engine.
c67db
commit
tree: b22c1
parent: c67db
author: Tim
committer: Fird
message:
Minor update to HTML
9bd21
commit
tree: b22c1
parent: 9bd21
author: Johnny
committer: Joe
message:
New language transations
1c2d7
v1 v2 v3
commit
tree: 9a87b
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the Javascript rendering
engine.
c67db
commit
tree: b22c1
parent: c67db
author: Tim
committer: Fird
message:
Minor update to HTML
9bd21
commit
tree: b22c1
parent: 9bd21
author: Johnny
committer: Joe
message:
New language transations
1c2d7
v1 v2 v3
commit
tree: 9a87b
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the Javascript rendering
engine.
c67db
commit
tree: b22c1
parent: c67db
author: Tim
committer: Fird
message:
Minor update to HTML
9bd21
commit
tree: b22c1
parent: 9bd21
author: Johnny
committer: Joe
message:
New language transations
1c2d7
v1 v2 v3
commit
tree: 9a87b
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the Javascript rendering
engine.
c67db
commit
tree: b22c1
parent: c67db
author: Tim
committer: Fird
message:
Minor update to HTML
9bd21
commit
tree: b22c1
parent: 9bd21
author: Johnny
committer: Joe
message:
New language transations
1c2d7
v1 v2 v3
commit
tree: 9a87b
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the Javascript rendering
engine.
c67db
commit
tree: b22c1
parent: c67db
author: Tim
committer: Fird
message:
Minor update to HTML
9bd21
commit
tree: b22c1
parent: 9bd21
author: Johnny
committer: Joe
message:
New language transations
1c2d7
RELEASE_1.0 HEAD
bug979branch
commit
c67db
commit
9bd21
commit
1c2d7
commit
8c2d1
commit
1bdcd
commit
2daa1
RELEASE_1.0 HEAD
bug979branch
commit
c67db
commit
9bd21
commit
1c2d7
commit
8c2d1
commit
1bdcd
commit
2daa1
RELEASE_1.0 HEAD
bug979branch
commit
c67db
commit
9bd21
commit
1c2d7
commit
8c2d1
commit
1bdcd
commit
2daa1
RELEASE_1.0 HEAD
bug979branch
commit
c67db
commit
9bd21
commit
1c2d7
commit
8c2d1
commit
1bdcd
commit
2daa1
RELEASE_1.0 HEAD
bug979branch
commit
c67db
commit
9bd21
commit
1c2d7
commit
8c2d1
commit
1bdcd
commit
2daa1
RELEASE_1.0 HEAD
bug979branch
commit
c67db
commit
9bd21
commit
1c2d7
commit
8c2d1
commit
1bdcd
commit
2daa1
> git log
commit 0fc27c73dea82a0576c6cf262fb517d24e75a223
Author: Matthew McCullough <matthewm@ambientideas.com>
Date: Mon Oct 24 10:42:20 2013 +0300
Performance enhancement of calc engine
commit 7d946e814233814b1780ed1035da271cbb37206d
Author: Matthew McCullough <matthewm@ambientideas.com>
Date: Mon Oct 24 12:59:41 2013 +0300
Translation to Esperanto
➡How to commit, branch and tag
➡How Git implements a new commit-referencing syntax
➡How to pull and push changes between repositories
➡How to set up a Git repository
➡How to pull and push changes between repositories
> git clone http://this.com/myproj.git
Cloning into myproj...
remote: Counting objects: 3871, done.
remote: Compressing objects: 100% (73/73), done.
remote: Total 3871 (delta 51), reused 3853 (delta 36)
Receiving objects: 100% (3871/3871), 297.88 KiB | 35 KiB/s, done.
Resolving deltas: 100% (51/51), done.
> cd myproj
Local
Branches
Remote
Branches
Upstream
Branches
Working
Copy
clone clone clone
> git push
Counting objects: 16, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (15/15), 1.37 KiB, done.
Total 15 (delta 5), reused 0 (delta 0)
To http://this.com/myproj.git
6128b94..7607971 master -> master
Local
Branches
Remote
Branches
Upstream
Branches
Working
Copy
pushpush
commit
> git pull
Updating 474f43d..7607971
Fast-forward
sample5.htm | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 sample5.htm
Local
Branches
Remote
Branches
Upstream
Branches
Working
Copy
pull pull pull
Why Java Devs Should Care About
	 	 Git & GitHub
at the San Francisco JUG
by Matthew McCullough
@matthewmccull
matthew@github.com
github.com/training

Git and GitHub at the San Francisco JUG