SlideShare a Scribd company logo
1 of 232
Download to read offline
Version Control
with Git
Installation
Windows: http://msysgit.github.io/
Mac: http://code.google.com/p/git-osx-installer
Linux (Debian/Ubuntu):
apt-get install git-core gitk

Linux (Fedora):

yum install git gitk
Verify installation
Windows: Open "Git Bash"
Mac/Linux: Open your terminal
To verify, run:

$ git --version
Yes, we are going to use
the command line today
Feel free to use graphical interfaces after you learn the basics.
Initial Setup
$ git config --global user.name "Your Name"
$ git config --global user.email "your_email@whatever.com"

Windows:
$ git config --global core.autocrlf true
$ git config --global core.safecrlf true

Linux/Mac:
$ git config --global core.autocrlf input
$ git config --global core.safecrlf true
Version Control
Version Control
aka Revision Control
Version Control
aka Revision Control

aka How we do things in the Real World
Sharing Code
Working as a Team
Version Control
Why Version Control?
Reason #1:

"Versioning"
Wait a minute...
Finer-grained Control
Enough talk. Let's begin...
Create your first repository
$ mkdir devcon-git101
$ cd devcon-git101
$ git init
Create your first repository
$ mkdir devcon-git101
$ cd devcon-git101
$ git init
Create your first repository
$ mkdir devcon-git101
$ cd devcon-git101
$ git init

Here we create a project folder
Create your first repository
$ mkdir devcon-git101
$ cd devcon-git101
… Then we initialize it as a git repository.
$ git init
Create your first repository
$ mkdir devcon-git101
$ cd devcon-git101
… Then we initialize it as a git repository.
$ git init
Git can now track the changes inside our
project folder.
Create your first commit
First create a file "hello.txt" containing:
Hello
Then run the following commands:
$ git add hello.txt
$ git commit -m "Initial Commit"
View the repository history
$ git log
(press q to exit)
View the pretty repo history
$ git log --graph --pretty=oneline
(press q to exit)
Ah, what the hell...
Windows/Linux:
$ gitk
Mac:
$ gitx
Create your second commit
Modify "hello.txt" to add "world":
Hello World!
Then run the following commands:
$ git add hello.txt
$ git commit -m "Make hello.txt more exciting"
View the updated history
Windows/Linux:
$ gitk
Mac:
$ gitx
What just happened?
http://git-scm.com/book/en/Getting-Started-Git-Basics
git add
git commit

http://git-scm.com/book/en/Getting-Started-Git-Basics
6fba518

Initial Commit
6fba518

Initial Commit

object name
●
●

aka object id, commit hash
SHA-1 hash / checksum for verifying the integrity of the contents of the commit
Calculated based on file contents and metadata like last updated date i.e. yours
will be different
e642771

Make hello.txt more exciting

6fba518

Initial Commit
e642771

No, this is not a mistake;
commits refer to their
parent(s), not the other
way around.

Make hello.txt more exciting

6fba518

Initial Commit
Commit multiple files
Create a file "names.txt" containing:
Alice
Bob
Cindy
Commit multiple files
Create a file "numbers.txt" containing:
3
9
16
12
8.2
4
Commit multiple files
Run the following commands:
$ git add names.txt numbers.txt
$ git commit -m "Create 2 files in a single commit"
e642771

Make hello.txt more exciting

6fba518

Initial Commit
Each commit deals with a set of files
7c57165

Create 2 files in a single commit
2 files created

e642771

Make hello.txt more exciting
1 file modified

6fba518

Initial Commit
1 file created
We've covered "Save", but
before we move on to
"Load"...
http://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository
File Status

(all unmodified)
$ git status
# On branch master
nothing to commit, working directory clean
File Status
(untracked)

Create a file "animals.txt" containing:
Dogs
Cats
Mice
File Status
(untracked)

$ git status
# On branch master
# Untracked files:
#
(use "git add <file>..." to include in
what will be committed)
#
#
animals.txt
nothing added to commit but untracked files
present (use "git add" to track)
File Status

(untracked and modified)
Modify "names.txt" to add "Janet":
Alice
Bob
Janet
Cindy
File Status

(untracked and modified)
$ git status
# On branch master
# 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:
names.txt
#
# Untracked files:
#
(use "git add <file>..." to include in what will be committed)
#
#
animals.txt
no changes added to commit (use "git add" and/or "git commit -a")
File Status

(untracked and staged)
$ git add names.txt
$ git status
# On branch master
# Changes to be committed:
#
(use "git reset HEAD <file>..." to unstage)
#
#
modified:
names.txt
#
# Untracked files:
#
(use "git add <file>..." to include in what will be
committed)
#
#
animals.txt
File Status

(commit staged)
$ git commit -m "Add Janet"
[master 5e545ed] Add Janet
1 file changed, 1 insertion(+)
$ git status
# On branch master
# Untracked files:
#
(use "git add <file>..." to include in what will be
committed)
#
#
animals.txt
Shortcuts
Stage a folder
Modify "names.txt" to add "Ramon":
Alice
Ramon
Bob
Janet
Cindy
Stage a folder
$
$
#
#
#
#
#
#
#

git add .
git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file:
modified:

animals.txt
names.txt
Unstage a file
$ git reset HEAD names.txt
Unstaged changes after reset:
M
names.txt
$ git status
# On branch master
# Changes to be committed:
#
(use "git reset HEAD <file>..." to unstage)
#
#
new file:
animals.txt
#
# 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:
names.txt
#
Unmodify a file
$ git checkout -- names.txt
$ git status
# On branch master
# Changes to be committed:
#
(use "git reset HEAD <file>..." to unstage)
#
#
new file:
animals.txt
#
do it again...
Modify "names.txt" to add "Ramon":
Alice
Ramon
Bob
Janet
Cindy
Stage and commit
EVERYTHING
(except untracked files)
$ git commit -a -m "Commit unrelated changes.. DON'T DO THIS"
[master 61f1cd8] Commit unrelated changes.. DON'T DO THIS
2 files changed, 4 insertions(+)
create mode 100644 animals.txt
$ git status
# On branch master
nothing to commit, working directory clean
Note: using "-a" will also stage moved and renamed files.
Amend last commit
$ git commit -m "Commit unrelated changes... DON'T DO THIS" --amend
[master 3a0eac3] Commit unrelated changes... DON'T DO THIS
2 files changed, 4 insertions(+)
create mode 100644 animals.txt
On to "Load"...
3a0eac3

Commit unrelated changes... DON'T DO THIS

5e545ed

Add Janet

7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting

6fba518

Initial Commit
HEAD
3a0eac3

Commit unrelated changes... DON'T DO THIS

5e545ed

Add Janet

7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting

6fba518

Initial Commit
Create a reverting commit
$ git revert HEAD --no-edit
[master 2a1b52e] Revert "Commit unrelated changes... DON'T DO THIS"
2 files changed, 4 deletions(-)
delete mode 100644 animals.txt
HEAD
3a0eac3

Commit unrelated changes... DON'T DO THIS

5e545ed

Add Janet

7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting
HEAD
2a1b52e

Revert "Commit unrelated changes... DON'T
DO THIS"

3a0eac3

Commit unrelated changes... DON'T DO THIS

5e545ed

Add Janet

7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting
Move HEAD to a commit
discarding changes
$ git reset --hard 7c57165
HEAD is now at 7c57165 Create 2 files in a single commit
(You can use the first few characters of the object ID instead of the 40 characters)
HEAD
2a1b52e

Revert "Commit unrelated changes... DON'T
DO THIS"

3a0eac3

Commit unrelated changes... DON'T DO THIS

5e545ed

Add Janet

7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting
2a1b52e

Revert "Commit unrelated changes... DON'T
DO THIS"

3a0eac3

Commit unrelated changes... DON'T DO THIS

5e545ed

Add Janet

7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting

HEAD
View history
$
*
*
*

git log
7c57165
e642771
6fba518

--graph --pretty=format:'%h %s%d' --all
Create 2 files in a single commit (HEAD, master)
Make hello.txt more exciting
Initial Commit

or
$ gitk --all
HEAD
7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting
Move HEAD to a commit
$ git reset --hard 2a1b52e
HEAD is now at 2a1b52e Revert "Commit unrelated changes... DON'T DO
THIS"
HEAD
7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting
2a1b52e

Revert "Commit unrelated changes... DON'T
DO THIS"

3a0eac3

Commit unrelated changes... DON'T DO THIS

5e545ed

Add Janet

7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting

HEAD
HEAD
2a1b52e

Revert "Commit unrelated changes... DON'T
DO THIS"

3a0eac3

Commit unrelated changes... DON'T DO THIS

5e545ed

Add Janet

7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting
Unreferenced commits will
not show up in the history.
Coincidentally, we can use
Tags to refer to a commit.
Tagging
$ git tag tagging-demo
HEAD
2a1b52e

Revert "Commit unrelated changes... DON'T
DO THIS"

3a0eac3

Commit unrelated changes... DON'T DO THIS

5e545ed

Add Janet

7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting
tagging-demo

HEAD
2a1b52e

Revert "Commit unrelated changes... DON'T
DO THIS"

3a0eac3

Commit unrelated changes... DON'T DO THIS

5e545ed

Add Janet

7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting
Going back...
$ git reset --hard 7c57165
HEAD is now at 7c57165 Create 2 files in a single commit
tagging-demo

2a1b52e

Revert "Commit unrelated changes... DON'T
DO THIS"

3a0eac3

Commit unrelated changes... DON'T DO THIS

5e545ed

Add Janet

7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting

HEAD
View history
$
*
*
*
*
*
*

git log
2a1b52e
3a0eac3
5e545ed
7c57165
e642771
6fba518

--graph --pretty=format:'%h %s%d' --all
Revert "Commit unrelated changes... DON'T DO THIS" (tagging-demo)
Commit unrelated changes... DON'T DO THIS
Add Janet
Create 2 files in a single commit (HEAD, master)
Make hello.txt more exciting
Initial Commit

or
$ gitk --all
Wrapping up, tag current...
$ git tag end-part1
...and unreference PDAF
$ git tag -d tagging-demo
Deleted tag 'tagging-demo' (was 2a1b52e)
end-part1

HEAD

7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting

6fba518

Initial Commit
Best Practices
Write good commit
messages
You should be able to get an idea what changed
and why just by looking at the commit messages
Commit related changes
This would make it easier to roll back changes
Commit often
Do not commit generated files
E.g. compiled bytecode or executables, log files,
temporary files, etc.
Do not commit sensitive
information
E.g. passwords, settings.
You can, however, commit templates.
Helpful Stuff
that we will not explain in detail...
.gitignore
https://github.com/github/gitignore
git stash
git blame
Summary of Commands
git init - initialize repository
git add - add files/folders to staging
git commit - commit files in staging
git status - view status of repository
git log / gitk - view history of repository
git revert - unstage files
git reset - move HEAD to another commit
git tag - tag a commit
Summary of Command
Variations
git commit -a
- auto-stage all deleted, moved, modified
gitk --all / git log --all
- include all branches, tags
git tag -d
- delete tag
Why Version Control?
Reason #2:

Backup
Reason #2:

Backup
Reason #2:

Collaboration
If we were pressed for time...
Register at GitHub
● Learn git clone
● Learn git push / git pull
●
Learn how to fix merge conflicts
●
...but we're not, so let's first
discuss something that will
help us later on.
Branching
File Status

(all unmodified)
$ git status
# On branch master
nothing to commit, working directory clean
File Status

(all unmodified)
$ git status
# On branch master
nothing to commit, working directory clean
end-part1

HEAD

7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting

6fba518

Initial Commit
HEAD

end-part1

master

7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting

6fba518

Initial Commit
HEAD

end-part1

master
in other version control
systems, master is called
trunk

7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting

6fba518

Initial Commit
Create a branch
$ git branch testing
HEAD

end-part1

master

7c57165

Create 2 files in a single commit

e642771

Make hello.txt more exciting

6fba518

Initial Commit
HEAD

master

testing
7c57165

e642771

6fba518

end-part1
Switch to branch
$ git checkout testing
Switched to branch 'testing'
$ git status
# On branch testing
nothing to commit, working directory clean
HEAD

master

testing
7c57165

e642771

6fba518

end-part1
HEAD

master

testing
7c57165

e642771

6fba518

end-part1
Commit to new branch
Modify "names.txt" to add "Eve":
Alice
Bob
Cindy
Eve
Commit to new branch
$ git commit -am "Add Eve"
[testing cdd47c2] Add Eve
1 file changed, 1 insertion(+)
$ gitk
HEAD

master

testing
7c57165

e642771

6fba518

end-part1
HEAD

cdd47c2

testing

master

7c57165

e642771

6fba518

end-part1
HEAD

cdd47c2

master

7c57165

e642771

6fba518

end-part1

testing
Switch back to master
$ git checkout master
Switched to branch 'master'
HEAD

cdd47c2

master

7c57165

e642771

6fba518

end-part1

testing
HEAD
cdd47c2

master

7c57165

e642771

6fba518

end-part1

testing
Difference between log --all
vs normal log
$ gitk
HEAD

master

7c57165

e642771

6fba518

end-part1
Difference between log --all
vs normal log
$ gitk --all
HEAD
cdd47c2

master

7c57165

e642771

6fba518

end-part1

testing
Commit to master
Modify "names.txt" to add "Billy":
Alice
Billy
Bob
Cindy
$ git commit -am "Add Billy"
[master cc3044c] Add Billy
1 file changed, 1 insertion(+)
HEAD
cdd47c2

master

7c57165

e642771

6fba518

end-part1

testing
HEAD

master

cc3044c

7c57165

e642771

6fba518

cdd47c2

end-part1

testing
Shortcut: create and switch
$ git checkout -b testing2
Switched to branch 'testing2'
HEAD

master

cc3044c

7c57165

e642771

6fba518

cdd47c2

end-part1

testing
HEAD

master

testing2

cc3044c

7c57165

e642771

6fba518

cdd47c2

end-part1

testing
Commit to testing2
Modify "names.txt" to add "Dave":
Alice
Billy
Bob
Cindy
Dave
$ git commit -am "Add Dave"
[testing2 80414cf] Add Dave
1 file changed, 1 insertion(+)
HEAD

master

testing2

cc3044c

7c57165

e642771

6fba518

cdd47c2

end-part1

testing
testing2

HEAD

80414cf

master

cc3044c

7c57165

e642771

6fba518

cdd47c2

end-part1

testing
yay, mukha nang puno
Go back to master
$ git checkout master
Switched to branch 'master'
$ gitk --all
testing2

HEAD

80414cf

master

cc3044c

7c57165

e642771

6fba518

cdd47c2

end-part1

testing
Merge another branch
$ git merge testing
Auto-merging names.txt
Merge made by the 'recursive' strategy.
names.txt | 1 +
1 file changed, 1 insertion(+)
testing2

HEAD

80414cf

master

cc3044c

7c57165

e642771

6fba518

cdd47c2

end-part1

testing
master

testing2

80414cf

f56f4fa

cc3044c

7c57165

e642771

6fba518

HEAD

Merge branch 'testing'

cdd47c2

end-part1

testing
Merge Conflict
$ git merge testing2
Auto-merging names.txt
CONFLICT (content): Merge conflict in names.txt
Automatic merge failed; fix conflicts and then
commit the result.
Merge Conflict
Open names.txt:
Alice
Billy
Bob
Cindy
<<<<<<< HEAD
Eve
=======
Dave
>>>>>>> testing2
Merge Conflict
Open names.txt:
Alice
Billy
Bob
Cindy
<<<<<<< HEAD
Eve
=======
Dave
>>>>>>> testing2

version from HEAD i.e master
Merge Conflict
Open names.txt:
Alice
Billy
Bob
Cindy
<<<<<<< HEAD
Eve
=======
Dave
>>>>>>> testing2

version from testing2
Resolving Merge Conflict
Edit names.txt removing the markers:
Alice
Billy
Bob
Cindy
Dave
Eve
Resolving Merge Conflict
Commit the resolved merge conflict
$ git commit -am "Merge branch 'testing2' and fix
conflict"
[master 07e83b3] Merge branch 'testing2' and fix
conflict
master

testing2

80414cf

f56f4fa

cc3044c

7c57165

e642771

HEAD

Merge branch 'testing'

cdd47c2

end-part1

testing
master

HEAD

07e83b3

Merge branch 'testing2' and fix conflict

f56f4fa

Merge branch 'testing'

testing2

80414cf

cc3044c

7c57165

e642771

cdd47c2

end-part1

testing
Another way to merge:
Rebasing
Working on two branches
$ git checkout -b merging-demo
Switched to a new branch 'merging-demo'
Commit to merging-demo
Modify "names.txt" to remove "Alice":
Billy
Bob
Cindy
Dave
Eve
$ git commit -am "Remove Alice"
[merging-demo 00b26cb] Remove Alice
1 file changed, 1 deletion(-)
Commit to merging-demo
Modify "names.txt" to remove "Cindy":
Billy
Bob
Dave
Eve
$ git commit -am "Remove Cindy"
[merging-demo b115e79] Remove Cindy
1 file changed, 1 deletion(-)
Switch back to master
$ git checkout master
Switched to branch 'master'
Commit to master
Modify "numbers.txt" to remove "8.2":
3
9
16
12
4
$ git commit -am "Remove 8.2"
[master 0c1f192] Remove 8.2
1 file changed, 1 deletion(-)
Commit to master
Modify "numbers.txt" to remove "9":
3
16
12
4
$ git commit -am "Remove 9"
[master bc3583d] Remove 9
1 file changed, 1 deletion(-)
merging-demo
master
b115e79

00b26cb

bc3583d

0c1f192

07e83b3

HEAD
Merging
master
merging-demo
aff102e

b115e79

00b26cb

bc3583d

0c1f192

07e83b3

HEAD
Rebasing
$ git rebase merging-demo
First, rewinding head to replay your work on
top of it...
Applying: Remove 8.2
Applying: Remove 9
merging-demo
master
b115e79

00b26cb

bc3583d

0c1f192

07e83b3

HEAD
merging-demo
master

b115e79

00b26cb

HEAD

bc3583d

Remove 9

0c1f192

Remove 8.2

07e83b3
master

73dd819

Remove 9

67b81ce

Remove 8.2

merging-demo

b115e79

00b26cb

07e83b3

HEAD
master

73dd819

67b81ce

merging-demo

Remove 9

Remove 8.2

b115e79

00b26cb

07e83b3

HEAD
Later na lang yung
merge vs rebase
Malapit na tayo mag-Github,
but first...
Remote Repositories
Clone into another folder
$ cd ..
$ git clone devcon-git101 git101
Cloning into 'git101'...
done.
Check the clone repo
$ cd git101
$ gitk
HEAD

HEAD

master

master

merging-demo

/devcon-git101

merging-demo

/git101
remotes/origin/
master

HEAD

master

master
remotes/origin/
merging-demo

merging-demo

/devcon-git101

merging-demo

/git101

HEAD
Show remote repos
$ git remote
origin
"origin" remote repo
(default repo referring to the repo's origin)
$ git remote show origin
* remote origin
Fetch URL: c:/Users/user/devcon-git101
Push URL: c:/Users/user/devcon-git101
HEAD branch: master
Remote branches:
master
tracked
merging-demo tracked
testing
tracked
testing2
tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
remotes/origin/
master

HEAD

master

/devcon-git101

master

/git101

HEAD
Synchronizing with
Remote Repos
Fetching demo
Go back to /devcon-git101 (either open a new terminal/Git Bash
window) and modify "names.txt" to add Greg:
Billy
Bob
Dave
Eve
Greg
$ git commit -am "Add Greg"
[master cf5f902] Add Greg
1 file changed, 1 insertion(+)
remotes/origin/
master

HEAD

master

/devcon-git101

master

/git101

HEAD
HEAD
remotes/origin/
master

master

master

/devcon-git101

/git101

HEAD
Fetching demo
Go back to git101 and fetch the changes:
$ cd ../git101
$ git fetch
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From c:/Users/user/devcon-git101
73dd819..cf5f902 master
-> origin/master
HEAD
remotes/origin/
master

master

master

/devcon-git101

/git101

HEAD
remotes/origin/
master

HEAD

master
master

/devcon-git101

/git101

HEAD
Merge the fetched branch
$ git merge origin/master
Updating 73dd819..cf5f902
Fast-forward
names.txt | 1 +
1 file changed, 1 insertion(+)
remotes/origin/
master

HEAD

master
master

/devcon-git101

/git101

HEAD
A fast-forward occurs when you merge a
branch which has HEAD as an ancestor.
In this case, only the references are affected.
remotes/origin/
master

HEAD

master

master

/devcon-git101

/git101

HEAD
Shortcut
$ git fetch
$ git merge origin/master
is equivalent to
$ git pull
if you're in master branch.
We'll discuss more of this later.
Now that we understand the
basic idea behind remote repos,
let's proceed to Github...
Sign-up at https://github.com
There are multiple ways to
authenticate users in Git.
We'll discuss the most secure
one: via SSH keys.
Cryptography pasakalye...
Authentication via Password

Client

Server
Authentication via Password

username + password

Client sends
credentials

Server verifies

password
DB
Authentication via Password

username + password

Client sends
credentials

can be intercepted
e.g. FTP

Server verifies

password
DB
Authentication via SSH Key
(oversimplified)

Client has 2 "keys"

private key
public key

Server
Authentication via SSH Key
(oversimplified)

Client has 2 "keys"

private key
public key

Server has a list of
authorized keys
Authentication via SSH Key
(oversimplified)
First, the public key must be sent to the server securely beforehand.

Client has 2 "keys"

private key
public key

Server has a list of
authorized keys
Authentication via SSH Key
(oversimplified)
Using the private key, client can create a package that
can only be unlocked by the corresponding public key
and only that public key.

Client

private key
public key

Server has a list of
authorized keys
Authentication via SSH Key
(oversimplified)
Using the private key, client can create a package that
can only be unlocked by the corresponding public key
and only that public key.

Client

private key
public key

Server has a list of
authorized keys
Authentication via SSH Key
(oversimplified)
Using the private key, client can create a package that
can only be unlocked by the corresponding public key
and only that public key.

Client

private key
public key

Server has a list of
authorized keys
Authentication via SSH Key
(oversimplified)
Using the private key, client can create a package that
can only be unlocked by the corresponding public key
and only that public key.

Client

private key
public key

doesn't matter if
intercepted since
they still need to
crack it.

Server has a list of
authorized keys
How to generate your SSH Keys:
https://help.github.com/articles/generating-ssh-keys

Also, follow the steps to add your public
key to Github.
If you want to be secure, use a
passphrase.
However, if you're using Windows, you
will need to enter it every time you run
a git command that connects to Github.
Fortunately, there is a workaround
that will only require you to enter it
once per session.
http://stackoverflow.com/a/9011152
Create a repo in Github for
devcon-git101
https://github.com/new
Pushing devcon-git101
Go back to devcon-git101 and push it to your new repo (use SSH url)
$ git remote add origin git@github.com:user/devcon-git101.git
$ git push -u origin master
Warning: Permanently added the RSA host key for IP address
'192.30.252.130' to the list of known hosts.
Enter passphrase for key '/c/Users/user/.ssh/id_rsa':
Counting objects: 40, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (24/24), done.
Writing objects: 100% (40/40), 3.41 KiB, done.
Total 40 (delta 3), reused 0 (delta 0)
To git@github.com:user/devcon-git101.git
* [new branch]
master -> master
Branch master set up to track remote branch master from origin.
git push
Note that "git push" only pushes a single branch.
If you want to push all branches you can use:

$ git push REMOTE --all
If you want to push all tags you can use:

$ git push REMOTE --tags
Clone into another folder
$ cd ..
$ git clone git@github.com:user/devcon-git101.git github-git101
Cloning into 'github-git101'...
remote: Counting objects: 40, done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 40 (delta 3), reused 40 (delta 3)
Receiving objects: 100% (40/40), done.
Resolving deltas: 100% (3/3), done.
done.
play time
With the cloned folder, you can now play around with certain
collaboration scenarios. For example:
1. Make some changes in /devcon-git101
2. Commit it via "git commit"
3. Push it to the repo at Github via "git push"
4. Go to /github-git101 and pull the changes via "git pull"
Want to let someone else push to
your repo?
Go to the repo Settings →
Collaborators and add your friends.
Push/Pull
You'll quickly notice that git push only allows
fast-forward changes to be pushed.
In simpler terms, you cannot push until you pull
the latest changes from the remote.
pull + rebase
Want to get rid of the distracting merge commits
whenever you pull when you have pending
commits? Tell git to rebase instead of merging:
$ git pull --rebase origin master
Best Practices
merge vs rebase
The problem with rebase is that you can overwrite
commits already on the remote repository and this can
affect your team.
That said, people generally use rebase when working
together on a single branch (e.g. git pull --rebase
origin master) and merge when merging branches.
Project Workflow
Here's the most basic workflow for working with with others
through version control systems:
1. Double check if the project work e.g. compiles, pages load, etc.
2. Stage and commit your changes.
3. Before pushing, pull changes from the remote project repo. If
there are no changes, skip to step 5.
4. Resolve conflicts, if any, then go back to step 1.
5. Push your changes.
Communicate!
Version control systems aims to improve communication
between team members, not replace it.

Always consult with the other person whenever
you encounter a merge conflict.
Broken Builds
To repeat step 1:
1. Double check if the project work e.g. compiles, pages load, etc.
Broken builds are what we call published commits that have
obvious critical, show-stopping bugs.
That said, it's better to delay pushing your commits to spend
more time making sure that the project works rather than waste
everyone's time.
Work in Progress
Avoid publishing half-done work as it can lead to
broken builds.
If you need to push those changes (e.g. you want
a backup), put them in a branch then push that
branch. Or consider using git stash.
Helpful Stuff
that we will still not explain in detail...
Graphical Git Tools
Client - Server VCS
vs
Distributed VCS
Push-based
vs
Pull-based
Backups
GitHub as a Project
Management Tool
GitHub as a Project
Management Tool for
Open Source Projects
GitHub as a Portfolio
Branches + Workflow
Tagging + Deployment
Free Private Repos
Since Github is only free for public repos, you might want to
look into the following to keep your source code private:
Assembla (https://www.assembla.com)
- 1 private repo, limited to 3 collaborators
BitBucket (https://bitbucket.org/)
- Unlimited private repos, limited to 5 collaborators
Github Educational Accounts (https://github.com/edu)
- free accounts for students and teachers
Summary of Commands
git branch - list, create, or delete branches
git checkout - checkout a branch or a path
git merge - merge two or more branches
git rebase - move commits to the end of a branch
git clone - make a local copy of a repository
git remote - list, create, or delete remote repos
git fetch - retrieve objects/changes from a repository
git pull - fetch + merge or rebase
git push - publish local commits to a remote
Summary of Command
Variations
git checkout -b
- create and checkout branch
git remote add
- add a new remote repository to track
git remote rm
- remove remote repository
git pull --rebase
- rebase instead of merge when pulling
Commands that I use
everyday
git pull --rebase
git add
git commit -am "blah blah"
gitk / git log / git status / git diff
git push
Commands that I use less
often
git clone
git remote add
git remote -v
git checkout <branch>
git rebase <branch> / git merge <branch>
git checkout -- <path>
git reset --hard <hash>
git revert
Thank You For Listening!

More Related Content

What's hot

What's hot (20)

Git - Basic Crash Course
Git - Basic Crash CourseGit - Basic Crash Course
Git - Basic Crash Course
 
Introduction to Git / Github
Introduction to Git / GithubIntroduction to Git / Github
Introduction to Git / Github
 
Git basics to advance with diagrams
Git basics to advance with diagramsGit basics to advance with diagrams
Git basics to advance with diagrams
 
Git and Github slides.pdf
Git and Github slides.pdfGit and Github slides.pdf
Git and Github slides.pdf
 
Git real slides
Git real slidesGit real slides
Git real slides
 
Starting with Git & GitHub
Starting with Git & GitHubStarting with Git & GitHub
Starting with Git & GitHub
 
Git basics
Git basicsGit basics
Git basics
 
Git Introduction Tutorial
Git Introduction TutorialGit Introduction Tutorial
Git Introduction Tutorial
 
The everyday developer's guide to version control with Git
The everyday developer's guide to version control with GitThe everyday developer's guide to version control with Git
The everyday developer's guide to version control with Git
 
Git 101 for Beginners
Git 101 for Beginners Git 101 for Beginners
Git 101 for Beginners
 
Git & GitHub WorkShop
Git & GitHub WorkShopGit & GitHub WorkShop
Git & GitHub WorkShop
 
Intro to Git, GitHub, and BitBucket
Intro to Git, GitHub, and BitBucketIntro to Git, GitHub, and BitBucket
Intro to Git, GitHub, and BitBucket
 
Git - An Introduction
Git - An IntroductionGit - An Introduction
Git - An Introduction
 
Git Started With Git
Git Started With GitGit Started With Git
Git Started With Git
 
Git and GitHub
Git and GitHubGit and GitHub
Git and GitHub
 
Git & GitHub for Beginners
Git & GitHub for BeginnersGit & GitHub for Beginners
Git & GitHub for Beginners
 
Introduction to Git and Github
Introduction to Git and GithubIntroduction to Git and Github
Introduction to Git and Github
 
Advanced Git Tutorial
Advanced Git TutorialAdvanced Git Tutorial
Advanced Git Tutorial
 
Introduction to Git and Github
Introduction to Git and GithubIntroduction to Git and Github
Introduction to Git and Github
 
Introduction to GitHub, Open Source and Tech Article
Introduction to GitHub, Open Source and Tech ArticleIntroduction to GitHub, Open Source and Tech Article
Introduction to GitHub, Open Source and Tech Article
 

Similar to Version Control with Git for Beginners

Git Basics (Professionals)
 Git Basics (Professionals) Git Basics (Professionals)
Git Basics (Professionals)bryanbibat
 
Introducción a git y GitHub
Introducción a git y GitHubIntroducción a git y GitHub
Introducción a git y GitHubLucas Videla
 
Intro to Git DevOps Tally Presentation 101615
Intro to Git DevOps Tally Presentation 101615Intro to Git DevOps Tally Presentation 101615
Intro to Git DevOps Tally Presentation 101615Brian K. Vagnini
 
Git Concepts, Commands and Connectivity
Git Concepts, Commands and ConnectivityGit Concepts, Commands and Connectivity
Git Concepts, Commands and ConnectivityRaja Soundaramourty
 
Git - Get Ready To Use It
Git - Get Ready To Use ItGit - Get Ready To Use It
Git - Get Ready To Use ItDaniel Kummer
 
Introduction to Git for Artists
Introduction to Git for ArtistsIntroduction to Git for Artists
Introduction to Git for ArtistsDavid Newbury
 
Git it on (includes git hub)
Git it on (includes git hub)Git it on (includes git hub)
Git it on (includes git hub)Martin Bing
 
Nge-GIT (Belajar Git Bareng)
Nge-GIT (Belajar Git Bareng)Nge-GIT (Belajar Git Bareng)
Nge-GIT (Belajar Git Bareng)Mizan Riqzia
 
Nicola Iarocci - Git stories from the front line - Codemotion Milan 2017
Nicola Iarocci - Git stories from the front line - Codemotion Milan 2017Nicola Iarocci - Git stories from the front line - Codemotion Milan 2017
Nicola Iarocci - Git stories from the front line - Codemotion Milan 2017Codemotion
 

Similar to Version Control with Git for Beginners (20)

Git Basics (Professionals)
 Git Basics (Professionals) Git Basics (Professionals)
Git Basics (Professionals)
 
Git_real_slides
Git_real_slidesGit_real_slides
Git_real_slides
 
Introducción a git y GitHub
Introducción a git y GitHubIntroducción a git y GitHub
Introducción a git y GitHub
 
Intro to Git DevOps Tally Presentation 101615
Intro to Git DevOps Tally Presentation 101615Intro to Git DevOps Tally Presentation 101615
Intro to Git DevOps Tally Presentation 101615
 
Git Concepts, Commands and Connectivity
Git Concepts, Commands and ConnectivityGit Concepts, Commands and Connectivity
Git Concepts, Commands and Connectivity
 
Gittalk
GittalkGittalk
Gittalk
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
Loading...git
Loading...gitLoading...git
Loading...git
 
Git - Get Ready To Use It
Git - Get Ready To Use ItGit - Get Ready To Use It
Git - Get Ready To Use It
 
Git101
Git101Git101
Git101
 
Git
GitGit
Git
 
Introduction to Git for Artists
Introduction to Git for ArtistsIntroduction to Git for Artists
Introduction to Git for Artists
 
Git setuplinux
Git setuplinuxGit setuplinux
Git setuplinux
 
GitSetupLinux
GitSetupLinuxGitSetupLinux
GitSetupLinux
 
Git it on (includes git hub)
Git it on (includes git hub)Git it on (includes git hub)
Git it on (includes git hub)
 
Git basics
Git basicsGit basics
Git basics
 
Nge-GIT (Belajar Git Bareng)
Nge-GIT (Belajar Git Bareng)Nge-GIT (Belajar Git Bareng)
Nge-GIT (Belajar Git Bareng)
 
390a gitintro 12au
390a gitintro 12au390a gitintro 12au
390a gitintro 12au
 
簡單介紹git
簡單介紹git簡單介紹git
簡單介紹git
 
Nicola Iarocci - Git stories from the front line - Codemotion Milan 2017
Nicola Iarocci - Git stories from the front line - Codemotion Milan 2017Nicola Iarocci - Git stories from the front line - Codemotion Milan 2017
Nicola Iarocci - Git stories from the front line - Codemotion Milan 2017
 

More from bryanbibat

Static Sites in Ruby
Static Sites in RubyStatic Sites in Ruby
Static Sites in Rubybryanbibat
 
So You Want to Teach Ruby and Rails...
So You Want to Teach Ruby and Rails...So You Want to Teach Ruby and Rails...
So You Want to Teach Ruby and Rails...bryanbibat
 
Upgrading to Ruby 2.1, Rails 4.0, Bootstrap 3.0
Upgrading to Ruby 2.1, Rails 4.0, Bootstrap 3.0Upgrading to Ruby 2.1, Rails 4.0, Bootstrap 3.0
Upgrading to Ruby 2.1, Rails 4.0, Bootstrap 3.0bryanbibat
 
Rails is Easy*
Rails is Easy*Rails is Easy*
Rails is Easy*bryanbibat
 
Things Future IT Students Should Know (But Don't)
Things Future IT Students Should Know (But Don't)Things Future IT Students Should Know (But Don't)
Things Future IT Students Should Know (But Don't)bryanbibat
 
Things IT Undergrads Should Know (But Don't)
Things IT Undergrads Should Know (But Don't)Things IT Undergrads Should Know (But Don't)
Things IT Undergrads Should Know (But Don't)bryanbibat
 
From Novice to Expert: A Pragmatic Approach to Learning
From Novice to Expert: A Pragmatic Approach to LearningFrom Novice to Expert: A Pragmatic Approach to Learning
From Novice to Expert: A Pragmatic Approach to Learningbryanbibat
 
Lambda Expressions in Java 8
Lambda Expressions in Java 8Lambda Expressions in Java 8
Lambda Expressions in Java 8bryanbibat
 
Preparing for the WebGeek DevCup
Preparing for the WebGeek DevCupPreparing for the WebGeek DevCup
Preparing for the WebGeek DevCupbryanbibat
 
Productive text editing with Vim
Productive text editing with VimProductive text editing with Vim
Productive text editing with Vimbryanbibat
 
Ruby and Rails by Example (GeekCamp edition)
Ruby and Rails by Example (GeekCamp edition)Ruby and Rails by Example (GeekCamp edition)
Ruby and Rails by Example (GeekCamp edition)bryanbibat
 
Latest Trends in Web Technologies
Latest Trends in Web TechnologiesLatest Trends in Web Technologies
Latest Trends in Web Technologiesbryanbibat
 
Virtualization
VirtualizationVirtualization
Virtualizationbryanbibat
 
Some Myths in Software Development
Some Myths in Software DevelopmentSome Myths in Software Development
Some Myths in Software Developmentbryanbibat
 
Latest Trends in Open Source Web Technologies
Latest Trends in Open Source Web TechnologiesLatest Trends in Open Source Web Technologies
Latest Trends in Open Source Web Technologiesbryanbibat
 
What it takes to be a Web Developer
What it takes to be a Web DeveloperWhat it takes to be a Web Developer
What it takes to be a Web Developerbryanbibat
 
Ruby and Rails by example
Ruby and Rails by exampleRuby and Rails by example
Ruby and Rails by examplebryanbibat
 
before you leap
before you leapbefore you leap
before you leapbryanbibat
 

More from bryanbibat (20)

Hd 10 japan
Hd 10 japanHd 10 japan
Hd 10 japan
 
Static Sites in Ruby
Static Sites in RubyStatic Sites in Ruby
Static Sites in Ruby
 
So You Want to Teach Ruby and Rails...
So You Want to Teach Ruby and Rails...So You Want to Teach Ruby and Rails...
So You Want to Teach Ruby and Rails...
 
Upgrading to Ruby 2.1, Rails 4.0, Bootstrap 3.0
Upgrading to Ruby 2.1, Rails 4.0, Bootstrap 3.0Upgrading to Ruby 2.1, Rails 4.0, Bootstrap 3.0
Upgrading to Ruby 2.1, Rails 4.0, Bootstrap 3.0
 
Rails is Easy*
Rails is Easy*Rails is Easy*
Rails is Easy*
 
Things Future IT Students Should Know (But Don't)
Things Future IT Students Should Know (But Don't)Things Future IT Students Should Know (But Don't)
Things Future IT Students Should Know (But Don't)
 
Things IT Undergrads Should Know (But Don't)
Things IT Undergrads Should Know (But Don't)Things IT Undergrads Should Know (But Don't)
Things IT Undergrads Should Know (But Don't)
 
From Novice to Expert: A Pragmatic Approach to Learning
From Novice to Expert: A Pragmatic Approach to LearningFrom Novice to Expert: A Pragmatic Approach to Learning
From Novice to Expert: A Pragmatic Approach to Learning
 
Lambda Expressions in Java 8
Lambda Expressions in Java 8Lambda Expressions in Java 8
Lambda Expressions in Java 8
 
Preparing for the WebGeek DevCup
Preparing for the WebGeek DevCupPreparing for the WebGeek DevCup
Preparing for the WebGeek DevCup
 
Productive text editing with Vim
Productive text editing with VimProductive text editing with Vim
Productive text editing with Vim
 
Ruby and Rails by Example (GeekCamp edition)
Ruby and Rails by Example (GeekCamp edition)Ruby and Rails by Example (GeekCamp edition)
Ruby and Rails by Example (GeekCamp edition)
 
Latest Trends in Web Technologies
Latest Trends in Web TechnologiesLatest Trends in Web Technologies
Latest Trends in Web Technologies
 
Virtualization
VirtualizationVirtualization
Virtualization
 
Some Myths in Software Development
Some Myths in Software DevelopmentSome Myths in Software Development
Some Myths in Software Development
 
Latest Trends in Open Source Web Technologies
Latest Trends in Open Source Web TechnologiesLatest Trends in Open Source Web Technologies
Latest Trends in Open Source Web Technologies
 
What it takes to be a Web Developer
What it takes to be a Web DeveloperWhat it takes to be a Web Developer
What it takes to be a Web Developer
 
Ruby and Rails by example
Ruby and Rails by exampleRuby and Rails by example
Ruby and Rails by example
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
 
before you leap
before you leapbefore you leap
before you leap
 

Recently uploaded

08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 

Recently uploaded (20)

08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 

Version Control with Git for Beginners