learning git with workflows

Post on 07-May-2015

1.031 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

It is the slides for SITCON[1] 2013 Workshop[2]: "Git - The Version Control System You Must Know". [1]: http://sitcon.org/ [2]: http://www.openfoundry.org/tw/activities/details/415-the-open-source-way-coder

TRANSCRIPT

Learning Git with Workflows

Mosky

This slides

2

This slides

won't

explain every options of Git commands;

and the internal of Git.

2

This slides

won't

explain every options of Git commands;

and the internal of Git.

will

let you start to use Git immediately;

and learn the common Git workflows.

2

Mosky

3

Mosky

A Python engineer at Pinkoi

3

Mosky

A Python engineer at Pinkoi

An author of some Python packages

MoSQL, Clime, ...

3

Mosky

A Python engineer at Pinkoi

An author of some Python packages

MoSQL, Clime, ...

A speaker at several conferences

PyCon APAC 2013, COSCUP 2013, PyCon TW 2013, ...

3

Mosky

A Python engineer at Pinkoi

An author of some Python packages

MoSQL, Clime, ...

A speaker at several conferences

PyCon APAC 2013, COSCUP 2013, PyCon TW 2013, ...

A Python trainer

3

Mosky

A Python engineer at Pinkoi

An author of some Python packages

MoSQL, Clime, ...

A speaker at several conferences

PyCon APAC 2013, COSCUP 2013, PyCon TW 2013, ...

A Python trainer

http://mosky.tw/

3

Outline

6

Outline

Setup Git

6

Outline

Setup Git

Routine

Core

Secondary

6

Outline

Setup Git

Routine

Core

Secondary

Branching

6

Outline

Setup Git

Routine

Core

Secondary

Branching

Remote Repository

6

Outline

Setup Git

Routine

Core

Secondary

Branching

Remote Repository

A Co-working Workflow

6

Setup Git

Get Git!

8

Get Git!

Ubuntu, Debian or any APT-based Linux

$ sudo apt-get install git-core

8

Get Git!

Ubuntu, Debian or any APT-based Linux

$ sudo apt-get install git-coreMac

$ brew install githttp://brew.sh/

8

Get Git!

Ubuntu, Debian or any APT-based Linux

$ sudo apt-get install git-coreMac

$ brew install githttp://brew.sh/

Windows

http://git-scm.com/download/win

8

Is Git there?

9

GUIs are available

10

GUIs are available

Thanks GitHub!

10

GUIs are available

Thanks GitHub!

"Github for Mac"

http://mac.github.com/

10

GUIs are available

Thanks GitHub!

"Github for Mac"

http://mac.github.com/

"Github for Windows"

http://windows.github.com/

10

GUIs are available

Thanks GitHub!

"Github for Mac"

http://mac.github.com/

"Github for Windows"

http://windows.github.com/

Other

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

10

Tell Git who you are

11

Tell Git who you are

$ git config --global user.name "Mosky Liu"

11

Tell Git who you are

$ git config --global user.name "Mosky Liu"

$ git config --global user.email mosky.tw@gmail.com

11

Other Git configs

12

Other Git configs

$ git config --global core.editor emacs

12

Other Git configs

$ git config --global core.editor emacs

$ git config --global merge.tool vimdiff

12

Other Git configs

$ git config --global core.editor emacs

$ git config --global merge.tool vimdiff

$ git config --list

12

Other Git configs

$ git config --global core.editor emacs

$ git config --global merge.tool vimdiff

$ git config --list

$ vim ~/.gitconfig

12

Other Git configs

$ git config --global core.editor emacs

$ git config --global merge.tool vimdiff

$ git config --list

$ vim ~/.gitconfig

http://j.mp/mosky-gitconfig

12

Core Routine

Create a repository

14

Create a repository

$ git init [<directory>]

14

Commit changes

15

Commit changes

$ git add <file> ...

15

Commit changes

$ git add <file> ...

$ git commit

15

Simplest Workflow

16

Simplest Workflow

(1) $ git init <directory>

16

Simplest Workflow

(1) $ git init <directory>(2) (modify file)

16

Simplest Workflow

(1) $ git init <directory>(2) (modify file)(3) $ git add <file> ...

16

Simplest Workflow

(1) $ git init <directory>(2) (modify file)(3) $ git add <file> ...(4) $ git commit

16

Simplest Workflow

(1) $ git init <directory>(2) (modify file)(3) $ git add <file> ...(4) $ git commit

# Back 2

16

Simplest Workflow

(1) $ git init <directory>(2) (modify file)(3) $ git add <file> ...(4) $ git commit

# Back 2The end of the core --- it's super easy!

16

Secondary Routine

Check status of files

18

Check status of files

$ git status

18

Check status of files

$ git status

18

Check what you changed

19

Check what you changed

$ git diff

19

Check what you changed

$ git diff

19

Check commits

20

Check commits

$ git log

20

Check commits

$ git log

20

Move between commits

21

Move between commits

$ git checkout <commit>

21

Move between commits

$ git checkout <commit>

<commit>

599d439fd3813298da16f12ed40f3a0716872c30

599d439

HEAD21

Name commit

22

Name commit

$ git tag <tagname>

$ git checkout 599d439

$ git tag v0.1

$ git checkout v0.1

22

Reset to a commit

23

Reset to a commit

$ git reset <commit>

Reset HEAD to <commit>.

23

Make a "reverse" commit

24

Make a "reverse" commit

$ git revert <commit>Apply a "reverse" commit.

24

Reset to a commit

25

Reset to a commit

26

Make a "reverse" commit

27

Make a "reverse" commit

28

Branching

master

master

topic

master

topic

HEAD

master

topic

HEAD

master

topic

HEAD

master

topic

HEAD

master

topic

HEAD

Create a branch

32

Create a branch

$ git branch <branchname>

32

Create a branch

$ git branch <branchname>

$ git checkout <branchname>

32

Create a branch

$ git branch <branchname>

$ git checkout <branchname>or

32

Create a branch

$ git branch <branchname>

$ git checkout <branchname>or

$ git checkout -b <branchname>

32

Delete and list branch(es)

33

Delete and list branch(es)

$ git branch -d <branchname>Delete branch.

33

Delete and list branch(es)

$ git branch -d <branchname>Delete branch.

$ git branchList branches.

33

Move between branches

34

Move between branches

$ git checkout <branchname>

34

Merge a branch back

35

Merge a branch back

$ git checkout <base-branch>

35

Merge a branch back

$ git checkout <base-branch>

$ git merge <topic-branch>

35

Branching Workflow

37

Branching Workflow

...

37

Branching Workflow

...

(1) $ git branch <topic-branch>

37

Branching Workflow

...

(1) $ git branch <topic-branch>

(2) $ git checkout <topic-branch>

37

Branching Workflow

...

(1) $ git branch <topic-branch>

(2) $ git checkout <topic-branch>

(3) (modify file)

37

Branching Workflow

...

(1) $ git branch <topic-branch>

(2) $ git checkout <topic-branch>

(3) (modify file)

...

37

Branching Workflow

...

(1) $ git branch <topic-branch>

(2) $ git checkout <topic-branch>

(3) (modify file)

...

(4) $ git commit

37

Branching Workflow

...

(1) $ git branch <topic-branch>

(2) $ git checkout <topic-branch>

(3) (modify file)

...

(4) $ git commit

# Back 3 until finish "topic"

37

Branching Workflow

...

(1) $ git branch <topic-branch>

(2) $ git checkout <topic-branch>

(3) (modify file)

...

(4) $ git commit

# Back 3 until finish "topic"

(5) $ git checkout <base-branch>

37

Branching Workflow

...

(1) $ git branch <topic-branch>

(2) $ git checkout <topic-branch>

(3) (modify file)

...

(4) $ git commit

# Back 3 until finish "topic"

(5) $ git checkout <base-branch>

(6) $ git merge <topic-branch>

37

Remote Repository

Clone a remote repository

39

Clone a remote repository

$ git clone <repos> <dir>

39

Clone a remote repository

$ git clone <repos> <dir>

<repos>

https://github.com/torvalds/linux.git

39

Create a remote repository

40

Create a remote repository

$ git init --bare

40

Create a remote repository

$ git init --bareor

40

Create a remote repository

$ git init --bareor

https://github.com/repositories/new

40

Add, remove and list remotes

41

Add, remove and list remotes

$ git remote add <name> <url><url> can be a local path.

41

Add, remove and list remotes

$ git remote add <name> <url><url> can be a local path.

$ git remote remove <name>

41

Add, remove and list remotes

$ git remote add <name> <url><url> can be a local path.

$ git remote remove <name>

$ git remote

41

Push commits to remote

42

Push commits to remote

$ git push <repos> <refspec>...

42

Push commits to remote

$ git push <repos> <refspec>...

<refspec>usually is branch or tag name

[+]<src>[:<dst>]

:<dst> to delete remote reference.

42

Pull commits from remote

43

Pull commits from remote

$ git pull <repos> <refspec>...

43

A Co-working Workflow

Three Principles

45

Three Principles

1. master is production.

45

Three Principles

1. master is production.

2. dev only includes stable and reviewed code.

45

Three Principles

1. master is production.

2. dev only includes stable and reviewed code.

3. Create topic branch to resolve issue all the time.

45

Three Phases

46

Three Phases

1. Resolving

Create a topic branch to resolve issue.

46

Three Phases

1. Resolving

Create a topic branch to resolve issue.

2. Reviewing

Review the code.

46

Three Phases

1. Resolving

Create a topic branch to resolve issue.

2. Reviewing

Review the code.

3. Cleanup

Merge into dev and remove topic branch.

46

47

Assigner: "We need to resolve this issue."

47

Assigner: "We need to resolve this issue."

Assignee: "Yes, sir!"

47

Assigner: "We need to resolve this issue."

Assignee: "Yes, sir!"

Assignee (dev) $ git checkout -b topic

47

Assigner: "We need to resolve this issue."

Assignee: "Yes, sir!"

Assignee (dev) $ git checkout -b topic

Assignee (topic) $ (commit...)

47

Assigner: "We need to resolve this issue."

Assignee: "Yes, sir!"

Assignee (dev) $ git checkout -b topic

Assignee (topic) $ (commit...)

Assignee (topic) $ git push origin topic

47

Assigner: "We need to resolve this issue."

Assignee: "Yes, sir!"

Assignee (dev) $ git checkout -b topic

Assignee (topic) $ (commit...)

Assignee (topic) $ git push origin topic

Until resolve, call assigner for review.

47

48

Assignee: "I resolved!"

48

Assignee: "I resolved!"

Assigner: "Let me review."

48

Assignee: "I resolved!"

Assigner: "Let me review."

Assigner (dev) $ git checkout -b topic

48

Assignee: "I resolved!"

Assigner: "Let me review."

Assigner (dev) $ git checkout -b topic

Assigner (topic) $ git pull origin topic

48

Assignee: "I resolved!"

Assigner: "Let me review."

Assigner (dev) $ git checkout -b topic

Assigner (topic) $ git pull origin topic

Assigner (topic) $ git diff ...dev

48

Assignee: "I resolved!"

Assigner: "Let me review."

Assigner (dev) $ git checkout -b topic

Assigner (topic) $ git pull origin topic

Assigner (topic) $ git diff ...dev

If it is not good enough, call assignee to fix.

48

49

Assigner (topic) $ git checkout dev

49

Assigner (topic) $ git checkout dev

Assigner (dev) $ git merge topic

49

Assigner (topic) $ git checkout dev

Assigner (dev) $ git merge topic

Assigner (dev) $ git push origin dev

49

Assigner (topic) $ git checkout dev

Assigner (dev) $ git merge topic

Assigner (dev) $ git push origin dev

Assigner: "Good job!"

49

Assigner (topic) $ git checkout dev

Assigner (dev) $ git merge topic

Assigner (dev) $ git push origin dev

Assigner: "Good job!"

Assignee (dev) $ git branch -d topic

49

Assigner (topic) $ git checkout dev

Assigner (dev) $ git merge topic

Assigner (dev) $ git push origin dev

Assigner: "Good job!"

Assignee (dev) $ git branch -d topic

Assignee (dev) $ git push origin :topic

49

Assigner (topic) $ git checkout dev

Assigner (dev) $ git merge topic

Assigner (dev) $ git push origin dev

Assigner: "Good job!"

Assignee (dev) $ git branch -d topic

Assignee (dev) $ git push origin :topic

Assignee (dev) $ git pull origin dev49

End

End

52

End

Use branch!

52

End

Use branch!

Workflow does matter.

52

End

Use branch!

Workflow does matter.

Git still has many magics.

52

End

Use branch!

Workflow does matter.

Git still has many magics.

Tips: http://j.mp/mosky-gitconfig

52

End

Use branch!

Workflow does matter.

Git still has many magics.

Tips: http://j.mp/mosky-gitconfig

Q&A

52

top related