SlideShare a Scribd company logo
1 of 164
Download to read offline
Git: Contrôle des versions,
gestion des sources et bien plus encore...

Session 1 - That’s (g)it !
Sébastien DAWANS
26/11/2013
© CETIC – www.cetic.be
About me…

Internet
of Things

Internet

6LBR
WSN

http://cetic.github.io/6lbr
www.cetic.be/6lbr (FR!)

http://cetic.github.io/foren6
About me…

Internet
of Things

Internet

6LBR

Powered by Git !
WSN

http://cetic.github.io/6lbr
www.cetic.be/6lbr (FR!)

http://cetic.github.io/foren6
S C M
«S C
ource

ode

oftware

anagement

onfiguration

M

anagement

»
S C M
«S C
ource

ode

oftware

&

anagement

onfiguration

M

anagement

»
S C M
«S C
ource

ode

oftware

&

anagement

onfiguration

M

anagement

»
S C M
«S C
ource

ode

oftware

&

anagement

onfiguration

M

anagement

»

Durée?
S C M
«S C
ource

ode

oftware

&

anagement

onfiguration

M

anagement

»

Durée?
S C M
«S C
ource

ode

oftware

&

anagement

onfiguration

M

anagement

« branch »

»

Durée?
S C M
«S C
ource

ode

oftware

&

anagement

onfiguration

M

anagement

« branch »

»

Durée?
S C M
«S C
ource

ode

oftware

&

anagement

onfiguration

M

anagement

« branch »

»

Durée?
S C M
«S C
ource

ode

oftware

&

anagement

onfiguration

M

anagement

« branch »

»

Durée?
S C M
«S C
ource

ode

oftware

&

anagement

onfiguration

M

anagement

« branch »

»

Durée?
S C M
«S C
ource

ode

oftware

&

anagement

onfiguration

M

anagement

« branch »

»

Durée?

« merge »
Panorama des SCM
Un peu
d’histoire…
2002

1991
Manual tarballs,
patches, mails

« Much superior source
control management
system than CVS is »
Un peu
d’histoire…
2002

1991
Manual tarballs,
patches, mails

« Much superior source
control management
system than CVS is »

2005
Bitkeeper

Controversé car commercial
Does the job right!
Conditions:
• No reverse-engineering
• No development of competing
solution
Un peu
d’histoire…
2002

1991
Manual tarballs,
patches, mails

« Much superior source
control management
system than CVS is »

Aujourd’hui

2005
Bitkeeper

Controversé car commercial
Does the job right!
Conditions:
• No reverse-engineering
• No development of competing
solution

Git
• Linus Torvals
• Junio C Hamano
not an evolution
rcs

cvs

svn

git
not an evolution
rcs

cvs

svn

git
Git is…

Distributed
Fast
Reliable
Centralized SCM
Central
CVS/SVN
Dan
‘The Boss’

Alice
Bob

Charlie
Centralized SCM
Central
CVS/SVN

Single Point
of Failure

Dan
‘The Boss’

Alice
Bob

Charlie
Centralized SCM
Central
CVS/SVN

Network
(slow)

Single Point
of Failure

Dan
‘The Boss’

Alice
Bob

Charlie
Centralized SCM
Central
CVS/SVN

Network
(slow)

Single Point
of Failure

Dan
‘The Boss’

Alice
Bob

Charlie

Access
Rights?
Git is Distributed

Dan
The Boss

Charlie

Alice

Bob
Git is Distributed
No a priori structure
Dan
The Boss

Charlie

Alice

Bob
Git is Distributed
No a priori structure
Dan
The Boss

Charlie

Alice

Bob

But Git ≠ Anarchy
Git is Distributed
A very common practice:
Sharing via user-owned repos
Dan
Public

Dan
The Boss

Charlie

Charlie
Public

Alice
Public

Alice

Bob

Bob
Public
Git is Distributed
A very common practice:
Sharing via user-owned repos
RD/WR
Dan
Public

Dan
The Boss

Charlie

Charlie
Public

Bob

Bob
Public

READ
ONLY
Alice
Public

Alice
Git is Distributed
A very common practice:
Sharing via user-owned repos
Dan
Public

Charlie
Public

Where to host these?
Alice
Public

Bob
Public
Git is Distributed
Shared Repositories

Dan
Public

Charlie
Public
Alice
Public
Bob
Public

« In-House », entreprise-local
• Pure Git
• Assisted: Gitosis/Gitlite
• Web-based:
Git is Distributed
Shared Repositories

Dan
Public

Charlie
Public
Alice
Public
Bob
Public

« In-House », entreprise-local
• Pure Git
• Assisted: Gitosis/Gitlite
• Web-based:
Hosted
• Private/Public (often, private = €)
Distributed Workflow Example

Integration-Manager
Distributed Workflow Example
« Integration-Manager » (Dan)
Blessed
Repo

Alice

Bob

Dan
The Boss
Distributed Workflow Example
« Integration-Manager » (Dan)
Blessed
Repo

Only Dan
may WRITE

Alice

Bob

Dan
The Boss
Distributed Workflow Example
« Integration-Manager » (Dan)
Blessed
Repo

Other developers
only READ

Alice

Bob

Dan
The Boss
Distributed Workflow Example
« Integration-Manager » (Dan)
Blessed
Repo
Alice
Public

Bob
Public

develop, commit

Alice

Bob

Dan
The Boss
Distributed Workflow Example
« Integration-Manager » (Dan)
Blessed
Repo
Alice
Public

Bob
Public

Share
Features
Alice

Bob

Dan
The Boss
Distributed Workflow Example
« Integration-Manager » (Dan)
Blessed
Repo
Alice
Public

Bob
Public

Alice

Bob

Integrate
Features

Dan
The Boss
Distributed Workflow Example
« Integration-Manager » (Dan)
Blessed
Repo
Alice
Public

Bob
Public

New
Release

Alice

Bob

Dan
The Boss
Distributed Workflow Example

Integration-Manager
Dictator & Lieutenants
Dictator & Lieutenants Workflow
« Network of Trust » (Linux)

Dictator

torvalds/linux
Blessed
Repository

Lieutenants

Plebs
Git is…

Distributed
Fast
Reliable
Git is Fast
1. Because it’s distributed: No network
overhead for daily operations:
– Commit changes
– Compare revisions
– View the history
– Create a branch
– Switch branches
– Merge branches
– … and many more

Alice

Alice
Public
Git is Fast
1. Because it’s distributed: No network
overhead for daily operations:
– Commit changes
– Compare revisions
– View the history
– Create a branch
– Switch branches
– Merge branches
– … and many more

Alice

100% local

Alice
Public
Git is Fast
1. Because it’s distributed: No network
overhead for daily operations:
– Commit changes
– Compare revisions
– View the history
– Create a branch
– Switch branches
– Merge branches
– … and many more

Alice

100% local
local = fast ?

Alice
Public
Git is Fast
2. Because it uses DAG-Storage over a
unique Content-Addressable File
System
Version 1

Delta
Storage

A
B
C
Version 1

Delta
Storage

Version 2

A

Δ A1

B
C

Δ C1
Version 1

Delta
Storage

Version 2

A

Δ A1

Version 3

B
C

Δ C1

Δ C2
Version 1

Delta
Storage

Version 2

A

Δ A1

Version 3

Δ A2

B
C

Version 4

Δ B1
Δ C1

Δ C2
Version 1

Delta
Storage

Version 2

A

Δ A1

Version 3

Δ B1
Δ C1

Version 5

Δ A2

B
C

Version 4

Δ C2

Δ B2
Δ C3
Version 1

Delta
Storage

Version 2

A

Δ A1

Version 1

A
B
C

Version 4

Δ B1
Δ C1

Version 5

Δ A2

B
C

DAG
Storage

Version 3

Δ C2

Δ B2
Δ C3
Version 1

Delta
Storage

Version 2

A

Δ A1

Version 4

Δ B1
Δ C1

Version 1

Version 2

A

A1

B

B

C

C1

Version 5

Δ A2

B
C

DAG
Storage

Version 3

Δ C2

Δ B2
Δ C3
Version 1

Delta
Storage

Version 2

A

Δ A1

Version 3

Version 5

Δ A2

B

Δ B1

C

Δ C1

Δ C2

Version 1

DAG
Storage

Version 4

Version 2

Version 3

A

A1

A1

B

B

B

C

C1

C2

Δ B2
Δ C3
Version 1

Delta
Storage

Version 2

A

Δ A1

Version 3

Version 4

Δ A2

B

Δ B1

C

Δ C1

Δ C2

Version 1

DAG
Storage

Version 5

Version 2

Version 3

Version 4

A

A1

A1

A2

B

B

B

B1

C

C1

C2

C2

Δ B2
Δ C3
Version 1

Delta
Storage

Version 2

A

Δ A1

Version 3

Version 4

Version 5

Δ A2

B

Δ B1

Δ B2

C

Δ C2

Version 1

DAG
Storage

Δ C1

Version 2

Version 3

Version 4

Version 5

A

A1

A1

A2

A2

B

B

B

B1

B2

C

C1

C2

C2

C3

Δ C3
Git Object Database
blob

tree

commit

tag
Git Object Database
blob
tree
commit
tag

$
$
$
$

mkdir project
cd project
git init
tree
project/
└── .git
├── branches
├── config
├── description
├── HEAD
├── hooks
├── objects
└── refs
Git Object Database
blob
tree
commit
tag

$
$
$
$

mkdir project
cd project
git init
tree
Let’s ignore
the rest for now

project/
└── .git
├── branches
├── config
├── description
├── HEAD
├── hooks
├── objects
└── refs

Git Object Database
Git Object Database
blob
tree
commit

$
$
$
$

mkdir project
cd project
git init
tree
project/
└── .git

tag

Git Object Database
Git Object Database
$ echo hello > README

blob
tree
commit
tag
project/
├── .git
└── README

hello
Git Object Database
Git Object Database
$ echo hello > README
$ git add README

blob
tree
commit
tag
project/
├── .git
└── README

blob 60
hello

ce/01362

hello
Git Object Database
Git Object Database
$ echo hello > README
$ git add README

blob

$ find .git/objects –type f
.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a

tree
commit
tag
project/
├── .git
└── README

blob 60

ce/01362

hello
Git Object Database
Git Object Database
$ echo hello > README
$ git add README

blob

$ find .git/objects –type f
.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a

tree
commit
tag
project/
├── .git
└── README

blob 60

ce/01362

hello
Git Object Database
Git Object Database
$ echo hello > README
$ git add README

blob
tree

$ find .git/objects –type f
.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a
$ printf "blob 60hellon" | sha1sum
ce013625030ba8dba906f756967f9e9ca394464a

commit
blob 60

tag

SHA-1

-

Blob path/name

hello

project/
├── .git
└── README

blob 60

ce/01362

hello
Git Object Database
Git Object Database
$ echo hello > README
$ git add README

blob
tree

$ find .git/objects –type f
.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a
$ printf "blob 60hellon" | sha1sum
ce013625030ba8dba906f756967f9e9ca394464a
$ git cat-file –p ce013625
hello

commit
blob 60

tag

-

hello

project/
├── .git
└── README

SHA-1
compression
(zlib)

Blob path/name
Contents (hellon)
blob 60

ce/01362

hello
Git Object Database
Git Object Database
blob
tree

Blob = Content
High reuse (like all Git objects)

commit
tag
project/
├── .git
└── README

blob 60

ce/01362

hello
Git Object Database
Git Object Database
blob
tree
commit
tag

$ cp README file2.txt (copy REAME)
$ echo test > file3.txt (create file3.txt)
$ git add file2.txt file3.txt

contents of
file3.txt

$ find .git/objects –type f
.git/objects/9d/aeafb9864cf43055ae93beb0afd6c7d144bfa4
.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a
contents
of README

project/
├── .git
├── file2.txt
├── file3.txt
└── README

=

contents of
file2.txt

blob 50

9d/aeafb

test
blob 60

ce/01362

hello
Git Object Database
Git Object Database
blob

New Contents  New Blobs
 Files in a content-addressable FS

tree
commit
tag

Other Git Objects behave
exactly the same way
Git Object Database
blob
tree
commit
tag

$ git commit –m "Mon premier commit"
$ git log
commit 8e8eb678d9512d421e590350e3100dc51ead6b7a
Author: Sébastien Dawans
<sebastien.dawans@cetic.be>
Date:
Sun Apr 14 22:26:29 2013 +0200
Mon premier commit
Git Object Database
blob
tree
commit
tag

$ git commit –m "Mon premier commit"
$ git log
commit 8e8eb678d9512d421e590350e3100dc51ead6b7a
Author: Sébastien Dawans
<sebastien.dawans@cetic.be>
Date:
Sun Apr 14 22:26:29 2013 +0200
Mon premier commit
$ tree .git/objects/
.git/objects/
├── 8e
│
└── 8eb678d9512d421e590350e3100dc51ead6b7a
├── 91
│
└── dc8d579f123918f3ac43af1e9377a97128763b
├── 9d
│
└── aeafb9864cf43055ae93beb0afd6c7d144bfa4
├── ce
│
└── 013625030ba8dba906f756967f9e9ca394464a
Git Object Database
./
README

blob

file2.txt
file3.txt

tree

tree
commit
tag

├──
│
├──
│
├──
│
├──
│

8e
└──
91
└──
9d
└──
ce
└──

commit

8eb678d9512d421e590350e3100dc51ead6b7a
dc8d579f123918f3ac43af1e9377a97128763b
aeafb9864cf43055ae93beb0afd6c7d144bfa4
013625030ba8dba906f756967f9e9ca394464a

blobs
blob
tree
commit

Git Object Database

tag

Objects
./

tree
README

…

file2.txt

blob 60

91/dc8d5

file3.txt

ce/01362

hello
blob 50

test

9d/aeafb
blob
tree
commit

Git Object Database

tag

Objects
./

tree

91/dc8d5

README

…

file2.txt

blob 60

file3.txt

ce/01362

hello
blob 50

9d/aeafb

test
$ git cat-file -p 91dc8d5
100644 blob ce013625030ba8dba906f756967f9e9ca394464a
100644 blob ce013625030ba8dba906f756967f9e9ca394464a
100644 blob 9daeafb9864cf43055ae93beb0afd6c7d144bfa4

README
file2.txt
file3.txt
blob
tree
commit

Git Object Database

tag

Objects
Commit
8e8eb67

commit …
…
./

Tree xx0
README

blob 60

91/dc8d5

…

file2.txt
file3.txt

ce/01362

hello
blob 50

test
$ git cat-file -p 8e8eb67
tree 91dc8d579f123918f3ac43af1e9377a97128763b
author Sébastien Dawans <sebastien.dawans@cetic.be> 1365971189 +0200
committer Sébastien Dawans <sebastien.dawans@cetic.be> 1365971189 +0200
Mon premier commit

91/dc8d5

9d/aeafb
blob
tree

A Second Commit

commit
tag

New point in history, with a parent

$ mkdir doc
$ git mv file2.txt doc
$ git mv file3.txt doc
$ git commit -m "Deplacement de fichiers"
[master fe88785] Deplacement de fichiers
2 files changed, 0 insertions(+), 0 deletions(-)
rename file2.txt => doc/file2.txt (100%)
rename file3.txt => doc/file3.txt (100%)

91dc8d5

91dc8d5

parent

fe88785

2b425dd

ce01362

b7f6192

fe88785

91dc8d5
2b425dd
b7f6192
91dc8d5

ce01362

ce01362

new
(high reuse)

Objects

9daeafb

evolution

ce01362
9daeafb

ce01362
9daeafb
Tags mark an important point
blob
tree

Tag = Pointer on a commit
+ label
+ [annotation]

commit
tag

- Releases
- Development markers
Git Object Database
blob

tree

commit

tag

So, everything Git stores are files in a
Content-Addressable File System
HEAD

tag

branch

commit

commit

commit

tree

tree

tree

tree

blob

tree

tree

blob

tree

blob

blob

blob
HEAD

tag

branch

commit

commit

commit

tree

tree

tree

tree

blob

tree

tree

blob

tree

blob

blob

blob
HEAD

tag

branch

commit

commit

commit

tree

tree

tree

tree

blob

tree

tree

blob

tree

blob

blob

blob
HEAD

tag

branch

commit

commit

commit

tree

tree

tree

tree

blob

tree

tree

blob

tree

blob

blob

blob
Git Object Database
blob

tree

commit

tag

So, everything Git stores are files in a
Content-Addressable File System
This makes Git Fast
• Restore an arbitrary version
– Git: checkout a hash = O(1)
– SVN: diffs between n last commits = O(n)

•
•
•
•

Compare 2 revisions
Reset
Search through history
And many more…
Some Benchmarking
Operation

Git

SVN

Add, commit and push 113 modified files (2164+, 2259-)

0.64

2.60

4x

Add, commit and push 1000 1k images

1.53

24.70

16x

Diff 187 changed files (1664+, 4859-) against last commit

0.25

1.09

4x

Diff against 4 commits back (269 changed/3609+,6898-)

0.25

3.99

16x

Diff two tags against each other

1.17

83.57

71x

Log of the last 50 commits (19k of output)

0.01

0.38

31x

Log of all commits (26,056 commits - 9.4M of output)

0.52

169.20 325x

Log of the history of a single file

0.60

82.84

138x

Pull of Commit A scenario (113 files changed, 2164+, 2259-)

0.90

2.82

3x

Line annotation of a single file (array.c)

1.91

3.04

1x

http://git-scm.com/about/small-and-fast
Git is…

Distributed
Fast
Reliable
Git is Reliable
1. Because it’s Distributed 
– Single dev with a remote?  2 copies (local,
remote)
– .git/ has it all

2. Checksums (SHA-1) for all objects Git uses
– Detects data corruption
– Guarantees Authenticity
Using Git

Working
Directory
Untracked

Staging
Area

Local
Repo

Remote
Repo
Using Git
Unique to Git

Working
Directory
Untracked

Staging
Area

Local
Repo

Remote
Repo
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

git clone <url> [alias]

$ git clone https://github.com/contiki-os/contiki.git
Cloning into 'contiki'...
remote: Counting objects: 67870, done.
remote: Compressing objects: 100% (13454/13454), done.
remote: Total 67870 (delta 49179), reused 67358 (delta 48872)
Receiving objects: 100% (67870/67870), 51.40 MiB | 5.15 MiB/s, done.
Resolving deltas: 100% (49179/49179), done.
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

git clone <url> [alias]

$ git clone https://github.com/contiki-os/contiki.git
Cloning into 'contiki'...
remote: Counting objects: 67870, done.
remote: Compressing objects: 100% (13454/13454), done.
remote: Total 67870 (delta 49179), reused 67358 (delta 48872)
Receiving objects: 100% (67870/67870), 51.40 MiB | 5.15 MiB/s, done.
Resolving deltas: 100% (49179/49179), done.
$ cd contiki
$ ls –a

Local Repo

Working Directory

. .. apps core cpu doc examples .git .gitignore LICENSE
Makefile.include platform README README-BUILDING README-EXAMPLES
regression-tests
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

git clone <url> [alias]

$ git remote –v
origin https://github.com/contiki-os/contiki.git (fetch)
origin https://github.com/contiki-os/contiki.git (push)
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

git clone <url> [alias]

$ git remote –v
origin https://github.com/contiki-os/contiki.git (fetch)
origin https://github.com/contiki-os/contiki.git (push)
$ git branch
* master

Poke around

$ git branch –a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
$ git log -n 3 --oneline
424a7b2 Merge pull request #202 from g-oikonomou/cc2538-minor-fixes
704309c Change the InfoPage Location of the IEEE address
8b5b2bd CC2538 Documentation typo and grammar fixes
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

$ git branch –a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master

HEAD
master
8b5b2bd

704309c

Our working tree
Our branch(es)

424a7b2
origin/master
origin/HEAD

Their branch(es)
Their default branch
origin

Working
Directory

Staging
Area

Local
Repo

$ git branch –a
crazy-idea
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master

$ git branch crazy-idea

Let’s try
Something

HEAD
master
8b5b2bd

704309c

Remote
Repo

crazy-idea

424a7b2
origin/master
origin/HEAD
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

git checkout <branch>

$ git branch –a
* crazy-idea
master
remotes/origin/HEAD -> origin/master
remotes/origin/master

$ git branch crazy-idea
$ git checkout crazy-idea

HEAD
master
8b5b2bd

704309c

crazy-idea

424a7b2
origin/master
origin/HEAD
origin

Working
Directory

Staging
Area

Local
Repo

$ git status
# On branch crazy-idea
nothing to commit (working directory clean)

... hack your crazy idea
add new files, modify others ...

HEAD
master
8b5b2bd

704309c

crazy-idea

424a7b2
origin/master
origin/HEAD

Remote
Repo
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

$ git status
# On branch crazy-idea
# Changes not staged for commit:
#
(use "git add <file>..." to update what will be committed)
#
(use "git checkout -- <file>..." to discard changes in working directory)
#
#
modified:
core/net/rpl/rpl.c
#
modified:
core/net/tcpip.c
#
# Untracked files:
#
(use "git add <file>..." to include in what will be committed)
#
#
core/net/newfile.c
no changes added to commit (use "git add" and/or "git commit -a")

HEAD
master
8b5b2bd

704309c

crazy-idea

424a7b2
origin/master
origin/HEAD
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

$ git status
# On branch crazy-idea
# Changes not staged for commit:
#
(use "git add <file>..." to update what will be committed)
#
(use "git checkout -- <file>..." to discard changes in working directory)
#
Modification
#
modified:
core/net/rpl/rpl.c
of tracked content
#
modified:
core/net/tcpip.c
#
# Untracked files:
#
(use "git add <file>..." to include in what will be committed)
#
#
core/net/newfile.c
no changes added to commit (use "git add" and/or "git commit -a")

HEAD
master
8b5b2bd

704309c

crazy-idea

424a7b2
origin/master
origin/HEAD
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

$ git status
# On branch crazy-idea
# Changes not staged for commit:
#
(use "git add <file>..." to update what will be committed)
#
(use "git checkout -- <file>..." to discard changes in working directory)
#
Modification
#
modified:
core/net/rpl/rpl.c
of tracked content
#
modified:
core/net/tcpip.c
#
# Untracked files:
#
(use "git add <file>..." to include in what will be committed)
#
#
core/net/newfile.c
New, untracked content
no changes added to commit (use "git add" and/or "git commit -a")

HEAD
master
8b5b2bd

704309c

crazy-idea

424a7b2
origin/master
origin/HEAD
origin

Working
Directory

Staging
Area

Local
Repo

git add <file>

$ git add core/net/rpl/rpl.c

« Stage » changes

HEAD
master
8b5b2bd

704309c

crazy-idea

424a7b2
origin/master
origin/HEAD

Remote
Repo
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

$ git status
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#

# On branch crazy-idea
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified:

core/net/rpl/rpl.c

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified:

core/net/tcpip.c

Untracked files:
(use "git add <file>..." to include in what will be committed)

HEAD

core/net/newfile.c

master
8b5b2bd

704309c

crazy-idea

424a7b2
origin/master
origin/HEAD
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

$ git status
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#

# On branch crazy-idea
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified:

core/net/rpl/rpl.c

Content of the
next commit

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified:

core/net/tcpip.c

Untracked files:
(use "git add <file>..." to include in what will be committed)

HEAD

core/net/newfile.c

master
8b5b2bd

704309c

crazy-idea

424a7b2
origin/master
origin/HEAD
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

git commit –m <message>

$ git commit –m "my crazy idea - part 1"
[crazy-idea 4c5bae0] my crazy idea - part 1
1 file changed, 2 insertions(+)

HEAD
4c5bae0
master
8b5b2bd

704309c

424a7b2
origin/master
origin/HEAD

crazy-idea
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

$ git status
# On branch crazy-idea
# Changes not staged for commit:
#
(use "git add <file>..." to update what will be committed)
#
(use "git checkout -- <file>..." to discard changes in working directory)
#
#
modified:
core/net/tcpip.c
#
# Untracked files:
#
(use "git add <file>..." to include in what will be committed)
#
#
core/net/newfile.c
no changes added to commit (use "git add" and/or "git commit -a")

HEAD
4c5bae0
master
8b5b2bd

704309c

424a7b2
origin/master
origin/HEAD

crazy-idea
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

git add <file>

Untracked

Track untracked content

$ git add core/net/newfile.c

HEAD
4c5bae0
master
8b5b2bd

704309c

424a7b2
origin/master
origin/HEAD

crazy-idea
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

git commit –am <message>

+
$ git add core/net/newfile.c
$ git commit –am "The rest of my crazy idea"
[crazy-idea 2cac7e2] The rest of my crazy idea
2 files changed, 4 insertions(+)
create mode 100644 core/net/newfile.c
HEAD
4c5bae0
master
8b5b2bd

704309c

424a7b2
origin/master
origin/HEAD

2cac7e2

crazy-idea
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

git checkout <branch>
$ git checkout master

HEAD

HEAD
master
8b5b2bd

704309c

424a7b2
origin/master
origin/HEAD

4c5bae0

2cac7e2

crazy-idea
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

Has the project been updated?
Let’s fetch the changes
Our
contribution
HEAD
master
8b5b2bd

704309c

424a7b2
origin/master
origin/HEAD

4c5bae0

2cac7e2

crazy-idea

From last time
we checked
Merges are done LOCALLY!
“Git push failed, To prevent from
losing history, non-fast forward
updates were rejected”

Not an error, but common-sense
Files are rarely decorrelated
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo
git fetch origin

$ git checkout master
$ git fetch origin
424a7b2..abcdef0 master

-> origin/master

crazy-idea
HEAD

4c5bae0

master
…

704309c

424a7b2

abcdef0
origin/master
origin/HEAD

2cac7e2
origin

Working
Directory

Staging
Area

$ git checkout master
$ git fetch origin
424a7b2..abcdef0 master

Local
Repo

Remote
Repo

-> origin/master

$ git merge origin/master

crazy-idea
4c5bae0

…

704309c

424a7b2

2cac7e2

abcdef0
origin/master
origin/HEAD

HEAD
master

“Apply remote changes
to our local master”
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

$ git merge crazy-idea
Merge made by the 'recursive' strategy.
core/net/newfile.c |
2 ++
core/net/rpl/rpl.c |
2 ++
core/net/tcpip.c
|
2 ++
3 files changed, 6 insertions(+)
create mode 100644 core/net/newfile.c

crazy-idea
4c5bae0

…

704309c

424a7b2

abcdef0

2cac7e2

aabbccd

origin/master

master

origin/HEAD

HEAD
origin

Working
Directory

Staging
Area

Local
Repo

Remote
Repo

git push [remote] [branch]

OK, now we can push
$ git push origin master

Still not permitted
- Git is happy
- But how can Contiki authors trust you?
origin

Working
Directory

Staging
Area

Local
Repo

git remote add <alias> <url>

Remote
Repo
Remote
Repo

$ git remote add github-cetic git@github.com:cetic/contiki.git
origin

Working
Directory

Staging
Area

Local
Repo

git push [remote] [branch]

Remote
Repo
Remote
Repo

$ git remote add github-cetic git@github.com:cetic/contiki.git
$ git push github-cetic master

OK
origin

Working
Directory

Staging
Area

Local
Repo

git push [remote] [branch]

Remote
Repo
Remote
Repo

$ git remote add cetic git@github.com:cetic/contiki.git
$ git push cetic master

OK

New repo = 2 commands !

$ git push [remote] [branch[:alias]]
Before the push

HEAD
crazy-idea

8b5b2bd

704309c

424a7b2

4c5bae0

master

2cac7e2

origin/master
origin/HEAD

git push cetic master

After the push
8b5b2bd

704309c

HEAD
crazy-idea

424a7b2
origin/master

4c5bae0

master

2cac7e2
cetic/master

origin/HEAD

new remote
Is updated
Now our contribution is public
Ready to be merged
8b5b2bd

704309c

424a7b2

4c5bae0

HEAD
crazy-idea

master

2cac7e2

origin/master
origin/HEAD

HEAD
crazy-idea

8b5b2bd

704309c

424a7b2
origin/master
origin/HEAD

4c5bae0

master

2cac7e2
cetic/master
Now our contribution is public
Ready to be merged
8b5b2bd

704309c

424a7b2

4c5bae0

HEAD
crazy-idea

master

2cac7e2

origin/master
origin/HEAD

1. Fetch+merge (done by owners of origin)
2. Pull-Request (involves both parties)
crazy-idea

8b5b2bd

704309c

424a7b2

4c5bae0

HEAD
master

2cac7e2
cetic/master
origin/master
origin/HEAD
Jan Krüger’s Cheat Sheet
http://jan-krueger.net/git
Git LOVES branches, and so should you
Git = agile programming
Typical Workday
master

A

HEAD
long-feature

B

C

D
Git = agile programming
Typical Workday
master

A

HEAD
long-feature

B

C

D

+ Local Changes
Git = agile programming
Typical Workday
master

A

B

C
Long feature

D
Git = agile programming
Typical Workday
master

A

HEAD

Don’t Panic!!
git stash

long-feature

B

C

D

Local Changes
Git = agile programming
Typical Workday
master

A
long-feature

hotfix
HEAD

B

C

D

git branch hotfix
== git checkout –b hotfix
git checkout hotfix
Git = agile programming
Typical Workday
master

A
long-feature

B

C

E
git add
git commit
…

D

F
hotfix
HEAD
Git = agile programming
Typical Workday

HEAD
master

A

G
long-feature

B

C

E

D

F
hotfix

git checkout master
git merge hotfix
git push origin master
Git = agile programming
Typical Workday
A

G

B

C

E

D

F

HOTFIX
Git = agile programming
Typical Workday

HEAD
master

A

G
E

F
hotfix

B

C

D
long-feature
Git = agile programming
Typical Workday
master

A

G
E

F
git checkout long-feature

hotfix

B

C

D
long-feature
HEAD
Git = agile programming
Typical Workday
master

A

G
E

F
hotfix

B

C

D

+ Local Changes

long-feature
HEAD

git checkout long-feature
git stash pop
Git = agile programming
Typical Workday
master

A

G
E

F
hotfix

B

C

D

H
long-feature
HEAD

Keep working
Git = agile programming
Typical Workday
master

A

G
E

F
hotfix

B

C

D

H

I
long-feature
HEAD

Grab your fix:

git merge master
Re-Writing History
2cac7e2

« Code style »

4c5bae0

« ISSUUEE #3255 »

424a7b2

« More stuff on #2342 »

704309c

« Committing missing files »

8b5b2bd

« Fixing issue #2342 »

abcdef0
Squashing commits
2cac7e2

« Code style »

4c5bae0

« ISSUUEE #3255 »

424a7b2

« More stuff on #2342 »

704309c

« Committing missing files »

8b5b2bd

« Fixing issue #2342 »

abcdef0

squash
Squashing commits
12fff12

« Code style »

7434b12

« ISSUUEE #3255 »

ea3222c

« Resolves issue #2342,
More text describing the fix »

abcdef0

squashed
Squashing commits
12fff12

« Code style »

Child commits affected!
7434b12

« ISSUUEE #3255 »

ea3222c

« Resolves issue #2342,
More text describing the fix »

abcdef0

squashed
Squashing commits
12fff12

« Code style »

7434b12

« ISSUUEE #3255 »

8b5b2bd

« Resolves issue #2342,
More text describing the fix »

abcdef0

Amend the commit message
Squashing commits
1212121

« Code style »

9876543

« Resolves issue #3255 »

8b5b2bd

« Resolves issue #2342,
More text describing the fix »

abcdef0

Clean History,
can be merged
1212121

« Code style »

9876543

« Resolves issue #3255 »

8b5b2bd

« Resolves issue #2342,
More text describing the fix »

abcdef0
Cherry-Picking
“Given one or more existing commits, apply the change each
one introduces, recording a new commit for each.”

D

I

C

H

B

G

A

F

abcdef0

M
L

git cherry-pick B C
Cherry-Picking
“Given one or more existing commits, apply the change each
one introduces, recording a new commit for each.”

D

I
B’

C

H

B

G

A

F

abcdef0

M
L

git cherry-pick B C
Cherry-Picking
“Given one or more existing commits, apply the change each
one introduces, recording a new commit for each.”
C’
D

I
B’

C

H

B

G

A

F

abcdef0

M
L

git cherry-pick B C
Don’t miss out on…
•
•
•
•

git
git
git
git

add –p
blame
diff
reset (soft/normal/hard)
Working together with Git
• « Workflow » ?
– How to structure a repository
• Branches and their interactions
• How the project moves forward

– Organizing people
• Who accesses what
• How are contributions merged? Where? By who?
• Responsibilities
Working together with Git
• « Workflow » ?

–How to structure a repository
• Branches and their interactions
• How the project moves forward
– Organizing people
• Who accesses what
• How are contributions merged? Where? By who?
• Responsibilities
GitFlow
http://nvie.com/posts/a-successful-git-branching-model/
GitFlow
http://nvie.com/posts/a-successful-git-branching-model/

• Branche « master » = releases
GitFlow
http://nvie.com/posts/a-successful-git-branching-model/

• Branche « master » = releases
• Branche « develop » = unstable
GitFlow
http://nvie.com/posts/a-successful-git-branching-model/

• Branche « master » = releases
• Branche « develop » = unstable
• Branches:
• Intégration

Tests
d’intégration
+ bugfixes
GitFlow
http://nvie.com/posts/a-successful-git-branching-model/

• Branche « master » = releases
• Branche « develop » = unstable
• Branches:
• Intégration
• Features
GitFlow
http://nvie.com/posts/a-successful-git-branching-model/

• Branche « master » = releases
• Branche « develop » = unstable
• Branches:
• Intégration
• Features
• Hotfixes
GitFlow
http://nvie.com/posts/a-successful-git-branching-model/

• Branche « master » = releases
• Branche « develop » = unstable
• Branches:
• Intégration
• Features
• Hotfixes
• Intégration au shell
https://github.com/nvie/gitflow
Working together with Git
• « Workflow » ?
– How to structure a repository
• Branches and their interactions
• How the project moves forward

– Organizing people
• Who accesses what
• How are contributions merged? Where? By
who?
• Responsibilities
Integration Manager Workflow
organisation/project
Blessed
Repository

Alice
Public

Bob
Public

Charlie
Public

The Boss

Alice

Bob

Charlie
Dictator & Lieutenants Workflow
« Network of Trust » (Linux)

Dictator

torvalds/linux
Blessed
Repository

Lieutenants

Plebs
Getting Started with Git
• Book: Pro Git. www.git-scm.com
• Selected Tutorials:
– Git Immersion http://gitimmersion.com/
– Learn Git Branching (interactive)
http://pcottle.github.io/learnGitBranching/

• More material:
– teach.github.com

• This presentation + cheat sheets and future stuff
– https://github.com/cetic/git-slides
Références
• Torvalds, L. Git. Google Tech Talk, 14-05-2007
• Shacon, S. Pro Git. git-scm.org

More Related Content

What's hot

Eat my data
Eat my dataEat my data
Eat my data
Peng Zuo
 
Open Source Collaboration With Git And Git Hub
Open Source Collaboration With Git And Git HubOpen Source Collaboration With Git And Git Hub
Open Source Collaboration With Git And Git Hub
Nick Quaranto
 

What's hot (20)

Git training
Git trainingGit training
Git training
 
Eat my data
Eat my dataEat my data
Eat my data
 
Git basics with notes
Git basics with notesGit basics with notes
Git basics with notes
 
My Notes from https://www.codeschool.com/courses/git-real
My Notes from  https://www.codeschool.com/courses/git-realMy Notes from  https://www.codeschool.com/courses/git-real
My Notes from https://www.codeschool.com/courses/git-real
 
Introduction to Git / Github
Introduction to Git / GithubIntroduction to Git / Github
Introduction to Git / Github
 
Git real slides
Git real slidesGit real slides
Git real slides
 
Introduction to Git and GitHub
Introduction to Git and GitHubIntroduction to Git and GitHub
Introduction to Git and GitHub
 
Git - a powerful version control tool
Git - a powerful version control toolGit - a powerful version control tool
Git - a powerful version control tool
 
Git Real
Git RealGit Real
Git Real
 
Git and github - Verson Control for the Modern Developer
Git and github - Verson Control for the Modern DeveloperGit and github - Verson Control for the Modern Developer
Git and github - Verson Control for the Modern Developer
 
Intro to Git and GitHub
Intro to Git and GitHubIntro to Git and GitHub
Intro to Git and GitHub
 
Using Git Inside Eclipse, Pushing/Cloning from GitHub
Using Git Inside Eclipse, Pushing/Cloning from GitHubUsing Git Inside Eclipse, Pushing/Cloning from GitHub
Using Git Inside Eclipse, Pushing/Cloning from GitHub
 
Git - Get Ready To Use It
Git - Get Ready To Use ItGit - Get Ready To Use It
Git - Get Ready To Use It
 
Introduction To Git For Version Control Architecture And Common Commands Comp...
Introduction To Git For Version Control Architecture And Common Commands Comp...Introduction To Git For Version Control Architecture And Common Commands Comp...
Introduction To Git For Version Control Architecture And Common Commands Comp...
 
Git and github fundamental
Git and github fundamentalGit and github fundamental
Git and github fundamental
 
A Robust Open-source GEDCOM Parser
A Robust Open-source GEDCOM ParserA Robust Open-source GEDCOM Parser
A Robust Open-source GEDCOM Parser
 
Git training v10
Git training v10Git training v10
Git training v10
 
Open Source Collaboration With Git And Git Hub
Open Source Collaboration With Git And Git HubOpen Source Collaboration With Git And Git Hub
Open Source Collaboration With Git And Git Hub
 
Introduction to Git for Non-Developers
Introduction to Git for Non-DevelopersIntroduction to Git for Non-Developers
Introduction to Git for Non-Developers
 
Jenkins2 - Coding Continuous Delivery Pipelines
Jenkins2 - Coding Continuous Delivery PipelinesJenkins2 - Coding Continuous Delivery Pipelines
Jenkins2 - Coding Continuous Delivery Pipelines
 

Similar to That's (g)it! par Sébastien Dawans CETIC

3 Git
3 Git3 Git

Similar to That's (g)it! par Sébastien Dawans CETIC (20)

Becoming a Git Master
Becoming a Git MasterBecoming a Git Master
Becoming a Git Master
 
Working with Git
Working with GitWorking with Git
Working with Git
 
3 Git
3 Git3 Git
3 Git
 
Introduction to Git (Greg Lonnon)
Introduction to Git (Greg Lonnon)Introduction to Git (Greg Lonnon)
Introduction to Git (Greg Lonnon)
 
Becoming a Git Master - Nicola Paolucci
Becoming a Git Master - Nicola PaolucciBecoming a Git Master - Nicola Paolucci
Becoming a Git Master - Nicola Paolucci
 
Introduction to Git for developers
Introduction to Git for developersIntroduction to Git for developers
Introduction to Git for developers
 
GIT from n00b
GIT from n00bGIT from n00b
GIT from n00b
 
Tech thursdays / GIT
Tech thursdays / GITTech thursdays / GIT
Tech thursdays / GIT
 
Wokshop de Git
Wokshop de Git Wokshop de Git
Wokshop de Git
 
Git the Docs: A fun, hands-on introduction to version control
Git the Docs: A fun, hands-on introduction to version controlGit the Docs: A fun, hands-on introduction to version control
Git the Docs: A fun, hands-on introduction to version control
 
JAZOON'13 - Thomas Hug & Bartosz Majsak - Git Workshop -Essentials
JAZOON'13 - Thomas Hug & Bartosz Majsak - Git Workshop -EssentialsJAZOON'13 - Thomas Hug & Bartosz Majsak - Git Workshop -Essentials
JAZOON'13 - Thomas Hug & Bartosz Majsak - Git Workshop -Essentials
 
Github - Git Training Slides: Foundations
Github - Git Training Slides: FoundationsGithub - Git Training Slides: Foundations
Github - Git Training Slides: Foundations
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
Ultimate Git Workflow - Seoul 2015
Ultimate Git Workflow - Seoul 2015Ultimate Git Workflow - Seoul 2015
Ultimate Git Workflow - Seoul 2015
 
Git slides
Git slidesGit slides
Git slides
 
Getting Git Right
Getting Git RightGetting Git Right
Getting Git Right
 
Collaboration With Git and GitHub
Collaboration With Git and GitHubCollaboration With Git and GitHub
Collaboration With Git and GitHub
 
Git
GitGit
Git
 
Introduction to Git
Introduction to GitIntroduction to Git
Introduction to Git
 
JAZOON'13 - Bartosz Majsak - Git Workshop - Kung Fu
JAZOON'13 - Bartosz Majsak - Git Workshop - Kung FuJAZOON'13 - Bartosz Majsak - Git Workshop - Kung Fu
JAZOON'13 - Bartosz Majsak - Git Workshop - Kung Fu
 

More from La FeWeb

More from La FeWeb (11)

jQuery deffered objects
jQuery deffered objectsjQuery deffered objects
jQuery deffered objects
 
Introduction to sketch - the designer's toolbox
Introduction to sketch - the designer's toolboxIntroduction to sketch - the designer's toolbox
Introduction to sketch - the designer's toolbox
 
Introduction to Antetype - Web UX design tool
Introduction to Antetype - Web UX design toolIntroduction to Antetype - Web UX design tool
Introduction to Antetype - Web UX design tool
 
NoSQL into E-Commerce: lessons learned
NoSQL into E-Commerce: lessons learnedNoSQL into E-Commerce: lessons learned
NoSQL into E-Commerce: lessons learned
 
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETIC
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETICNoSQL: Quoi, quand et pour qui par Orlando Cassano du CETIC
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETIC
 
Usability & Wireframe par Nathalie Gouzée - Co-Founder Rubbik
Usability & Wireframe par Nathalie Gouzée - Co-Founder RubbikUsability & Wireframe par Nathalie Gouzée - Co-Founder Rubbik
Usability & Wireframe par Nathalie Gouzée - Co-Founder Rubbik
 
Introduction to Emolytics par David Hachez, Co-Founder GetSmily
Introduction to Emolytics par David Hachez, Co-Founder GetSmilyIntroduction to Emolytics par David Hachez, Co-Founder GetSmily
Introduction to Emolytics par David Hachez, Co-Founder GetSmily
 
Le community management pour les nuls par Louise Maton
Le community management pour les nuls par Louise MatonLe community management pour les nuls par Louise Maton
Le community management pour les nuls par Louise Maton
 
RWD - Back to Basics par Ruben Pieraerts
RWD - Back to Basics par Ruben PieraertsRWD - Back to Basics par Ruben Pieraerts
RWD - Back to Basics par Ruben Pieraerts
 
Twitter Bootstrap par Antoine Guédès et Cédric Dussart
Twitter Bootstrap par Antoine Guédès et Cédric DussartTwitter Bootstrap par Antoine Guédès et Cédric Dussart
Twitter Bootstrap par Antoine Guédès et Cédric Dussart
 
Less CSS by Gauthier Eloy
Less CSS by Gauthier EloyLess CSS by Gauthier Eloy
Less CSS by Gauthier Eloy
 

Recently uploaded

Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
FIDO Alliance
 

Recently uploaded (20)

The Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightThe Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and Insight
 
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdfThe Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
 
Vector Search @ sw2con for slideshare.pptx
Vector Search @ sw2con for slideshare.pptxVector Search @ sw2con for slideshare.pptx
Vector Search @ sw2con for slideshare.pptx
 
Overview of Hyperledger Foundation
Overview of Hyperledger FoundationOverview of Hyperledger Foundation
Overview of Hyperledger Foundation
 
2024 May Patch Tuesday
2024 May Patch Tuesday2024 May Patch Tuesday
2024 May Patch Tuesday
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe
 
ADP Passwordless Journey Case Study.pptx
ADP Passwordless Journey Case Study.pptxADP Passwordless Journey Case Study.pptx
ADP Passwordless Journey Case Study.pptx
 
ERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage Intacct
 
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
 
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
 
Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 Warsaw
 
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
 
Working together SRE & Platform Engineering
Working together SRE & Platform EngineeringWorking together SRE & Platform Engineering
Working together SRE & Platform Engineering
 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
 
Intro to Passkeys and the State of Passwordless.pptx
Intro to Passkeys and the State of Passwordless.pptxIntro to Passkeys and the State of Passwordless.pptx
Intro to Passkeys and the State of Passwordless.pptx
 
Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...
Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...
Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...
 
Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024
 
UiPath manufacturing technology benefits and AI overview
UiPath manufacturing technology benefits and AI overviewUiPath manufacturing technology benefits and AI overview
UiPath manufacturing technology benefits and AI overview
 
Generative AI Use Cases and Applications.pdf
Generative AI Use Cases and Applications.pdfGenerative AI Use Cases and Applications.pdf
Generative AI Use Cases and Applications.pdf
 

That's (g)it! par Sébastien Dawans CETIC