SlideShare a Scribd company logo
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
 Git Basics (Professionals)
Version Control
Why Version Control?
Reason #1:
"Versioning"
 Git Basics (Professionals)
 Git Basics (Professionals)
Wait a minute...
 Git Basics (Professionals)
Finer-grained Control
 Git Basics (Professionals)
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!
Ad

More Related Content

What's hot (20)

Git Real
Git RealGit Real
Git Real
Gong Haibing
 
Git presentation
Git presentationGit presentation
Git presentation
Lorenzo Baracchi
 
Git - Get Ready To Use It
Git - Get Ready To Use ItGit - Get Ready To Use It
Git - Get Ready To Use It
Daniel Kummer
 
Git for the absolute beginners
Git for the absolute beginnersGit for the absolute beginners
Git for the absolute beginners
Gabriele Baldassarre
 
Git setuplinux
Git setuplinuxGit setuplinux
Git setuplinux
Shubham Verma
 
Introduction To Git Workshop
Introduction To Git WorkshopIntroduction To Git Workshop
Introduction To Git Workshop
themystic_ca
 
390a gitintro 12au
390a gitintro 12au390a gitintro 12au
390a gitintro 12au
Nguyen Van Hung
 
Basic Git
Basic GitBasic Git
Basic Git
Knut Haugen
 
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
Becky Todd
 
The Fundamentals of Git
The Fundamentals of GitThe Fundamentals of Git
The Fundamentals of Git
DivineOmega
 
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
th507
 
Git: basic to advanced
Git: basic to advancedGit: basic to advanced
Git: basic to advanced
Yodalee
 
Nge-GIT (Belajar Git Bareng)
Nge-GIT (Belajar Git Bareng)Nge-GIT (Belajar Git Bareng)
Nge-GIT (Belajar Git Bareng)
Mizan Riqzia
 
Git github
Git githubGit github
Git github
Anurag Deb
 
Git Basics at Rails Underground
Git Basics at Rails UndergroundGit Basics at Rails Underground
Git Basics at Rails Underground
Ariejan de Vroom
 
Git for beginner
Git for beginnerGit for beginner
Git for beginner
Trung Huynh
 
GIT in a nutshell
GIT in a nutshellGIT in a nutshell
GIT in a nutshell
alignan
 
Use Git like a pro - condensed
Use Git like a pro - condensedUse Git like a pro - condensed
Use Git like a pro - condensed
Jesús Miguel Benito Calzada
 
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
Jesús Miguel Benito Calzada
 
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
Iván López Martín
 
Git - Get Ready To Use It
Git - Get Ready To Use ItGit - Get Ready To Use It
Git - Get Ready To Use It
Daniel Kummer
 
Introduction To Git Workshop
Introduction To Git WorkshopIntroduction To Git Workshop
Introduction To Git Workshop
themystic_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 control
Becky Todd
 
The Fundamentals of Git
The Fundamentals of GitThe Fundamentals of Git
The Fundamentals of Git
DivineOmega
 
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
th507
 
Git: basic to advanced
Git: basic to advancedGit: basic to advanced
Git: basic to advanced
Yodalee
 
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 Underground
Ariejan de Vroom
 
Git for beginner
Git for beginnerGit for beginner
Git for beginner
Trung Huynh
 
GIT in a nutshell
GIT in a nutshellGIT in a nutshell
GIT in a nutshell
alignan
 
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
Iván López Martín
 

Similar to Git Basics (Professionals) (20)

Git_real_slides
Git_real_slidesGit_real_slides
Git_real_slides
Khanh NL-bantoilatoi
 
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
Brian K. Vagnini
 
Git Concepts, Commands and Connectivity
Git Concepts, Commands and ConnectivityGit Concepts, Commands and Connectivity
Git Concepts, Commands and Connectivity
Raja Soundaramourty
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
Aleksey Asiutin
 
Git and github 101
Git and github 101Git and github 101
Git and github 101
Senthilkumar Gopal
 
Loading...git
Loading...gitLoading...git
Loading...git
Rafael García
 
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
E Carter
 
Introduction to Git for Artists
Introduction to Git for ArtistsIntroduction to Git for Artists
Introduction to Git for Artists
David Newbury
 
GitSetupLinux
GitSetupLinuxGitSetupLinux
GitSetupLinux
Shubham Verma
 
Working with Git
Working with GitWorking with Git
Working with Git
Pete Nicholls
 
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 git
Sid Anand
 
Phishing url detection: A real - case scenario through login URLs
Phishing url detection: A real - case scenario through login URLsPhishing url detection: A real - case scenario through login URLs
Phishing url detection: A real - case scenario through login URLs
dhanushalladi51
 
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
 
簡單介紹git
簡單介紹git簡單介紹git
簡單介紹git
Grace Chien
 
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
Matt Gauger
 
Git Started With Git
Git Started With GitGit Started With Git
Git Started With Git
Nick Quaranto
 
Understanding about git
Understanding about gitUnderstanding about git
Understanding about git
Sothearin 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 GitHub
DSC GVP
 
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
Brian K. Vagnini
 
Git Concepts, Commands and Connectivity
Git Concepts, Commands and ConnectivityGit Concepts, Commands and Connectivity
Git Concepts, Commands and Connectivity
Raja 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 Git
E Carter
 
Introduction to Git for Artists
Introduction to Git for ArtistsIntroduction to Git for Artists
Introduction to Git for Artists
David 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 git
Sid Anand
 
Phishing url detection: A real - case scenario through login URLs
Phishing url detection: A real - case scenario through login URLsPhishing url detection: A real - case scenario through login URLs
Phishing url detection: A real - case scenario through login URLs
dhanushalladi51
 
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 2010
Matt Gauger
 
Git Started With Git
Git Started With GitGit Started With Git
Git Started With Git
Nick Quaranto
 
Understanding about git
Understanding about gitUnderstanding about git
Understanding about git
Sothearin 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 GitHub
DSC GVP
 
Ad

More from bryanbibat (20)

Hd 10 japan
Hd 10 japanHd 10 japan
Hd 10 japan
bryanbibat
 
Static Sites in Ruby
Static Sites in RubyStatic Sites in Ruby
Static Sites in Ruby
bryanbibat
 
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.0
bryanbibat
 
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 Learning
bryanbibat
 
Lambda Expressions in Java 8
Lambda Expressions in Java 8Lambda Expressions in Java 8
Lambda Expressions in Java 8
bryanbibat
 
Preparing for the WebGeek DevCup
Preparing for the WebGeek DevCupPreparing for the WebGeek DevCup
Preparing for the WebGeek DevCup
bryanbibat
 
Productive text editing with Vim
Productive text editing with VimProductive text editing with Vim
Productive text editing with Vim
bryanbibat
 
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 Technologies
bryanbibat
 
Virtualization
VirtualizationVirtualization
Virtualization
bryanbibat
 
Some Myths in Software Development
Some Myths in Software DevelopmentSome Myths in Software Development
Some Myths in Software Development
bryanbibat
 
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
bryanbibat
 
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
bryanbibat
 
Ruby and Rails by example
Ruby and Rails by exampleRuby and Rails by example
Ruby and Rails by example
bryanbibat
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
bryanbibat
 
before you leap
before you leapbefore you leap
before you leap
bryanbibat
 
Static Sites in Ruby
Static Sites in RubyStatic Sites in Ruby
Static Sites in Ruby
bryanbibat
 
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.0
bryanbibat
 
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 Learning
bryanbibat
 
Lambda Expressions in Java 8
Lambda Expressions in Java 8Lambda Expressions in Java 8
Lambda Expressions in Java 8
bryanbibat
 
Preparing for the WebGeek DevCup
Preparing for the WebGeek DevCupPreparing for the WebGeek DevCup
Preparing for the WebGeek DevCup
bryanbibat
 
Productive text editing with Vim
Productive text editing with VimProductive text editing with Vim
Productive text editing with Vim
bryanbibat
 
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 Technologies
bryanbibat
 
Virtualization
VirtualizationVirtualization
Virtualization
bryanbibat
 
Some Myths in Software Development
Some Myths in Software DevelopmentSome Myths in Software Development
Some Myths in Software Development
bryanbibat
 
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
bryanbibat
 
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
bryanbibat
 
Ruby and Rails by example
Ruby and Rails by exampleRuby and Rails by example
Ruby and Rails by example
bryanbibat
 
before you leap
before you leapbefore you leap
before you leap
bryanbibat
 
Ad

Recently uploaded (20)

TrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business ConsultingTrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business Consulting
Trs Labs
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
Alan Dix
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
TrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business ConsultingTrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business Consulting
Trs Labs
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
Alan Dix
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 

Git Basics (Professionals)