SlideShare a Scribd company logo
@durdn#DevoxxPL
Platinum Sponsors:
Transformative Git Practices
Nicola Paolucci
New Techniques for Hyper-productivity
git push --force
Today we’ll cover some powerful Git goodies
Worktree clones Painless sub-projectsThe magic of --fixup
For when you have to
work concurrently on
multiple long running
branches
You can use git subtree
to handle external
libraries in a clean and
efficient way
A powerful technique to
cleanup your history
before sharing with it the
team
and a final, cool topic…
@durdn
Git Worktree
Local clones for parallel work
The old simple way: branch, commit, push
master
HEAD
HEAD
new-feature
git checkout -b new-feature
Uns
@durdn
It’s clumsy to work in parallel
on multiple branches
Or are a pro at using
the Stash (which is
cool btw)
You either work
around it having
intermediate WIP
commits
It leaves hanging
uncommitted work
lying around
To work on 2+ branches at the same time
@durdn
git stash is awesome
It’s a way to temporarily store your unsaved work
on a stack of patches
stash@{0}
stash@{1}
stash@{2}
stash@{3}
git stash save
@durdn
But there’s a new way: git worktree
Available since Git 2.5
git worktree creates additional clones inside your project
Add a new worktree
git worktree add 
-b feature/PRJ-1-new-fancy-button 
fancy-button
Branch to checkout in clone
Folder where to checkout
It shows the folder
git worktree list - shows the worktrees created
And the branch is pointing at
Where the additional cloned has
been checked out
So that you have an immediate
overview of all the trees you have
created
git worktree list$
/Users/np/p/dac f1f7f8b [master]
/Users/np/p/dac/git-the-all-new-modern-workflow 7fe9096 [blog/git-…-new-modern-workflow]
/Users/np/p/dac/provision-a-cluster-with-rancher b4b84fb [blog/provision-…-with-rancher]
/Users/np/p/dac/static-site-with-pipelines-and-middleman d6bd9fd [blog/static-site-…-middleman]
git worktree prune - once you’re done with a clone
git worktree prune$
rm -rf fancy-button$
Demo Time!
Let’s see how “git worktree” works in
practice
Replace the normal branching?Keep working while testingBetter work in parallel
Why git worktree is a great choice
Having multiple clones
with all the branches
you’re working on
available in your repo is
a big win.
If you have a big battery
of tests which are slow
to run, you can run them
in a worktree clone while
you keep working.
When you get used to
worktrees, they become
very natural for any
feature branch work.
@durdn
The magic of --fixup
Smooth history cleanup for perfectionists
@durdn
It’s great to work in small chunks
@durdn
There’s a tension between…
Commits as
throw away
save points
Commits as a
polished
meaningful way
to communicate
a feature
@durdn
There’s a way to square the circle
@durdn
Helps you clean up your private branches
before publishing them interactively
What is an
--interactive rebase?
master
feature
First step: Turn on the “autosquash” feature
git config --global rebase.autosquash true$
@durdn
Work in small throwaway bits, use
commits as save points
as you please
Fixup
Annotate your raw commits with “--fixup” or “--squash”
Squash
Use fixup to quickly fix
problems in a commit,
without the need to change
or add to the commit
message
For additions to a commit
where you want to add also
an additional note to the
commit message
git commit --fixup <commit>$
git commit --squash -m”Add to feature” <commit>$
Fixup
Annotate your raw commits with “--fixup” or “--squash”
Squash
Use fixup to quickly fix
problems in a commit,
without the need to change
or add to the commit
message
For additions to a commit
where you want to add also
an additional note to the
commit message
git commit --fixup :/<string pattern>$
git commit --fixup :/PRJ-123$
@durdn
Rebase is now pre-filled and easy
Demo Time!
Let’s see how “--fixup” and “--squash” work
in practice
Let’s talk about project dependencies
git subtree
Extract project
Alternative to git submodule to handle
external dependencies.
Inject dependency
It allows you to inject an external
project into a sub-folder
Introduced in 1.7.11
It can be also used to extract a
sub-folder as separate project
Clean integration pointsStores in regular commitsNo training
When and why is git subtree a great choice
Does not require your
entire team to be trained
in the use of the
command
The command stores
the external
dependency in regular
Git commits. Squashing
the history optionally.
It makes it easy to see
when integrations
happened and makes it
easy to revert them.
Syntax to inject a project
Command to inject project
git subtree add 
--prefix target-folder 
https://bitbucket.org/team/sub.git 
master --squash
Folder where to insert code
Repository URL
v1.1
Under the hood of git subtree
commit ab54c4e0b75c3107e3e773ab9b39268abddca002
Author: Nicola Paolucci <npaolucci@atlassian.com>
Date: Tue Sep 29 15:27:35 2015 +0200
Squashed ‘src/sub-project‘ content from commit df563ed
git-subtree-dir: src/sub-project
git-subtree-split: df563ed15fa6…6b2e95d3
Result of git subtree add
commit 8fb507baf7b270c30c822b27e262d0b44819b4c5
Merge: 606cd3e ab54c4e
Author: Nicola Paolucci <npaolucci@atlassian.com>
Date: Tue Sep 29 15:27:35 2015 +0200
Merge commit 'ab54c4e0b75c3107e3e773ab9b39268abddca002' as '.vim/bundle/fireplace'
commit ab54c4e0b75c3107e3e773ab9b39268abddca002
Author: Nicola Paolucci <npaolucci@atlassian.com>
Date: Tue Sep 29 15:27:35 2015 +0200
Squashed '.vim/bundle/fireplace/' content from commit df563ed
git-subtree-dir: .vim/bundle/fireplace
git-subtree-split: df563ed15fa685ce2508bf16b3ca7e176b2e95d3
To keep the sub-project up to date
git subtree pull 
--prefix target-folder 
https://bitbucket.org/team/sub.git 
master --squash
Command to pull project
Folder where to insert code
Repository URL
v1.5
Under the hood of git subtree
commit ab54c4e0b75c3107e3e773ab9b39268abddca002
Author: Nicola Paolucci <npaolucci@atlassian.com>
Date: Tue Sep 29 15:27:35 2015 +0200
Squashed ‘src/sub-project‘ content from commit df563ed
git-subtree-dir: src/sub-project
git-subtree-split: df563ed15fa6…6b2e95d3
Find the symbolic ref matching a hash (sha-1)
sha-1 of last commit pulled
Git plumbing to list all remote refs
Repository URL
git ls-remote https://bitbucket.org/team/sub.git | grep df563ed
df563ed15fa685ce2508bf16b3ca7e176b2e95d3 v1.1
5eaff1232acedeca565er7e1333234dacccebfff v1.5
git ls-remote https://bitbucket.org/team/sub.git | grep <sha-1>
Aliases to make your life easier!
[alias]
sba = "!f() { git subtree add --prefix $2 $1 master --squash; }; f"
sbu = "!f() { git subtree pull --prefix $2 $1 master --squash; }; f"
Alias section of your .gitconfig
http://bit.do/git-aliases
How to use the aliases
git sba <repo URL> <destination-folder>
git sba https://bitbucket.org/team/sub.git src/sub
When everyone in the
team must work on
sub-projects
When you have
constant updates to
your dependencies
When you have many
dependencies
When NOT to use git subtree
@durdn
For complex project dependencies
Use a dependency tool.
Really.
Alternatives?
Read my rant
on project
dependencies
http://bit.do/git-dep
@durdn
How to extract a project
Let’s learn how to use subtree split
Git subtree to extract a project
Command to split out project
git subtree split 
--prefix my/project/ 
--branch extracted
Folder prefix to extract
where we store it
Push to new remote
We can remove the contents of the
folder from the repo
Import extracted branch
Initialise a new repo and import the
extracted branch
Remove from old repo
After we imported the code we can
push it to a new repository
git rm -rf my/project
git init
git pull ../path/ extracted
git remote add origin …
git push origin -u master
@durdn
Have a Pipeline with your repo
Build your project in the cloud
• Big cool statistic
• 2,56
9
• Add-Ons in Marketplace
• Big cool statistic
• 2,56
9
• Add-Ons in Marketplace
• Big cool statistic
• 2,56
9
• Add-Ons in Marketplace
Deploy to any of these and more!
…
NICOLA PAOLUCCI • ATLASSIAN • @DURDN
Twitter: @durdn
http://bit.do/pipelines
We’ve covered some powerful Git goodies
Worktree clones Painless sub-projectsThe magic of --fixup
For when you have to
work concurrently on
multiple long running
branches
You can use git subtree
to handle external
libraries in a clean and
efficient way
A powerful technique to
cleanup your history
before sharing with it the
team
Thank you! Follow me @durdn
NICOLA PAOLUCCI • ATLASSIAN • @DURDN
Twitter: @durdnhttp://bit.do/pipelines
Thank you! Follow me @durdn

More Related Content

What's hot (20)

PPTX
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
Docker, Inc.
 
PDF
Docker From Scratch
Giacomo Vacca
 
PDF
What's New in Docker 1.12 by Nishant Totla for Docker SF Meetup 08.03.16
Docker, Inc.
 
PDF
Commit to excellence - Java in containers
Red Hat Developers
 
PDF
Docker by Example - Basics
Ganesh Samarthyam
 
PDF
DCEU 18: Tips and Tricks of the Docker Captains
Docker, Inc.
 
PDF
Automate App Container Delivery with CI/CD and DevOps
Daniel Oh
 
PDF
On-Demand Image Resizing from Part of the monolith to Containerized Microserv...
Docker, Inc.
 
PDF
Building kubectl plugins with Quarkus | DevNation Tech Talk
Red Hat Developers
 
PPTX
Learn docker in 90 minutes
Larry Cai
 
PDF
Orchestrating Docker with OpenStack
Erica Windisch
 
PDF
Docker on Google App Engine
Docker, Inc.
 
PDF
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
ZeroTurnaround
 
PDF
Docker - From Walking To Running
Giacomo Vacca
 
PDF
Deploying Docker (Provisioning /w Docker + Chef/Puppet) - DevopsDaysPGH
Erica Windisch
 
PDF
Building a smarter application Stack by Tomas Doran from Yelp
dotCloud
 
PDF
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
dotCloud
 
PDF
Docker for Java Developers
NGINX, Inc.
 
PPTX
Immutable infrastructure with Docker and EC2
dotCloud
 
PDF
Containerizing a Web Application with Vue.js and Java
Jadson Santos
 
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
Docker, Inc.
 
Docker From Scratch
Giacomo Vacca
 
What's New in Docker 1.12 by Nishant Totla for Docker SF Meetup 08.03.16
Docker, Inc.
 
Commit to excellence - Java in containers
Red Hat Developers
 
Docker by Example - Basics
Ganesh Samarthyam
 
DCEU 18: Tips and Tricks of the Docker Captains
Docker, Inc.
 
Automate App Container Delivery with CI/CD and DevOps
Daniel Oh
 
On-Demand Image Resizing from Part of the monolith to Containerized Microserv...
Docker, Inc.
 
Building kubectl plugins with Quarkus | DevNation Tech Talk
Red Hat Developers
 
Learn docker in 90 minutes
Larry Cai
 
Orchestrating Docker with OpenStack
Erica Windisch
 
Docker on Google App Engine
Docker, Inc.
 
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
ZeroTurnaround
 
Docker - From Walking To Running
Giacomo Vacca
 
Deploying Docker (Provisioning /w Docker + Chef/Puppet) - DevopsDaysPGH
Erica Windisch
 
Building a smarter application Stack by Tomas Doran from Yelp
dotCloud
 
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
dotCloud
 
Docker for Java Developers
NGINX, Inc.
 
Immutable infrastructure with Docker and EC2
dotCloud
 
Containerizing a Web Application with Vue.js and Java
Jadson Santos
 

Viewers also liked (9)

PDF
A Scala Corrections Library
Paul Phillips
 
PPT
Lightning Talk: Running MongoDB on Docker for High Performance Deployments
MongoDB
 
PPTX
Future of ai on the jvm
Adam Gibson
 
PDF
Effective Actors
shinolajla
 
PDF
Scala Json Features and Performance
John Nestor
 
PDF
Stateful Distributed Stream Processing
Gyula Fóra
 
PDF
Advanced Git Techniques: Subtrees, Grafting, and Other Fun Stuff
Atlassian
 
PPT
What We (Don't) Know About the Beginning of the Universe
Sean Carroll
 
PPT
Gifford Lecture One: Cosmos, Time, Memory
Sean Carroll
 
A Scala Corrections Library
Paul Phillips
 
Lightning Talk: Running MongoDB on Docker for High Performance Deployments
MongoDB
 
Future of ai on the jvm
Adam Gibson
 
Effective Actors
shinolajla
 
Scala Json Features and Performance
John Nestor
 
Stateful Distributed Stream Processing
Gyula Fóra
 
Advanced Git Techniques: Subtrees, Grafting, and Other Fun Stuff
Atlassian
 
What We (Don't) Know About the Beginning of the Universe
Sean Carroll
 
Gifford Lecture One: Cosmos, Time, Memory
Sean Carroll
 
Ad

Similar to Transformative Git Practices (20)

PPTX
MakingGitWorkForYou
Kwen Peterson
 
PPTX
Gitlikeapro 2019
Jesús Miguel Benito Calzada
 
PPTX
Git more done
Kwen Peterson
 
PPTX
Git like a pro EDD18 - Full edition
Jesús Miguel Benito Calzada
 
PDF
GIT_training_SoftServeBulgaria2016
Peter Denev
 
KEY
Introduction to Git
Lukas Fittl
 
PPTX
git.pptx
YoussefBaoussous1
 
PPTX
Git One Day Training Notes
glen_a_smith
 
PPTX
Real-World Git
Rick Warren
 
PPTX
An introduction to Git
Muhil Vannan
 
PPTX
Git basic stanley hsiao 2010_12_15
Chen-Han Hsiao
 
PPTX
Git presentation bixlabs
Bixlabs
 
PPTX
Mastering GIT
Hasnaeen Rahman
 
PDF
Switching to Git
Stephen Yeargin
 
PDF
Embedded Systems: Lecture 12: Introduction to Git & GitHub (Part 3)
Ahmed El-Arabawy
 
ODP
Geecon11 - Git: a Gentle InTroduction
Bruno Bossola
 
PDF
Getting Git Right
Sven Peters
 
KEY
Git Tech Talk
Chris Johnson
 
PPTX
Git
IT Booze
 
PPTX
Git and git workflow best practice
Majid Hosseini
 
MakingGitWorkForYou
Kwen Peterson
 
Git more done
Kwen Peterson
 
Git like a pro EDD18 - Full edition
Jesús Miguel Benito Calzada
 
GIT_training_SoftServeBulgaria2016
Peter Denev
 
Introduction to Git
Lukas Fittl
 
Git One Day Training Notes
glen_a_smith
 
Real-World Git
Rick Warren
 
An introduction to Git
Muhil Vannan
 
Git basic stanley hsiao 2010_12_15
Chen-Han Hsiao
 
Git presentation bixlabs
Bixlabs
 
Mastering GIT
Hasnaeen Rahman
 
Switching to Git
Stephen Yeargin
 
Embedded Systems: Lecture 12: Introduction to Git & GitHub (Part 3)
Ahmed El-Arabawy
 
Geecon11 - Git: a Gentle InTroduction
Bruno Bossola
 
Getting Git Right
Sven Peters
 
Git Tech Talk
Chris Johnson
 
Git and git workflow best practice
Majid Hosseini
 
Ad

More from Nicola Paolucci (6)

PDF
The age of orchestration: from Docker basics to cluster management
Nicola Paolucci
 
PDF
Git Power Routines
Nicola Paolucci
 
PDF
Be a better developer with Docker (revision 3)
Nicola Paolucci
 
PDF
Be a happier developer with Docker: Tricks of the trade
Nicola Paolucci
 
PDF
Ninja Git: Save Your Master
Nicola Paolucci
 
PDF
Real World Git Workflows - EclipseCon Europe 2013
Nicola Paolucci
 
The age of orchestration: from Docker basics to cluster management
Nicola Paolucci
 
Git Power Routines
Nicola Paolucci
 
Be a better developer with Docker (revision 3)
Nicola Paolucci
 
Be a happier developer with Docker: Tricks of the trade
Nicola Paolucci
 
Ninja Git: Save Your Master
Nicola Paolucci
 
Real World Git Workflows - EclipseCon Europe 2013
Nicola Paolucci
 

Recently uploaded (20)

PDF
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
PPTX
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
PDF
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
PPTX
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
PPTX
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
PPTX
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PDF
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
PDF
Driver Easy Pro 6.1.1 Crack Licensce key 2025 FREE
utfefguu
 
PDF
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
PPTX
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
PPTX
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PPTX
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
PDF
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
PDF
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
PDF
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
PDF
Revenue streams of the Wazirx clone script.pdf
aaronjeffray
 
PDF
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
PPTX
Human Resources Information System (HRIS)
Amity University, Patna
 
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
Driver Easy Pro 6.1.1 Crack Licensce key 2025 FREE
utfefguu
 
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
Revenue streams of the Wazirx clone script.pdf
aaronjeffray
 
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
Human Resources Information System (HRIS)
Amity University, Patna
 

Transformative Git Practices

  • 1. @durdn#DevoxxPL Platinum Sponsors: Transformative Git Practices Nicola Paolucci New Techniques for Hyper-productivity
  • 3. Today we’ll cover some powerful Git goodies Worktree clones Painless sub-projectsThe magic of --fixup For when you have to work concurrently on multiple long running branches You can use git subtree to handle external libraries in a clean and efficient way A powerful technique to cleanup your history before sharing with it the team and a final, cool topic…
  • 5. The old simple way: branch, commit, push master HEAD HEAD new-feature git checkout -b new-feature Uns
  • 6. @durdn It’s clumsy to work in parallel on multiple branches
  • 7. Or are a pro at using the Stash (which is cool btw) You either work around it having intermediate WIP commits It leaves hanging uncommitted work lying around To work on 2+ branches at the same time
  • 8. @durdn git stash is awesome It’s a way to temporarily store your unsaved work on a stack of patches stash@{0} stash@{1} stash@{2} stash@{3} git stash save
  • 9. @durdn But there’s a new way: git worktree Available since Git 2.5
  • 10. git worktree creates additional clones inside your project Add a new worktree git worktree add -b feature/PRJ-1-new-fancy-button fancy-button Branch to checkout in clone Folder where to checkout
  • 11. It shows the folder git worktree list - shows the worktrees created And the branch is pointing at Where the additional cloned has been checked out So that you have an immediate overview of all the trees you have created git worktree list$ /Users/np/p/dac f1f7f8b [master] /Users/np/p/dac/git-the-all-new-modern-workflow 7fe9096 [blog/git-…-new-modern-workflow] /Users/np/p/dac/provision-a-cluster-with-rancher b4b84fb [blog/provision-…-with-rancher] /Users/np/p/dac/static-site-with-pipelines-and-middleman d6bd9fd [blog/static-site-…-middleman]
  • 12. git worktree prune - once you’re done with a clone git worktree prune$ rm -rf fancy-button$
  • 13. Demo Time! Let’s see how “git worktree” works in practice
  • 14. Replace the normal branching?Keep working while testingBetter work in parallel Why git worktree is a great choice Having multiple clones with all the branches you’re working on available in your repo is a big win. If you have a big battery of tests which are slow to run, you can run them in a worktree clone while you keep working. When you get used to worktrees, they become very natural for any feature branch work.
  • 15. @durdn The magic of --fixup Smooth history cleanup for perfectionists
  • 16. @durdn It’s great to work in small chunks
  • 18. Commits as throw away save points Commits as a polished meaningful way to communicate a feature
  • 19. @durdn There’s a way to square the circle
  • 20. @durdn Helps you clean up your private branches before publishing them interactively What is an --interactive rebase? master feature
  • 21. First step: Turn on the “autosquash” feature git config --global rebase.autosquash true$
  • 22. @durdn Work in small throwaway bits, use commits as save points as you please
  • 23. Fixup Annotate your raw commits with “--fixup” or “--squash” Squash Use fixup to quickly fix problems in a commit, without the need to change or add to the commit message For additions to a commit where you want to add also an additional note to the commit message git commit --fixup <commit>$ git commit --squash -m”Add to feature” <commit>$
  • 24. Fixup Annotate your raw commits with “--fixup” or “--squash” Squash Use fixup to quickly fix problems in a commit, without the need to change or add to the commit message For additions to a commit where you want to add also an additional note to the commit message git commit --fixup :/<string pattern>$ git commit --fixup :/PRJ-123$
  • 25. @durdn Rebase is now pre-filled and easy
  • 26. Demo Time! Let’s see how “--fixup” and “--squash” work in practice
  • 27. Let’s talk about project dependencies
  • 28. git subtree Extract project Alternative to git submodule to handle external dependencies. Inject dependency It allows you to inject an external project into a sub-folder Introduced in 1.7.11 It can be also used to extract a sub-folder as separate project
  • 29. Clean integration pointsStores in regular commitsNo training When and why is git subtree a great choice Does not require your entire team to be trained in the use of the command The command stores the external dependency in regular Git commits. Squashing the history optionally. It makes it easy to see when integrations happened and makes it easy to revert them.
  • 30. Syntax to inject a project Command to inject project git subtree add --prefix target-folder https://bitbucket.org/team/sub.git master --squash Folder where to insert code Repository URL v1.1
  • 31. Under the hood of git subtree commit ab54c4e0b75c3107e3e773ab9b39268abddca002 Author: Nicola Paolucci <[email protected]> Date: Tue Sep 29 15:27:35 2015 +0200 Squashed ‘src/sub-project‘ content from commit df563ed git-subtree-dir: src/sub-project git-subtree-split: df563ed15fa6…6b2e95d3
  • 32. Result of git subtree add commit 8fb507baf7b270c30c822b27e262d0b44819b4c5 Merge: 606cd3e ab54c4e Author: Nicola Paolucci <[email protected]> Date: Tue Sep 29 15:27:35 2015 +0200 Merge commit 'ab54c4e0b75c3107e3e773ab9b39268abddca002' as '.vim/bundle/fireplace' commit ab54c4e0b75c3107e3e773ab9b39268abddca002 Author: Nicola Paolucci <[email protected]> Date: Tue Sep 29 15:27:35 2015 +0200 Squashed '.vim/bundle/fireplace/' content from commit df563ed git-subtree-dir: .vim/bundle/fireplace git-subtree-split: df563ed15fa685ce2508bf16b3ca7e176b2e95d3
  • 33. To keep the sub-project up to date git subtree pull --prefix target-folder https://bitbucket.org/team/sub.git master --squash Command to pull project Folder where to insert code Repository URL v1.5
  • 34. Under the hood of git subtree commit ab54c4e0b75c3107e3e773ab9b39268abddca002 Author: Nicola Paolucci <[email protected]> Date: Tue Sep 29 15:27:35 2015 +0200 Squashed ‘src/sub-project‘ content from commit df563ed git-subtree-dir: src/sub-project git-subtree-split: df563ed15fa6…6b2e95d3
  • 35. Find the symbolic ref matching a hash (sha-1) sha-1 of last commit pulled Git plumbing to list all remote refs Repository URL git ls-remote https://bitbucket.org/team/sub.git | grep df563ed df563ed15fa685ce2508bf16b3ca7e176b2e95d3 v1.1 5eaff1232acedeca565er7e1333234dacccebfff v1.5 git ls-remote https://bitbucket.org/team/sub.git | grep <sha-1>
  • 36. Aliases to make your life easier! [alias] sba = "!f() { git subtree add --prefix $2 $1 master --squash; }; f" sbu = "!f() { git subtree pull --prefix $2 $1 master --squash; }; f" Alias section of your .gitconfig http://bit.do/git-aliases
  • 37. How to use the aliases git sba <repo URL> <destination-folder> git sba https://bitbucket.org/team/sub.git src/sub
  • 38. When everyone in the team must work on sub-projects When you have constant updates to your dependencies When you have many dependencies When NOT to use git subtree
  • 39. @durdn For complex project dependencies Use a dependency tool. Really.
  • 40. Alternatives? Read my rant on project dependencies http://bit.do/git-dep
  • 41. @durdn How to extract a project Let’s learn how to use subtree split
  • 42. Git subtree to extract a project Command to split out project git subtree split --prefix my/project/ --branch extracted Folder prefix to extract where we store it
  • 43. Push to new remote We can remove the contents of the folder from the repo Import extracted branch Initialise a new repo and import the extracted branch Remove from old repo After we imported the code we can push it to a new repository git rm -rf my/project git init git pull ../path/ extracted git remote add origin … git push origin -u master
  • 44. @durdn Have a Pipeline with your repo Build your project in the cloud
  • 45. • Big cool statistic • 2,56 9 • Add-Ons in Marketplace
  • 46. • Big cool statistic • 2,56 9 • Add-Ons in Marketplace
  • 47. • Big cool statistic • 2,56 9 • Add-Ons in Marketplace
  • 48. Deploy to any of these and more! …
  • 49. NICOLA PAOLUCCI • ATLASSIAN • @DURDN Twitter: @durdn http://bit.do/pipelines
  • 50. We’ve covered some powerful Git goodies Worktree clones Painless sub-projectsThe magic of --fixup For when you have to work concurrently on multiple long running branches You can use git subtree to handle external libraries in a clean and efficient way A powerful technique to cleanup your history before sharing with it the team
  • 51. Thank you! Follow me @durdn
  • 52. NICOLA PAOLUCCI • ATLASSIAN • @DURDN Twitter: @durdnhttp://bit.do/pipelines Thank you! Follow me @durdn