SlideShare a Scribd company logo
1 of 245
Download to read offline
Version Control
with Git
DevCon Git Code Camp for Professionals
15 March 2014
http://devcon.ph/events/git-code-camp-for-professionals
Coverage
This workshop will cover the basics of Git
and how to integrate Git and Github into
your day-to-day work.
Slides:
https://speakerdeck.com/bryanbibat/git-basics-professionals
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
Yes, we are going to use
the command line today
But I'll also demo how you can use GUI clients.
GUI Installation
TortoiseGit:
https://code.google.com/p/tortoisegit/
Github for Windows:
http://windows.github.com/
Github for Mac:
http://mac.github.com/
Others:
http://git-scm.com/downloads/guis
Yes, we are going to use
the command line today
Git features not available in some GUI clients are marked
!
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
Review...
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
$ git init … Then we initialize it as a git repository.
Create your first repository
$ mkdir devcon-git101
$ cd devcon-git101
$ git init … Then we initialize it as a git repository.
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
http://git-scm.com/book/en/Getting-Started-Git-Basics
git add
git commit
Initial Commit6fba518
Initial Commit6fba518
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
Initial Commit6fba518
Make hello.txt more excitinge642771
Initial Commit6fba518
Make hello.txt more excitinge642771
No, this is not a mistake;
commits refer to their
parent(s), not the other
way around.
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"
Initial Commit6fba518
Make hello.txt more excitinge642771
Initial Commit
1 file created
6fba518
Make hello.txt more exciting
1 file modified
e642771
Create 2 files in a single commit
2 files created
7c57165
Each commit deals with a set of files
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: animals.txt
# modified: 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"...
Initial Commit6fba518
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
Add Janet5e545ed
Commit unrelated changes... DON'T DO THIS3a0eac3
Initial Commit6fba518
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
Add Janet5e545ed
Commit unrelated changes... DON'T DO THIS3a0eac3
HEAD
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
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
Add Janet5e545ed
Commit unrelated changes... DON'T DO THIS3a0eac3
HEAD
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
Add Janet5e545ed
Revert "Commit unrelated changes... DON'T
DO THIS"
2a1b52e
HEAD
Commit unrelated changes... DON'T DO THIS3a0eac3
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)
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
Add Janet5e545ed
Revert "Commit unrelated changes... DON'T
DO THIS"
2a1b52e
HEAD
Commit unrelated changes... DON'T DO THIS3a0eac3
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
Add Janet5e545ed
Revert "Commit unrelated changes... DON'T
DO THIS"
2a1b52e
HEAD
Commit unrelated changes... DON'T DO THIS3a0eac3
View history
$ git log --graph --pretty=format:'%h %s%d' --all
* 7c57165 Create 2 files in a single commit (HEAD, master)
* e642771 Make hello.txt more exciting
* 6fba518 Initial Commit
or
$ gitk --all
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
HEAD
Move HEAD to a commit
$ git reset --hard 2a1b52e
HEAD is now at 2a1b52e Revert "Commit unrelated changes... DON'T DO
THIS"
!
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
HEAD
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
Add Janet5e545ed
Revert "Commit unrelated changes... DON'T
DO THIS"
2a1b52e
HEAD
Commit unrelated changes... DON'T DO THIS3a0eac3
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
Add Janet5e545ed
Revert "Commit unrelated changes... DON'T
DO THIS"
2a1b52e
HEAD
Commit unrelated changes... DON'T DO THIS3a0eac3
Unreferenced commits will
not show up in the history.
Coincidentally, we can use
Tags to refer to a commit.
Tagging
$ git tag tagging-demo
!
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
Add Janet5e545ed
Revert "Commit unrelated changes... DON'T
DO THIS"
2a1b52e
HEAD
Commit unrelated changes... DON'T DO THIS3a0eac3
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
Add Janet5e545ed
Revert "Commit unrelated changes... DON'T
DO THIS"
2a1b52e
HEAD
Commit unrelated changes... DON'T DO THIS3a0eac3
tagging-demo
Going back...
$ git reset --hard 7c57165
HEAD is now at 7c57165 Create 2 files in a single commit
!
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
Add Janet5e545ed
Revert "Commit unrelated changes... DON'T
DO THIS"
2a1b52e
HEAD
Commit unrelated changes... DON'T DO THIS3a0eac3
tagging-demo
View history
$ git log --graph --pretty=format:'%h %s%d' --all
* 2a1b52e Revert "Commit unrelated changes... DON'T DO THIS" (tagging-demo)
* 3a0eac3 Commit unrelated changes... DON'T DO THIS
* 5e545ed Add Janet
* 7c57165 Create 2 files in a single commit (HEAD, master)
* e642771 Make hello.txt more exciting
* 6fba518 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)
Initial Commit6fba518
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
HEAD end-part1
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
Initial Commit6fba518
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
HEAD end-part1
Initial Commit6fba518
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
master end-part1
HEAD
Initial Commit6fba518
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
master end-part1
HEAD
in other version control
systems, master is called
trunk
Create a branch
$ git branch testing
Initial Commit6fba518
Make hello.txt more excitinge642771
Create 2 files in a single commit7c57165
master end-part1
HEAD
6fba518
e642771
7c57165
master
end-part1
HEAD
testing
Switch to branch
$ git checkout testing
Switched to branch 'testing'
$ git status
# On branch testing
nothing to commit, working directory clean
6fba518
e642771
7c57165
master
end-part1
HEAD
testing
6fba518
e642771
7c57165
master
end-part1
HEAD
testing
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
6fba518
e642771
7c57165
master
end-part1
HEAD
testing
6fba518
e642771
7c57165
master
end-part1
HEAD
testing
cdd47c2
6fba518
e642771
7c57165
master
end-part1
HEAD
testingcdd47c2
Switch back to master
$ git checkout master
Switched to branch 'master'
6fba518
e642771
7c57165
master
end-part1
HEAD
testingcdd47c2
6fba518
e642771
7c57165
master
end-part1
testingcdd47c2
HEAD
Difference between log --all
vs normal log
$ gitk
6fba518
e642771
7c57165
master
end-part1
HEAD
Difference between log --all
vs normal log
$ gitk --all
6fba518
e642771
7c57165
master
end-part1
testingcdd47c2
HEAD
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(+)
6fba518
e642771
7c57165
master
end-part1
testingcdd47c2
HEAD
6fba518
e642771
7c57165
master
end-part1
testingcdd47c2
HEAD
cc3044c
Shortcut: create and switch
$ git checkout -b testing2
Switched to branch 'testing2'
6fba518
e642771
7c57165
master
end-part1
testingcdd47c2
HEAD
cc3044c
6fba518
e642771
7c57165
master
end-part1
testingcdd47c2
cc3044c
HEAD
testing2
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(+)
6fba518
e642771
7c57165
master
end-part1
testingcdd47c2
cc3044c
HEAD
testing2
6fba518
e642771
7c57165
master
end-part1
testingcdd47c2
cc3044c
HEADtesting2
80414cf
yay, mukha nang puno
Go back to master
$ git checkout master
Switched to branch 'master'
$ gitk --all
6fba518
e642771
7c57165
master
end-part1
testingcdd47c2
cc3044c
HEAD
testing2
80414cf
Merge another branch
$ git merge testing
Auto-merging names.txt
Merge made by the 'recursive' strategy.
names.txt | 1 +
1 file changed, 1 insertion(+)
6fba518
e642771
7c57165
master
end-part1
testingcdd47c2
cc3044c
HEAD
testing2
80414cf
6fba518
e642771
7c57165
master
end-part1
testingcdd47c2
cc3044c
HEADtesting2
80414cf
f56f4fa Merge branch '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
e642771
7c57165
master
end-part1
testingcdd47c2
cc3044c
HEADtesting2
80414cf
f56f4fa Merge branch 'testing'
e642771
7c57165
master
end-part1
testingcdd47c2
cc3044c
HEAD
testing2
80414cf
f56f4fa Merge branch 'testing'
07e83b3 Merge branch 'testing2' and fix conflict
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(-)
master
b115e79
07e83b3
HEAD
merging-demo
00b26cb 0c1f192
bc3583d
master
b115e79
07e83b3
HEAD
merging-demo
00b26cb 0c1f192
bc3583d
Merging
aff102e
Rebasing
$ git rebase merging-demo
First, rewinding head to replay your work on
top of it...
Applying: Remove 8.2
Applying: Remove 9
!
master
b115e79
07e83b3
HEAD
merging-demo
00b26cb 0c1f192
bc3583d
master
b115e79
07e83b3
HEAD
merging-demo
00b26cb 0c1f192
bc3583d
Remove 8.2
Remove 9
master
b115e79
07e83b3
HEAD
merging-demo
00b26cb
67b81ce
73dd819
Remove 8.2
Remove 9
master
b115e79
07e83b3
HEAD
merging-demo
00b26cb
67b81ce
73dd819
Remove 8.2
Remove 9
Later na lang yung
merge vs rebase
Malapit na tayo mag-Github,
but first...
Remote Repositories
Github for Windows only supports
Github
Clone into another folder
$ cd ..
$ git clone devcon-git101 git101
Cloning into 'git101'...
done.
Check the clone repo
$ cd git101
$ gitk
merging-demo
master
HEAD
/devcon-git101
merging-demo
master
HEAD
/git101
merging-demo
master
HEAD
/devcon-git101
merging-demo
master HEAD
/git101
remotes/origin/
merging-demo
remotes/origin/
master
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)
master
HEAD
/devcon-git101
master HEAD
/git101
remotes/origin/
master
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(+)
master
HEAD
/devcon-git101
master HEAD
/git101
remotes/origin/
master
master
HEAD
/devcon-git101
master HEAD
/git101
remotes/origin/
master
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
master
HEAD
/devcon-git101
master HEAD
/git101
remotes/origin/
master
master
HEAD
/devcon-git101
master HEAD
/git101
remotes/origin/
master
Merge the fetched branch
$ git merge origin/master
Updating 73dd819..cf5f902
Fast-forward
names.txt | 1 +
1 file changed, 1 insertion(+)
master
HEAD
/devcon-git101
master HEAD
/git101
remotes/origin/
master
master
HEAD
/devcon-git101
master HEAD
/git101
remotes/origin/
master
A fast-forward occurs when you merge a
branch which has HEAD as an ancestor.
In this case, only the references are affected.
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
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
(this uses SSH url, you can use HTTPS)
$ 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
Github for Windows automatically uses
git pull --rebase + git push when
syncing
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.
Tired of entering your
password?
There are multiple ways to
authenticate users in Git.
Let's discuss the more secure
alternative: via SSH keys.
Cryptography pasakalye...
Authentication via Password
Client Server
Authentication via Password
Client sends
credentials
Server verifies
username + password
password
DB
Authentication via Password
Client sends
credentials
Server verifies
username + password
password
DB
can be intercepted
e.g. FTP
Authentication via SSH Key
(oversimplified)
Client has 2 "keys" Server
private key
public key
Authentication via SSH Key
(oversimplified)
Client has 2 "keys"
Server has a list of
authorized keys
private key
public key
Authentication via SSH Key
(oversimplified)
Client has 2 "keys"
Server has a list of
authorized keys
private key
public key
First, the public key must be sent to the server securely beforehand.
Authentication via SSH Key
(oversimplified)
Client
Server has a list of
authorized keys
private key
public key
Using the private key, client can create a package that
can only be unlocked by the corresponding public key
and only that public key.
Authentication via SSH Key
(oversimplified)
Client
Server has a list of
authorized keys
private key
public key
Using the private key, client can create a package that
can only be unlocked by the corresponding public key
and only that public key.
Authentication via SSH Key
(oversimplified)
Client
Server has a list of
authorized keys
private key
public key
Using the private key, client can create a package that
can only be unlocked by the corresponding public key
and only that public key.
Authentication via SSH Key
(oversimplified)
Client
Server has a list of
authorized keys
private key
public key
Using the private key, client can create a package that
can only be unlocked by the corresponding public key
and only that public key.
doesn't matter if
intercepted since
they still need to
crack it.
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
Integrating Git with
your Projects
Hosting Solutions
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
Self-Hosted Repos
If you've got spare time and spare servers, you can also host
your own git repositories:
GitLab (https://www.gitlab.com/)
- GitHub clone written in Ruby
GitBucket (https://github.com/takezoe/gitbucket)
- GitHub clone written in Scala
You can also read the docs for other self-hosting options
http://git-scm.com/book/en/Git-on-the-Server
Project Workflow
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.
Branches + Workflow
There are two main camps in using branches for
projects using Git:
1. Mainline
e.g. git-flow (http://nvie.com/posts/a-successful-git-branching-model/)
2. Trunk-based
e.g. how Github does it (https://gist.github.com/17twenty/6733076)
Branches + Workflow
Client - Server VCS
vs
Distributed VCS
Branches + Workflow
Push-based
vs
Pull-based
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.
Continuous Integration
You can use CI servers to automatically inform you of
broken builds. Most CI servers nowadays support Git
and its post-commit hooks to automatically test on a
push. Some examples:
●
Jenkins Git Plugin
https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin
●
TeamCity Git docs
http://confluence.jetbrains.com/display/TCD8/Git+(JetBrains)
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.
Backups
Don't rely on Git as a backup scheme;
always have an external backup
Deployment
Deployment Automation
e.g. Capistrano
http://capistranorb.com/
Push-based
Platform-as-a-Service
e.g. Pagoda Box
https://pagodabox.com/,
Heroku
https://www.heroku.com/
Github stuff
Github Webhooks
https://developer.github.com/webhooks/
GitHub as a Project
Management Tool
GitHub as a Project
Management Tool for
Open Source Projects
GitHub as a Portfolio
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

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 Workshop
Introduction To Git WorkshopIntroduction To Git Workshop
Introduction To Git Workshopthemystic_ca
 
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 controlBecky Todd
 
The Fundamentals of Git
The Fundamentals of GitThe Fundamentals of Git
The Fundamentals of GitDivineOmega
 
Git: An introduction of plumbing and porcelain commands
Git: An introduction of plumbing and porcelain commandsGit: An introduction of plumbing and porcelain commands
Git: An introduction of plumbing and porcelain commandsth507
 
Git: basic to advanced
Git: basic to advancedGit: basic to advanced
Git: basic to advancedYodalee
 
Nge-GIT (Belajar Git Bareng)
Nge-GIT (Belajar Git Bareng)Nge-GIT (Belajar Git Bareng)
Nge-GIT (Belajar Git Bareng)Mizan Riqzia
 
Git Basics at Rails Underground
Git Basics at Rails UndergroundGit Basics at Rails Underground
Git Basics at Rails UndergroundAriejan de Vroom
 
Git for beginner
Git for beginnerGit for beginner
Git for beginnerTrung Huynh
 
GIT in a nutshell
GIT in a nutshellGIT in a nutshell
GIT in a nutshellalignan
 
ConFoo 2016 - Mum, I want to be a Groovy full-stack developer
ConFoo 2016 - Mum, I want to be a Groovy full-stack developerConFoo 2016 - Mum, I want to be a Groovy full-stack developer
ConFoo 2016 - Mum, I want to be a Groovy full-stack developerIván López Martín
 

What's hot (20)

Git Real
Git RealGit Real
Git Real
 
Git presentation
Git presentationGit presentation
Git presentation
 
Git - Get Ready To Use It
Git - Get Ready To Use ItGit - Get Ready To Use It
Git - Get Ready To Use It
 
Git for the absolute beginners
Git for the absolute beginnersGit for the absolute beginners
Git for the absolute beginners
 
Git setuplinux
Git setuplinuxGit setuplinux
Git setuplinux
 
Introduction To Git Workshop
Introduction To Git WorkshopIntroduction To Git Workshop
Introduction To Git Workshop
 
390a gitintro 12au
390a gitintro 12au390a gitintro 12au
390a gitintro 12au
 
Basic Git
Basic GitBasic Git
Basic 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
 
The Fundamentals of Git
The Fundamentals of GitThe Fundamentals of Git
The Fundamentals of Git
 
Git: An introduction of plumbing and porcelain commands
Git: An introduction of plumbing and porcelain commandsGit: An introduction of plumbing and porcelain commands
Git: An introduction of plumbing and porcelain commands
 
Git: basic to advanced
Git: basic to advancedGit: basic to advanced
Git: basic to advanced
 
Nge-GIT (Belajar Git Bareng)
Nge-GIT (Belajar Git Bareng)Nge-GIT (Belajar Git Bareng)
Nge-GIT (Belajar Git Bareng)
 
Git github
Git githubGit github
Git github
 
Git Basics at Rails Underground
Git Basics at Rails UndergroundGit Basics at Rails Underground
Git Basics at Rails Underground
 
Git for beginner
Git for beginnerGit for beginner
Git for beginner
 
GIT in a nutshell
GIT in a nutshellGIT in a nutshell
GIT in a nutshell
 
Use Git like a pro - condensed
Use Git like a pro - condensedUse Git like a pro - condensed
Use Git like a pro - condensed
 
Git like a pro EDD18 - Full edition
Git like a pro EDD18 - Full editionGit like a pro EDD18 - Full edition
Git like a pro EDD18 - Full edition
 
ConFoo 2016 - Mum, I want to be a Groovy full-stack developer
ConFoo 2016 - Mum, I want to be a Groovy full-stack developerConFoo 2016 - Mum, I want to be a Groovy full-stack developer
ConFoo 2016 - Mum, I want to be a Groovy full-stack developer
 

Similar to Git Basics (Professionals)

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
 
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 GitE Carter
 
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
 
Learning git
Learning gitLearning git
Learning gitSid Anand
 
Intro to git (UT biocomputing 2015)
Intro to git (UT biocomputing 2015)Intro to git (UT biocomputing 2015)
Intro to git (UT biocomputing 2015)chenghlee
 
Matt Gauger - Git & Github web414 December 2010
Matt Gauger - Git & Github web414 December 2010Matt Gauger - Git & Github web414 December 2010
Matt Gauger - Git & Github web414 December 2010Matt Gauger
 
Git Started With Git
Git Started With GitGit Started With Git
Git Started With GitNick Quaranto
 
Understanding about git
Understanding about gitUnderstanding about git
Understanding about gitSothearin Ren
 
WPGR - Intro to Git (on the Command Line)
WPGR - Intro to Git (on the Command Line)WPGR - Intro to Git (on the Command Line)
WPGR - Intro to Git (on the Command Line)Brian Richards
 
Hacktoberfest intro to Git and GitHub
Hacktoberfest intro to Git and GitHubHacktoberfest intro to Git and GitHub
Hacktoberfest intro to Git and GitHubDSC GVP
 

Similar to Git Basics (Professionals) (20)

Git_real_slides
Git_real_slidesGit_real_slides
Git_real_slides
 
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
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
Git and github 101
Git and github 101Git and github 101
Git and github 101
 
Loading...git
Loading...gitLoading...git
Loading...git
 
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
 
Introduction to Git for Artists
Introduction to Git for ArtistsIntroduction to Git for Artists
Introduction to Git for Artists
 
GitSetupLinux
GitSetupLinuxGitSetupLinux
GitSetupLinux
 
Git101
Git101Git101
Git101
 
Working with Git
Working with GitWorking with Git
Working with Git
 
Git it on (includes git hub)
Git it on (includes git hub)Git it on (includes git hub)
Git it on (includes git hub)
 
Learning git
Learning gitLearning git
Learning git
 
Intro to git (UT biocomputing 2015)
Intro to git (UT biocomputing 2015)Intro to git (UT biocomputing 2015)
Intro to git (UT biocomputing 2015)
 
簡單介紹git
簡單介紹git簡單介紹git
簡單介紹git
 
Matt Gauger - Git & Github web414 December 2010
Matt Gauger - Git & Github web414 December 2010Matt Gauger - Git & Github web414 December 2010
Matt Gauger - Git & Github web414 December 2010
 
Git Started With Git
Git Started With GitGit Started With Git
Git Started With Git
 
Understanding about git
Understanding about gitUnderstanding about git
Understanding about git
 
WPGR - Intro to Git (on the Command Line)
WPGR - Intro to Git (on the Command Line)WPGR - Intro to Git (on the Command Line)
WPGR - Intro to Git (on the Command Line)
 
Hacktoberfest intro to Git and GitHub
Hacktoberfest intro to Git and GitHubHacktoberfest intro to Git and GitHub
Hacktoberfest intro to Git and GitHub
 

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

New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 

Recently uploaded (20)

New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 

Git Basics (Professionals)