A presentation on Ruby on Rails & Version Control. It takes us through the Ruby language, Rails framework and the various conventions and methodologies used while using it for development purposes. The presentation then moves on to Version Control, explaining the need for it and the process of version control, ending the presentation with a comparison between Centralized & Distributed Version Control Systems.
Short presentation about how contexts can be harmful to software development. Solution to those problems and a short brief about most used branch workflows
Git 101: Force-sensitive to Jedi padawanJames Ford
What is Git? What does it do, how does it work, how does it fit into my workflow?
If you've ever wondered about the answers to any of those things, this session is designed for you, my friend.
Starting with the assumption of no prior knowledge of Git or even of version control, we'll cover the technology at a theoretical level, its manifestation in your projects in the physical level, and your development workflow at the practical level - by which time you'll be ready to step out into the world, secure in your knowledge of what the heck Git is, and ready to use it in your projects - and you'll marvel at how you ever worked without it.
A Basic Git intro presentation for SVN long timers doing their first steps in Git.
This presentation is meant to clear up most of the basic concepts which cause confusion with developers using Git as if it was an SVN.
A presentation on Ruby on Rails & Version Control. It takes us through the Ruby language, Rails framework and the various conventions and methodologies used while using it for development purposes. The presentation then moves on to Version Control, explaining the need for it and the process of version control, ending the presentation with a comparison between Centralized & Distributed Version Control Systems.
Short presentation about how contexts can be harmful to software development. Solution to those problems and a short brief about most used branch workflows
Git 101: Force-sensitive to Jedi padawanJames Ford
What is Git? What does it do, how does it work, how does it fit into my workflow?
If you've ever wondered about the answers to any of those things, this session is designed for you, my friend.
Starting with the assumption of no prior knowledge of Git or even of version control, we'll cover the technology at a theoretical level, its manifestation in your projects in the physical level, and your development workflow at the practical level - by which time you'll be ready to step out into the world, secure in your knowledge of what the heck Git is, and ready to use it in your projects - and you'll marvel at how you ever worked without it.
A Basic Git intro presentation for SVN long timers doing their first steps in Git.
This presentation is meant to clear up most of the basic concepts which cause confusion with developers using Git as if it was an SVN.
Javahispano y Paradigma Tecnológico organizan un un seminario sobre una comparativa de sistemas de versionado: Subversion vs. Git.
Seminario presentado por Mariano Navas el 29 de Mayo de 2013 en UPM.
Dentro del mundo de los sistemas de control de versiones tenemos dos grandes grupos: los centralizados y los distribuidos. Subversion es en buena medida el representante más notable en el grupo de los centralizados. En los distribuidos git se está imponiendo como la tendencia.
Más información sobre el seminario:
http://www.paradigmatecnologico.com/seminarios/git-vs-subversion-cuando-utilizar-uno-u-otro/
Vídeo youtube: https://www.youtube.com/watch?v=nR5L3sJRp_c
¿Quieres saber más?
http://www.paradigmatecnologico.com
Advanced Configuration Management with Config Split et al.Nuvole
So you know how to use configuration management in Drupal 8. It works great for its intended use case but you have more advanced needs and Drupal core and drush don’t really help you? You read or write blog posts pointing out shortcomings of Drupals configuration management?
Configuration Split and its friends will jump in and help with almost all your Configuration Management struggles. Some configuration needs to exist only in some environments, like development modules? Your client edits some configuration on the production site? You have two sites that are almost the same but not exactly? You checked out configuration split but didn’t get what it does?
At this session all your questions will be answered and you will love the configuration management in Drupal 8 even more. Next to Configuration Split and its road map we will also see some other solutions for other potential stumbling blocks, such as deploying configuration which depends on content or installing a site from existing configuration.
Modules covered:
Configuration Split (and Config Filter)
Configuration installer
Configuration Read-only mode
More modules briefly
Do You Git Your Code? Follow Simplified Gitflow Branching Model to Improve Pr...Geshan Manandhar
Simplified gitflow has only one perpetual branch master which decreases the complexity, only one ticket can be deployed and tested in any given environment like staging or production. When only one ticket is deployed on a given environment, it is very easy to trace a problem if it occurs. As the full gitflow, master is the stable branch which can be deployed to production anytime.
Real World Git Workflows - EclipseCon Europe 2013Nicola Paolucci
While Git is established in the Open Source world, we're only just seeing the emergence of DVCS in our daily jobs. How can DVCS enable us to collaborate in a traditional "enterprise" setting.
Atlassian has fully embraced DVCS and has started to build features into their suite of products to take advantage of this new and exciting paradigm.
The talk will dive deep into the successful git work flows used inside Atlassian. There is no size fit all for this topic and various effective processes can be devised and are in active used at our company.
The talk will also cover tools and techniques used to reduce friction during the development of features and bugfix releases like for example pre/post receive hooks and automatic merges.
Outline:
* Software Development Practices And DVCS
- Branch vs fork (single server/repo, vs forks)
- Code quality (pre-commit hook, pre-checkout hook, pre-receive, see below)
* Awesome Git Workflows Used Internally At Atlassian
- Continuous Delivery Branching model
- Product Releases Branching model
* Streamlining Your Git Process
- merge vs rebase
- Rebase as cleanup
- Meaningful merges
- hooks
. hooks in general
. Post-checkout checks
. pre-commit hooks
. Great Pre-receive and Post-receive hooks
- Automatic merges
* How does CI change when you move to git?
Over the last several years one of the biggest changes in how developers collaborate with each other has come through, of all things, their source control system. The adoption of Git has changed many of the patterns of software development.
A practical step-by-step guide to Git, taking you through each phase of a project and explaining the use of Git at each step of the development process. Expect lots of how-to, but also some how-not-to, to avoid going down the wrong path.
Communications Mining Series - Zero to Hero - Session 1DianaGray10
This session provides introduction to UiPath Communication Mining, importance and platform overview. You will acquire a good understand of the phases in Communication Mining as we go over the platform with you. Topics covered:
• Communication Mining Overview
• Why is it important?
• How can it help today’s business and the benefits
• Phases in Communication Mining
• Demo on Platform overview
• Q/A
Javahispano y Paradigma Tecnológico organizan un un seminario sobre una comparativa de sistemas de versionado: Subversion vs. Git.
Seminario presentado por Mariano Navas el 29 de Mayo de 2013 en UPM.
Dentro del mundo de los sistemas de control de versiones tenemos dos grandes grupos: los centralizados y los distribuidos. Subversion es en buena medida el representante más notable en el grupo de los centralizados. En los distribuidos git se está imponiendo como la tendencia.
Más información sobre el seminario:
http://www.paradigmatecnologico.com/seminarios/git-vs-subversion-cuando-utilizar-uno-u-otro/
Vídeo youtube: https://www.youtube.com/watch?v=nR5L3sJRp_c
¿Quieres saber más?
http://www.paradigmatecnologico.com
Advanced Configuration Management with Config Split et al.Nuvole
So you know how to use configuration management in Drupal 8. It works great for its intended use case but you have more advanced needs and Drupal core and drush don’t really help you? You read or write blog posts pointing out shortcomings of Drupals configuration management?
Configuration Split and its friends will jump in and help with almost all your Configuration Management struggles. Some configuration needs to exist only in some environments, like development modules? Your client edits some configuration on the production site? You have two sites that are almost the same but not exactly? You checked out configuration split but didn’t get what it does?
At this session all your questions will be answered and you will love the configuration management in Drupal 8 even more. Next to Configuration Split and its road map we will also see some other solutions for other potential stumbling blocks, such as deploying configuration which depends on content or installing a site from existing configuration.
Modules covered:
Configuration Split (and Config Filter)
Configuration installer
Configuration Read-only mode
More modules briefly
Do You Git Your Code? Follow Simplified Gitflow Branching Model to Improve Pr...Geshan Manandhar
Simplified gitflow has only one perpetual branch master which decreases the complexity, only one ticket can be deployed and tested in any given environment like staging or production. When only one ticket is deployed on a given environment, it is very easy to trace a problem if it occurs. As the full gitflow, master is the stable branch which can be deployed to production anytime.
Real World Git Workflows - EclipseCon Europe 2013Nicola Paolucci
While Git is established in the Open Source world, we're only just seeing the emergence of DVCS in our daily jobs. How can DVCS enable us to collaborate in a traditional "enterprise" setting.
Atlassian has fully embraced DVCS and has started to build features into their suite of products to take advantage of this new and exciting paradigm.
The talk will dive deep into the successful git work flows used inside Atlassian. There is no size fit all for this topic and various effective processes can be devised and are in active used at our company.
The talk will also cover tools and techniques used to reduce friction during the development of features and bugfix releases like for example pre/post receive hooks and automatic merges.
Outline:
* Software Development Practices And DVCS
- Branch vs fork (single server/repo, vs forks)
- Code quality (pre-commit hook, pre-checkout hook, pre-receive, see below)
* Awesome Git Workflows Used Internally At Atlassian
- Continuous Delivery Branching model
- Product Releases Branching model
* Streamlining Your Git Process
- merge vs rebase
- Rebase as cleanup
- Meaningful merges
- hooks
. hooks in general
. Post-checkout checks
. pre-commit hooks
. Great Pre-receive and Post-receive hooks
- Automatic merges
* How does CI change when you move to git?
Over the last several years one of the biggest changes in how developers collaborate with each other has come through, of all things, their source control system. The adoption of Git has changed many of the patterns of software development.
A practical step-by-step guide to Git, taking you through each phase of a project and explaining the use of Git at each step of the development process. Expect lots of how-to, but also some how-not-to, to avoid going down the wrong path.
Communications Mining Series - Zero to Hero - Session 1DianaGray10
This session provides introduction to UiPath Communication Mining, importance and platform overview. You will acquire a good understand of the phases in Communication Mining as we go over the platform with you. Topics covered:
• Communication Mining Overview
• Why is it important?
• How can it help today’s business and the benefits
• Phases in Communication Mining
• Demo on Platform overview
• Q/A
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
Removing Uninteresting Bytes in Software FuzzingAftab Hussain
Imagine a world where software fuzzing, the process of mutating bytes in test seeds to uncover hidden and erroneous program behaviors, becomes faster and more effective. A lot depends on the initial seeds, which can significantly dictate the trajectory of a fuzzing campaign, particularly in terms of how long it takes to uncover interesting behaviour in your code. We introduce DIAR, a technique designed to speedup fuzzing campaigns by pinpointing and eliminating those uninteresting bytes in the seeds. Picture this: instead of wasting valuable resources on meaningless mutations in large, bloated seeds, DIAR removes the unnecessary bytes, streamlining the entire process.
In this work, we equipped AFL, a popular fuzzer, with DIAR and examined two critical Linux libraries -- Libxml's xmllint, a tool for parsing xml documents, and Binutil's readelf, an essential debugging and security analysis command-line tool used to display detailed information about ELF (Executable and Linkable Format). Our preliminary results show that AFL+DIAR does not only discover new paths more quickly but also achieves higher coverage overall. This work thus showcases how starting with lean and optimized seeds can lead to faster, more comprehensive fuzzing campaigns -- and DIAR helps you find such seeds.
- These are slides of the talk given at IEEE International Conference on Software Testing Verification and Validation Workshop, ICSTW 2022.
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Unlocking Productivity: Leveraging the Potential of Copilot in Microsoft 365, a presentation by Christoforos Vlachos, Senior Solutions Manager – Modern Workplace, Uni Systems
Dr. Sean Tan, Head of Data Science, Changi Airport Group
Discover how Changi Airport Group (CAG) leverages graph technologies and generative AI to revolutionize their search capabilities. This session delves into the unique search needs of CAG’s diverse passengers and customers, showcasing how graph data structures enhance the accuracy and relevance of AI-generated search results, mitigating the risk of “hallucinations” and improving the overall customer journey.
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024Neo4j
Neha Bajwa, Vice President of Product Marketing, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfPaige Cruz
Monitoring and observability aren’t traditionally found in software curriculums and many of us cobble this knowledge together from whatever vendor or ecosystem we were first introduced to and whatever is a part of your current company’s observability stack.
While the dev and ops silo continues to crumble….many organizations still relegate monitoring & observability as the purview of ops, infra and SRE teams. This is a mistake - achieving a highly observable system requires collaboration up and down the stack.
I, a former op, would like to extend an invitation to all application developers to join the observability party will share these foundational concepts to build on:
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
In this presentation, we examine the challenges and limitations of relying too heavily on PHP frameworks in web development. We discuss the history of PHP and its frameworks to understand how this dependence has evolved. The focus will be on providing concrete tips and strategies to reduce reliance on these frameworks, based on real-world examples and practical considerations. The goal is to equip developers with the skills and knowledge to create more flexible and future-proof web applications. We'll explore the importance of maintaining autonomy in a rapidly changing tech landscape and how to make informed decisions in PHP development.
This talk is aimed at encouraging a more independent approach to using PHP frameworks, moving towards a more flexible and future-proof approach to PHP development.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
3. In it's purest non-VCS specific definition
a line of 1+ changes that diverges from another one
1 2 3 4 5 6
1 2 3 4 6 7
5 8 9
I'm a branch!
4. or why you don't want to be forced into a
linear history
Why branch?
5. Commit races
are a thing of every day with linear history
1 2 3 4
5
6
Hey!, my changes
had to go first!
Deal with it!
(and by "it" I mean merge conflicts)
7. Merging hell
Branching is good, until you forget to merge early. Branch way more and you
will be merging more frequently and with less bad consequences.
1 2 3 4 126
5 94 ?
Uh, oh!... long-lived branches
8. or why merging has to kick-ass by design
Why are branches
important to DVCSs?
9. Saved a new change?
congratulations... you also created a new branch (one per clone)
Blessed Repository
Clones
Clone A
Clone B
Clone C
1 2 3
3 4 5
3 4 5 6
3 4
T I M E
cloning happens three times at revision 3
10. Now how do I get my work back to the main repository?
well, you merge
1 2 3 A:4 A:5
B:4 B:5 B:6
TIME
B:7*
C:4 C:5*
New commit after merging
Blessed Repository
merge
merge
branch
branch
First one to push back will not create a branch
11. And if I don't want to merge?
...you don't, but you create heads
1 2 3 A:4 A:5
B:4 B:5 B:6
TIME
C:4
Heads
Blessed Repository
Everything being worked at the default branch
(can be considered as a "trunk")
12. If these are branches, how come
they have no name, huh?
● These are called "anonymous branches"
● They are created implicitly each time you clone
○ When repositories are formally disconnected
○ ...and as a consequence two new revisions can have the same parent
○ Normally one exists per developer (as they work)
● You don't have to care about them
○ They are frequently merged:
■ Each time you push, Mercurial notifies you should pull and merge
■ You can regularly pull and merge locally to keep your work in sync
○ Numbering is relative (sha1 hashes are tracked by Mercurial)
● They give you breathing room to work
○ Without having to worry about creating named branches
○ If you are already working in a named branch
15. Using clones
Not really recommended as real branching, but is easy to cleanup
Local Repository Clones for experimenting
Clone A
Clone B
Clone C
1 2 3
3 4 5
3 4 5 6
3 4
16. Cloning to branch
● Not remotely recommended as it can be just as
convenient as working with any other branching method
○ But folks still do it
○ No need to know about branching concepts
○ No need to clone from the remote repository, or even locally, just copy
& paste the repository folder
○ Integrating work back to your main clone involves the same
● Use cases (or why people do it)
○ Informal throw-away experimentation
○ Working with two branches at the same time (without wanting to wait
for the 2-3 second update)
● Understand it, but preferably don't do it
18. How do you create one?
name it, then commit it
1 2 4
5
DEFAULT
hg commit
hg update defaulthg branch my_branch
2
31
MY_BRANCH
hg update my_branch4
Executing hg branches should list "default" and "my_branch"
Executing hg branch should display the current branch as "my_branch" after 4
19. How do you merge them?
Easy as 1-2-3
1 2 4
5
DEFAULT
MY_BRANCH 6
Do an hg update <branch or revision> to move the branch you want to merge another to.
Do an hg merge <branch or revision> to merge another branch into the current one.
hg update my_branch1
hg merge default2
hg commit3
20. What do you do when you finish with it?
just add the --close-branch option when you commit
1 2 4
5
DEFAULT
hg commit --close-branch1
MY_BRANCH 6 7
my_branch will no longer be listed in hg branches, but you
can reopen it by creating a new normal commit
21. Named branches
● Standard way of branching
● Branches always get all pushed at the same time unless
specified
● Recommendable to have a branch policy and/or naming
convention, e.g.:
○ Types:
■ Bugfix branches should pull frequently from the baseline and be
short-lived
■ Feature branches can be long-lived
■ Hotfix branches should be merged before other branches
○ Naming
<type>-(<ticket system>_<ticket number>)?-<description>
● Named branches are the only ones that use the "branch" command
30. Anonymous branching
● The branches that just happen by
themselves.
● Can be made intentionally/forcefully by
changing to a past revision and committing
from it
● Anonymous branches can be counted by
counting named branches and subtracting
the number of heads
● Heads can be unmade easily (merge)
● Not very sane to do anonymous branching
locally
32. Making anonymous branching sane
and they can be private (i.e. not pushed by default)
1 3 4
5
DEFAULT
hg commit
hg update -r 3
hg commit
1
2
3
hg bookmark my_stuff4
my_stuff
33. And using them is as easy as with named branches
anonymous branches without having to track revision numbers
1 3 4
5
DEFAULT
hg update default5
hg update my_stuff6
my_stuff
5
hg commit7
the "my_stuff"
bookmark moves
automatically when
you commit
...updating to a branch
...updating to a bookmark
34. Bookmarks
● A good local replacement for git's "private local
branching"
○ Can be deleted
○ But keeping the history
○ Can be shared (pushed/pulled) or not
● Bookmarks are not branches
○ They just give a name to anonymous branches
36. No need to worry about them, 99% of the
time, but you should understand what they
mean
Heads
37. Don't lose your heads
...because there should be one head per branch (anonymous or named)
1 2 4
5
DEFAULT
MY_BRANCH
Executing hg heads should list 4 & 5 as heads
heads
38. Having 1+ heads in a named branch means there are pending merges
probably someone used hg push -f, and you should go hit them on the head
(the one above their shoulders)
1 2 4
5
DEFAULT
MY_BRANCH
Executing hg heads should list 4, 6 & 7 as heads,
6 & 7 belonging to my_branch
heads
6
7
39. Having a merged head in a given branch means the branch is inactive
...meaning it is abandoned, since it's changes are no longer unique to the
named branch (aka has no new code)
1 2 4
5
DEFAULT
MY_BRANCH
Executing hg branches should mark my_branch as "inactive"
Committing again on my_branch makes the branch active again
heads
6
inactive branch
41. Feature branching
● Make a branch for each feature, refactor,
experiment, bug, hotfix, etc.
● A fool-proof integration workflow
○ While at your feature branch, keep pulling and
merging the common baseline into it as often as
possible. Deal with merging often.
○ When finished with your feature branch:
■ Merge baseline int it one last time
■ Test/hack ad-nauseam
■ Close branch
■ Change to baseline and merge your branch into it
● How is this different in DVCS?:
○ It is a lot less scary because you can screw up
42. Feature branching
● Benefits:
○ Code-review is easy, even if you decided to do many
commits
○ All your changes are "pull-request" ready in such a
way that is easier to think about (and even
document)
○ You can multi-task and use branches to stashaway
your changes
○ Collaboration with peers is simplified
● You and branches are now BFFs ♥
You will wonder where branches were all this time and how could you live
without them (oh... yeah, copy/pasting your project directory)
43. ... I want private local branching like in Git
What about "private local
branching"?
44. Mercurial's bookmarks == Git's branches
Because both behave like pointers, they are private by
default and can be deleted without any trouble.
Mercurial repository cloned from source Git repository through hg-git
Git repository displaying all branches
45. Set phases to secret!
Mercurial phases help you to go into "private mode" since in Mercurial's
philosophy everything is public by default. In Git, things are private by default.
1 2 3
4
DEFAULT
MY_BRANCH 5
6
public
draft
7
secret
MY_SECRET_BRANCH
hg commit
hg phase --secret --force
1
2
Next commits are secret, so they
are not shared by default,
therefore you can safely run
destructive operations on such a
branch
hg commit3
46. Set phases to secret!
Secret changes are private, so nobody cares what you do to them. Make the
first commit in a branch secret and the branch will be secret from there on.
1 2 3
4
DEFAULT
MY_BRANCH 5
6
public
draft
7
secret
MY_SECRET_BRANCH
hg push1
Push won't share your
branch at this point!
47. Set phases to secret!
Finished with your branch and are confident about sharing it?, make the latest
commit in the branch (i.e. the head) public and the phase will back-propagate
1 2 3
4
DEFAULT
MY_BRANCH 5
6
public
draft
7
secret
MY_SECRET_BRANCH
hg push
hg phase --draft
1
3Liked your branch?, good! =D,
make it public, then push
hg update -r 72
Push won't share your
branch at this point!
hg push4
Push shares your
branch now!
48. Set phases to secret!
If your experiment didn't work or you just want to delete your branch, just do it.
If it is secret from the start you never pushed it, so don't worry about stripping
1 2 3
4
DEFAULT
MY_BRANCH 5
6
public
draft
7
secret
MY_SECRET_BRANCH
hg push1
Didn't like your branch?, just
leave it like that or delete it
hg strip -r 62
Push won't share your
branch at this point!
50. Conclusions
● Everybody branches and merges even without knowing
it
○ With anonymous branches
○ Merging is very frequent
○ ...and this information is taken into account for dealing with
conflicts
● Creating & merging branches does not affect others
○ This takes out the fear factor
○ Integration can happen away from the blessed repo, at several levels
● Branching becomes fun when experimenting locally
● Developers can do the integrator's work at a lower level