git immersion - o'reilly mediaassets.en.oreilly.com/1/event/40/git immersion...

96
Copyright 2010 by Jim Weirich Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase [email protected] @jimweirich Copyright 2010 by Jim Weirich 1 Copyright 2010 by Jim Weirich git config --global user.name "Jim Weirich" git config --global user.email "[email protected] " Setup git config --global core.autocrlf true (Windows) git config --global core.autocrlf input (Unix/Mac) git config --global core.safecrlf true also 2

Upload: phungbao

Post on 01-Sep-2018

318 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Git ImmersionRails Conf 2010 Tutorial

Jim WeirichChief Scientist / EdgeCase

[email protected]@jimweirich

Copyright 2010 by Jim Weirich

1

Copyright 2010 by Jim Weirich

git config --global user.name "Jim Weirich"

git config --global user.email "[email protected]"

Setup

git config --global core.autocrlf true (Windows)

git config --global core.autocrlf input (Unix/Mac)

git config --global core.safecrlf true

also

2

Page 2: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Creating a Git Repo

$ mkdir demo

$ (edit files)

$ git init

3

Copyright 2010 by Jim Weirich

Checking In

$ git status

$ git add .

$ git commit -m "message"

4

Page 3: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Labs Can be found at ...

http://onestepback.org/download/git_tutorial.zip

5

Copyright 2010 by Jim Weirich

Source ControlMade Easy

6

Page 4: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Why?

7

Copyright 2010 by Jim Weirich

What we are not going to talk about ...

8

Page 5: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Your Mission

9

Copyright 2010 by Jim Weirich

Your Mission

Design and BuildA Source Code

Control System

10

Page 6: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

CustomSourceControl

11

Copyright 2010 by Jim Weirich

CustomSourceControl

12

Page 7: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

In the Old Days ...

13

Copyright 2010 by Jim Weirich

WorkingDirectory

v1 v1

file1 file2

14

Page 8: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

001.tar

WorkingDirectory

v1 v1

file1 file2

Project Archive

15

Copyright 2010 by Jim Weirich

001.tar

WorkingDirectory

v1 v1

Manifest

file1 file2

Project Archive

16

Page 9: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

001.tar

WorkingDirectory

v1 v1

file1

Manifest

file1 file2

file2

Project Archive

17

Copyright 2010 by Jim Weirich

001.tar

WorkingDirectory

v1 v1

$ csc snap

file1 file2

Project Archive

18

Page 10: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

001.tar

002.tar

WorkingDirectory

v1v2

$ csc snap

file1 file2

Project Archive

19

Copyright 2010 by Jim Weirich

001.tar

002.tar

003.tar

WorkingDirectory

Project Archive

v2v2

$ csc snap

file1 file2

20

Page 11: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

001.tar

002.tar

003.tar

WorkingDirectory

Project Archive

v1v2

$ csc checkout 002

file1 file2

21

Copyright 2010 by Jim Weirich

Two Basic Commands

•Snap

•Checkout

22

Page 12: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Very Easy / Very Simple

23

Copyright 2010 by Jim Weirich

Rather Wasteful

24

Page 13: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

001.tar

002.tar

003.tar

v1 v1

v2 v1

v2 v2

SameContent

file1 file2manifest

25

Copyright 2010 by Jim Weirich

001.tar

002.tar

003.tar

v1 v1

v2

v2

file1 file2manifest

26

Page 14: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

001.tar

002.tar

003.tar

v1 v1

v2

v2

file1 file2manifest

27

Copyright 2010 by Jim Weirich

v1 v1

v2

v2

Note: Each snapshot is totally defined by the manifest file for that snapshot.

file1 file2manifest

28

Page 15: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

manifest / (001) file1 file1 (V1) file2 file2 (V1) manifest / manifest / file1 file1 (V2) file2 file2 (V2)

FileName Contents

CONFLICT!

29

Copyright 2010 by Jim Weirich

? / (001) ? file1 (V1) ? file2 (V1) ? / ? / ? file1 (V2) ? file2 (V2)

FileName Contents

30

Page 16: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

FileName Contents

aaaa / (001) aaab file1 (V1) aaac file2 (V1) aaad / aaae / aaaf file1 (V2) aaag file2 (V2)

Note: The Project Archive is just a directory with files in it.

31

Copyright 2010 by Jim Weirich

FileName Contents

aaaa / (001) aaab file1 (V1) aaac file2 (V1) aaad / aaae / aaaf file1 (V2) aaag file2 (V2)

$ ls

aaaa aaab aaac aaad aaae aaaf aaag

32

Page 17: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Project Archive

• Is just a directory with files in it

• The archive files have arbitrary names.

• The file names can be anything as long as they are unique

• We track the real file names in the manifest files.

33

Copyright 2010 by Jim Weirich

aaaa / (001)aaab file1 (V1)aaac file2 (V1)aaad / (002)aaae / (003)aaaf file1 (V2)aaag file2 (v2)

FileName Contents

aaaa -- / (001)

file1 aaab

file2 aaac

Note: A manifest file is just a text file listing all the files it contains and their IDs.

34

Page 18: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

aaaa / (001)aaab file1 (V1)aaac file2 (V1)aaad / (002)aaae / (003)aaaf file1 (V2)aaag file2 (v2)

FileName Contents

file1 aaaf

file2 aaac

aaad -- / (002)

35

Copyright 2010 by Jim Weirich

aaaa / (001)aaab file1 (V1)aaac file2 (V1)aaad / (002)aaae / (003)aaaf file1 (V2)aaag file2 (v2)

FileName Contents

file1 aaaf

file2 aaag

aaae -- / (003)

36

Page 19: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

aaaa / (001)aaab file1 (V1)aaac file2 (V1)aaad / (002)aaae / (003)aaaf file1 (V2)aaag file2 (v2)

file1 aaab

file2 aaac

aaaa -- / (001)

FileName Contents

file1 aaaf

file2 aaac

aaac -- / (002)

file1 aaaf

file2 aaag

aaae -- / (003)

37

Copyright 2010 by Jim Weirich

Rakefile

stuff.rb more.rb stuff_test.rb more_test.rb

lib test

/ Project Archive

38

Page 20: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Metadata would be nice

39

Copyright 2010 by Jim Weirich

What Metadata?

• The Root manifest of the snapshot

• Name/EMail of the person commiting the snapshot

• Date/Time of the snapshot

• Some comments describing the snapshot

40

Page 21: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

tree aaaeauthor Jim <[email protected]> 1246996320 -0400

Comments describing this snapshot.

41

Copyright 2010 by Jim Weirich

tree aaaeauthor Jim <[email protected]> 1246996320 -0400

Comments describing this snapshot.

Root Manifestfor Snapshot

42

Page 22: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

tree aaaeauthor Jim <[email protected]> 1246996320 -0400

Comments describing this snapshot.

Author & EMail

43

Copyright 2010 by Jim Weirich

tree aaaeauthor Jim <[email protected]> 1246996320 -0400

Comments describing this snapshot.

Date/Time(seconds since 1970)

Time Zone

44

Page 23: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

tree aaaeauthor Jim <[email protected]> 1246996320 -0400

Comments describing this snapshot.

Comment

45

Copyright 2010 by Jim Weirich

tree aaaeauthor Jim <[email protected]> 1246996320 -0400

Comments describing this snapshot.

tree aaaeauthor Jim <[email protected]> 1246996320 -0400

Comments describing this snapshot.

46

Page 24: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

v1 v1

v2

v2

aaaj

aaah

aaai

47

Copyright 2010 by Jim Weirich

tree aaaeauthor Jim <[email protected]> 1246996320 -0400

Comments describing this snapshot.

48

Page 25: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

tree aaaeparent aaaiauthor Jim <[email protected]> 1246996320 -0400

Comments describing this snapshot.

previous snapshot

49

Copyright 2010 by Jim Weirich

v1 v1

v2

v2

aaaj

aaah

aaai

Project Archive

50

Page 26: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

v1 v1

v2

v2

aaaj

aaah

aaai

Project Archive

51

Copyright 2010 by Jim Weirich

HEAD

v1 v1

v2

v2

aaaj

aaah

aaai

aaaj

Project Archive

52

Page 27: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Summary So Far ...

53

Copyright 2010 by Jim Weirich

001.tar

002.tar

003.tar

WorkingDirectory

Project Archive

54

Page 28: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

head

WorkingDirectory

Project Archive

55

Copyright 2010 by Jim Weirich

How do we create a snapshot now?

56

Page 29: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

WorkingDirectory Project Archive

head

(1) Copy changed files to archive

57

Copyright 2010 by Jim Weirich

WorkingDirectory Project Archive

(1) Copy changed files to archive(2) Create new manifest

head

58

Page 30: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

WorkingDirectory Project Archive

(1) Copy changed files to archive(2) Create new manifest(3) Create new snapshot record

head

59

Copyright 2010 by Jim Weirich

WorkingDirectory Project Archive

(1) Copy changed files to archive(2) Create new manifest(3) Create new snapshot record(4) Readjust HEAD

head

60

Page 31: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

WorkingDirectory Project Archive

(1) Copy changed files to archive(2) Create new manifest(3) Create new snapshot record(4) Readjust HEAD

Note: The Project Archive is always additive. Information is never destroyed.

head

61

Copyright 2010 by Jim Weirich

WorkingDirectory Project Archive

(1) Copy changed files to archive(2) Create new manifest(3) Create new snapshot record(4) Readjust HEAD

head

62

Page 32: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

WorkingDirectory Project Archive

head

(1) Copy changed files to archive(2) Create new directory(3) Create new Commit Record(4) Readjust HEAD

Question: How do we detect changes?

head

63

Copyright 2010 by Jim Weirich

head

WorkingDirectory Project Archive

head

(1) Copy changed files to archive(2) Create new directory(3) Create new Commit Record(4) Readjust HEAD

COMPARECOMPARE

64

Page 33: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

head

WorkingDirectory Project Archive

(1) Copy changed files to archive(2) Create new directory(3) Create new Commit Record(4) Readjust HEAD

COMPARECOMPARECOMPARE

COMPARECOMPARE

COMPARECOMPARE

65

Copyright 2010 by Jim Weirich

Detecting Duplication

66

Page 34: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Hi, my name is Bob.

file.txt

"55dc96ede241511e35f1973957bbd51f37f3762b"

SHA1

67

Copyright 2010 by Jim Weirich

Hi, my name is Joe.

file.txt

"55dc96ede241511e35f1973957bbd51f37f3762b"

"53f2509e877de3cad85c547a0c2a22b43c5d81eb"

SHA1

68

Page 35: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

file1.txt

SHA1

"55dc96ede241511e35f1973957bbd51f37f3762b"

file2.txt

Hi, my name is Bob. Hi, my name is Bob.

Identical ContentProduces

Identical Hashes

69

Copyright 2010 by Jim Weirich

File Names in the Archive

• Arbitrary

• Unique

aaaa / (001) aaab file1 (V1) aaac file2 (V1) aaad / aaae / aaaf file1 (V2) aaag file2 (V2)

70

Page 36: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Use the SHA1 Hashfor the File Name

Idea:

71

Copyright 2010 by Jim Weirich

aaaa aaab aaac aaad aaae aaafaaag aaah aaai

Project Archive

72

Page 37: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

75e3dee3503e7ad5... 1586ad8975e3dee3...f6da34481586ad89...f99b89d6f6da3448...503d6749f99b89d6...2b436957503d6749...944ff522944ff522...6c024e25944ff522...503e7ad56c024e25...

Project Archive

73

Copyright 2010 by Jim Weirich

HEAD

75e3dee3503e7ad5... 1586ad8975e3dee3...f6da34481586ad89...f99b89d6f6da3448...503d6749f99b89d6...2b436957503d6749...944ff522944ff522...6c024e25944ff522...503e7ad56c024e25...

75e3dee3503e7ad5...

Project Archive

74

Page 38: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

75e3dee3503e7ad5... 1586ad8975e3dee3...f6da34481586ad89...f99b89d6f6da3448...503d6749f99b89d6...2b436957503d6749...944ff522944ff522...6c024e25944ff522...503e7ad56c024e25...

2b436957503d6749 ...

Match!

Project Archive

SHA1

75

Copyright 2010 by Jim Weirich

75e3dee3503e7ad5... 1586ad8975e3dee3...f6da34481586ad89...f99b89d6f6da3448...503d6749f99b89d6...2b436957503d6749...944ff522944ff522...6c024e25944ff522...503e7ad56c024e25...

9d6f503d24e2d56c ...

NoMatch!

Project Archive

SHA1

76

Page 39: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

75e3dee3503e7ad5... 1586ad8975e3dee3...f6da34481586ad89...f99b89d6f6da3448...503d6749f99b89d6...2b436957503d6749...944ff522944ff522...6c024e25944ff522...503e7ad56c024e25...

9d6f503d24e2d56c ...

Copy File

9d6f503d24e2d56c...

Project Archive

SHA1

77

Copyright 2010 by Jim Weirich

Project Archive

Integrity

78

Page 40: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

v1 v1

v2

v2

8ee9

Project Archive

HEAD(8ee9...)

79

Copyright 2010 by Jim Weirich

HEAD

v1 v1

v2

v2(8ee9...)

8ee9 57af

2ade

Project Archive

80

Page 41: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

HEAD

v1 v1

v2

v2(8ee9...)

8ee9 57af

2ade

1e3d

1dda a3f8

89ba 157c 9231 64aa

Project Archive

81

Copyright 2010 by Jim Weirich

HEAD

v1 v1

v2

v2(8ee9...)

8ee9 57af

2ade

1e3d

1dda a3f8

89ba 157c 9231 64aa

X

File iscorrupted

82

Page 42: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

HEAD

v1 v1

v2

v2(8ee9...)

8ee9 57af

2ade

1e3d

1dda a3f8

89ba 157c 9231 64aa

X

File iscorrupted

Hash doesn’t match

Project Archive

83

Copyright 2010 by Jim Weirich

HEAD

v1 v1

v2

v2(8ee9...)

8ee9 57af

2ade

4fd2

1dda a3f8

89ba 157c 9231 64aa

XHackerUpdatesHash

X

Project Archive

84

Page 43: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

HEAD

v1 v1

v2

v2(8ee9...)

8ee9 57af

2ade

4fd2

1dda a3f8

89ba 157c 9231 64aa

XHackerUpdatesDirectory

Project Archive

85

Copyright 2010 by Jim Weirich

HEAD

v1 v1

v2

v2(8ee9...)

8ee9 57af

2ade

4fd2

1dda a3f8

89ba 157c 9231 64aa

XHackerFixesHash

X

Project Archive

86

Page 44: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

HEAD

v1 v1

v2

v2(8ee9...)

3e87 57af

2ade

4fd2

1dda a3f8

89ba 157c 9231 64aa

XHackerTriesAgain

X

Project Archive

87

Copyright 2010 by Jim Weirich

Tracking Snapshots

88

Page 45: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

89

Copyright 2010 by Jim Weirich

Need to keep track of versions by name.

90

Page 46: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

HEAD

Project Archive(snapshots only)

91

Copyright 2010 by Jim Weirich

HEAD

Project Archive

92

Page 47: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

HEAD

Project Archive(snapshots only)

93

Copyright 2010 by Jim Weirich

HEAD

V2

V1

Project Archive(snapshots only)

94

Page 48: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

HEAD

V2

V1Tags

Note: Tags do not move.They always point to the same snapshot.

Project Archive(snapshots only)

95

Copyright 2010 by Jim Weirich

HEAD

V2

V1

Project Archive(snapshots only)

96

Page 49: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Need to handle changes to older versions while

allowing development on

the latest version.

97

Copyright 2010 by Jim Weirich

HEAD

V2

V1

Project Archive(snapshots only)

98

Page 50: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

HEAD

V2

V1

Project Archive(snapshots only)

master

Branch

99

Copyright 2010 by Jim Weirich

master

V2

V1

HEAD

Branch

Project Archive(snapshots only)

100

Page 51: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

master

V2

V1

HEAD

$

Project Archive(snapshots only)

101

Copyright 2010 by Jim Weirich

master

V2

V1

HEAD

$ csc snap

Project Archive(snapshots only)

Note: Branches keep track of the last snapshot on that branch.

Note: HEAD tracks the current branch.

102

Page 52: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Oops! We found a bug

103

Copyright 2010 by Jim Weirich

master

V2

V1

HEAD

Project Archive

Bug found here

104

Page 53: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

master

V2

V1

HEAD

$ csc checkout V2

Project Archive

105

Copyright 2010 by Jim Weirich

master

V2

V1

HEAD

$ csc checkout V2$ edit files

Project Archive

106

Page 54: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

master

V2

V1

HEADfix

$ csc checkout V2$ edit files$ csc branch fix

Project Archive

107

Copyright 2010 by Jim Weirich

master

V2

V1

HEAD

fix

$ csc checkout V2$ edit files$ csc branch fix$ csc snap

Project Archive

108

Page 55: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

master

V1

HEAD

$ csc checkout V2$ edit files$ csc branch fix$ csc snap$ csc tag V2.1

fix

V2

V2.1

Project Archive

109

Copyright 2010 by Jim Weirich

master

V1

HEAD

$ csc checkout V2$ edit files$ csc branch fix$ csc snap$ csc tag V2.fix$ csc checkout master

fix

V2

V2.1

Note: We didn’t create a branch until after we edited files.

Project Archive

110

Page 56: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Merge Bug Fixes to Master

111

Copyright 2010 by Jim Weirich

master

V1

HEAD

fix

V2

V2.1

$

Project Archive

112

Page 57: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

master

V1

HEAD

fix

V2

V2.1

$ csc merge fix

Project Archive

113

Copyright 2010 by Jim Weirich

master

V1

HEAD

fix

V2

V2.1

$ csc merge fix(resolve conflict)

Project Archive

114

Page 58: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

master

V1

HEAD

$ csc merge fix(resolve conflict)$ csc snapfix

V2

V2.1

115

Copyright 2010 by Jim Weirich

master

V1

HEAD

$ csc merge fix(resolve conflict)$ csc snapfix

V2

V2.1

Note: This snapshot has two parents. The changes from both parents have been merged together.

116

Page 59: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Sharing Code

117

Copyright 2010 by Jim Weirich

My Archive

118

Page 60: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

My Archive Your Archive

clone

you$ csc clone url_for_my_repo

119

Copyright 2010 by Jim Weirich

clone

My Archive Your Archive

you$ csc clone url_for_my_repo

120

Page 61: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

My Archive Your Archive

You make changes

121

Copyright 2010 by Jim Weirich

My Archive Your Archive

pull

me$ csc pull url_for_my_repo

122

Page 62: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

My Archive Your Archive

you$ csc pull url_for_my_repo

pull

123

Copyright 2010 by Jim Weirich

Common Remote Uses

124

Page 63: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

My Archive

125

Copyright 2010 by Jim Weirich

pushpull

My Archive

Remote Archive

126

Page 64: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

My Archive Your Archivepushpull

pushpull

Shared Remote Archive

127

Copyright 2010 by Jim Weirich

My Archive Your Archivepushpull

pushpull

Shared Remote Archive

128

Page 65: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

pushpull

pushpull

pushpull

My Archive Your Archive

Shared Remote Archive

129

Copyright 2010 by Jim Weirich

130

Page 66: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

131

Copyright 2010 by Jim Weirich

MyLocal

Archive

Master(Remote)Archive

Push

132

Page 67: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

MyLocal

Archive

YourLocal

Archive

Master(Remote)Archive

Push Pull

133

Copyright 2010 by Jim Weirich

MyLocal

Archive

YourLocal

Archive

Master(Remote)Archive

Push Pull

I Own These Repos

134

Page 68: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

MyLocal

Archive

YourLocal

Archive

YourRemoteArchive

Master(Remote)Archive

Push PushPull

135

Copyright 2010 by Jim Weirich

PullPush Push

MyLocal

Archive

YourLocal

Archive

YourRemoteArchive

Master(Remote)Archive

Pull

136

Page 69: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

PullPush Push

MyLocal

Archive

YourLocal

Archive

YourRemoteArchive

Master(Remote)Archive

Pull

137

Copyright 2010 by Jim Weirich

owned by Benevolent Dictator

MasterProjectArchive

138

Page 70: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Lieutenants

PullPull

MasterProjectArchive

owned by Benevolent Dictator

139

Copyright 2010 by Jim Weirich

Lieutenants

Grunts

PullPull Pull

Pull

Pull

Pull

owned by Benevolent Dictator

MasterProjectArchive

Grunts

140

Page 71: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Lieutenants

Grunts

PullPull Pull

Pull

Pull

Pull

owned by Benevolent Dictator

MasterProjectArchive

Grunts

141

Copyright 2010 by Jim Weirich

Lieutenants

Grunts

PullPull Pull

Pull

Pull

Pull

owned by Benevolent Dictator

MasterProjectArchive

Grunts

142

Page 72: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Wrap Up

143

Copyright 2010 by Jim Weirich

CSC Features

• Complete revision history

• Efficient Storage

• very lightweight project archives

• Guaranteed integrity

• Flexible Sharing

• Cheap Branching

• Easy Tagging

144

Page 73: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

CSC Features

• Complete revision history

• Efficient Storage

• very lightweight project archives

• Guaranteed integrity

• Flexible Sharing

• Cheap Branching

• Easy Tagging

145

Copyright 2010 by Jim Weirich

Sounds Like ...

146

Page 74: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

CSC

147

Copyright 2010 by Jim Weirich

GIT

148

Page 75: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

cscsnapshot

project archivemanifest

gitcommitrepositorytree (or directory)

========

149

Copyright 2010 by Jim Weirich

csc snapcsc checkout name

csc branch namecsc tag tagname

git commit -agit checkout namegit checkout -b namegit tag tagname

========

150

Page 76: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Differences from Git

151

Copyright 2010 by Jim Weirich

Differences

• We have only:

• Working Directory

• Repository (project archive)

• Git Uses

• Working Directory

• Staging Area

• Repository

Csc Git

152

Page 77: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Differences

• We have only:

• Working Directory

• Repository (project archive)

• File Based

• Git Uses

• Working Directory

• Staging Area

• Repository

• Content Based

Csc Git

153

Copyright 2010 by Jim Weirich

Differences

• One level object file storage

• Files stored in .git/objects

• Uses a 2-level directory

• SHA1 hash is the directory/file name

Csc Git

154

Page 78: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Differences

• One level object file storage

• Plain Files

• Files stored in .git/objects

• Uses a 2-level directory

• SHA1 hash is the directory/file name

• Encoded/Compressed files

Csc Git

155

Copyright 2010 by Jim Weirich

Differences

• Just the basic features

• init/log/status/diff

• reset/rebase

• cherry-pick

• bisect

• ... lots of others

Csc Git

156

Page 79: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

References

• Git from the Bottom Up (John Wiegley)

• http://ftp.newartisans.com/pub/git.from.bottom.up.pdf

• Git Internals -- PeepCode PDF (Scott Chacon)

• http://peepcode.com/products/git-internals-pdf

• Any presentation by Scott Chacon

• http://github.com/schacon/git-presentations

157

Copyright 2010 by Jim Weirich

Pragmatic Bookselft Screen Cast

http://pragprog.com/screencasts/v-jwsceasy/source-control-made-easy

Available at:

158

Page 80: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Questions?

159

Copyright 2010 by Jim Weirich

Labs

160

Page 81: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Labs Can be found at ...

http://onestepback.org/download/git_tutorial.zip

161

Copyright 2010 by Jim Weirich

Appendix A -- Reset

162

Page 82: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

master

V1

HEAD

fix

V2

V2.1

Project Archive

$

WorkingDirectory

163

Copyright 2010 by Jim Weirich

master

V1

HEAD

fix

V2

V2.1

Project Archive

$ csc reset master$

WorkingDirectory

164

Page 83: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

master

V1

HEAD

fix

V2

V2.1

Project Archive

$ csc reset master$

WorkingDirectory

Unchanged

165

Copyright 2010 by Jim Weirich

Now the --hard way

166

Page 84: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

master

V1

HEAD

fix

V2

V2.1

Project Archive

$

WorkingDirectory

167

Copyright 2010 by Jim Weirich

master

V1

HEAD

$ csc reset --hard master$

fix

V2

V2.1

Project Archive WorkingDirectory

168

Page 85: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

master

V1

HEAD

$ csc reset --hard master$

fix

V2

V2.1

Project Archive WorkingDirectory

Checkout

WARNING: Pending changes lost

169

Copyright 2010 by Jim Weirich

Appendix B -- Rebase

170

Page 86: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

master

Rebase (setup)

171

Copyright 2010 by Jim Weirich

exp

master

Rebase (setup)

172

Page 87: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

exp master

Rebase (setup)

173

Copyright 2010 by Jim Weirich

exp master

Rebase (setup)

174

Page 88: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Merge changes on master to exp

exp

master

Rebase (merging option)

175

Copyright 2010 by Jim Weirich

Merge from master again

exp

master

Rebase (merging option)

176

Page 89: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Merge exp changesonto master

expmaster

Rebase (merging option)

177

Copyright 2010 by Jim Weirich

Rewind !

178

Page 90: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

exp master

Rebase

179

Copyright 2010 by Jim Weirich

exp master

Rebase

Rewrites Snapshots to include changes

from master

$ csc rebase master$

180

Page 91: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

exp master

Rebase

$

181

Copyright 2010 by Jim Weirich

master

Rebase

$ csc rebase master

exp

Rewrites Snapshots to include changes

from master

182

Page 92: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

master

Rebase

$

exp

183

Copyright 2010 by Jim Weirich

master

Rebase

$ csc checkout master$ csc merge exp

exp

184

Page 93: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

WARNING:

Conflicts may occur during rebase

185

Copyright 2010 by Jim Weirich

WAIT!

Rebase rewrites history?Isn’t that dangerous?

186

Page 94: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

Yes and No

187

Copyright 2010 by Jim Weirich

exp master

Rebase

188

Page 95: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

exp

master

Rebase

These snapshots are rewritten from scratch

189

Copyright 2010 by Jim Weirich

exp

master

Rebase

The original snapshots still exist, but are

unreferenced190

Page 96: Git Immersion - O'Reilly Mediaassets.en.oreilly.com/1/event/40/Git Immersion Presentation.pdf · Git Immersion Rails Conf 2010 Tutorial Jim Weirich Chief Scientist / EdgeCase jim@edgecase.com

Copyright 2010 by Jim Weirich

exp

master

Rebase

Eventually they will be garbage collected

191

Copyright 2010 by Jim Weirich

WARNING:

Do not rebase shared branches!

192