Devops for Growth
107.5K views | +8 today
Follow
Devops for Growth
For Product Owners/Product Managers and Scrum Teams: Growth Hacking, Devops, Agile, Lean for IT, Lean Startup, customer centric, software quality...
Curated by Mickael Ruau
Your new post is loading...
Your new post is loading...

Popular Tags

Current selected tag: 'gestion de version'. Clear
Scooped by Mickael Ruau
Scoop.it!

8 Version Control Best Practices | Perforce

8 Version Control Best Practices | Perforce | Devops for Growth | Scoop.it
8 Version Control Best Practices

Here are 8 of the most critical version control best practices.
Commit Changes Atomically

One best practice is to commit changes atomically in version control.

All files in a commit are either committed together or not at all. No other user should see partial or incomplete changes.

A check-in is similar to a database transaction described by its ACID properties:

Atomic.
Consistent.
Isolated.
Durable.

Commit all files that belong to a task in a single operation to keep the project consistent at all times.

It's critical to apply best practices to commits. Good-quality commits will improve your project, making you more productive and successful.
Commit Files With a Single Purpose — Not as a Backup

Another best practice is committing files with a single purpose.

Each commit should have a single purpose. For example, fixing a bug or adding a new feature. If a single change makes multiple independent changes to your project, it can become difficult to read and to review. Backing out one of these changes then becomes more complex and unnecessarily time-consuming.

Remember: A commit is not a backup of your current state of your local files, even if it occurs at the end of the day.

By breaking down a larger task into smaller chunks, you can more readily understand and review the intent of changes. For example, you could break a task into infrastructure and refactoring tasks before making user-visible changes. Keeping the scope narrow also makes it easier to back out a bad commit.
Write Good Commit Messages

Another commit best practice is to write good commit messages.

Each commit should have a description that explains the why — but not necessarily the how — regarding the change. (How is usually deducible by comparing the file contents before and after the change.)

A good commit message makes it easier for a reviewer — and you — to understand the purpose of the commit later. A good commit message also references the issue ID(s) — or even the requirement ID(s) — that the commit addressed (if applicable).
Don’t Break Builds

Another version control best practice is to avoid breaking builds by doing complete commits.

Provide test cases and at least stubs for new APIs. This ensures every commit is usable by any other member in the team without breaking their build.

A complete commit is easier to propagate between branches. An incomplete commit of an API, for example, might build locally in your work area and pass all tests. But it could break in another team member’s work area.
Mickael Ruau's insight:

Version Control Checklist

Here’s a quick version control checklist to use to ensure you’re applying the right version control best practices.

Commits

Applying version control best practices to commits is critical. Here’s what you need to consider.

  • Have all commits be atomic, complete, consistent, traceable and with a single intent
  • Make changes visible through frequent commits
  • Consider how you would use the comments in the future
  • Review code before committing to the mainline
  • Make commits reversible

Branching

Applying branching best practices is critical to success. But it can be complicated. To reduce the pain (and effort) for your teams, your branching strategy should aim to:

  • Optimize productivity.
  • Enable parallel development.
  • Allow for a set of planned, structured releases.
  • Provide a clear promotion path for software changes through production.
  • Evolve to accommodate changes that are delivered, perhaps daily.
  • Support multiple versions of released software and patches.

Security

Security is another critical version control best practice. Your security plan must consider multiple levels.

  • Data: encryption at rest and in transit; specific file and file-type access controls.
  • Users: authentication and authorization; integration with enterprise tools.
  • Branches and streams: partitioning access control according to the intent of a change— development or release.
  • Audit trails: immutable history of all changes.
  • Threat detection: using data collected to warn of accidental or malicious risks.
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Version Control Best Practices - DZone Agile

Version Control Best Practices - DZone Agile | Devops for Growth | Scoop.it
Working as a Version Control Focal Point

Moving on, I learned a lot during my time as a version control focal point. So things were learned from good experiences; others, not so much.
Good Experiences

You should rename files and directories via the version control system. This way, the physical file is not replicated to the server. Additionally, the full history is preserved and can be seen in a graph.

You can merge a hotfix from one version to another via the version control merge feature.
This is also commonly used for hotfix rollups.

Putting version related files which are often changed under version control.

Less Good Experiences

You should not submit a few non-related changes in one change list. This caused a mess. When only one of the changes had to be merged to a different version, it was going to be hard, time-wasting, manual work.

Don't save a lot of work locally without submitting for a long time. Note: sometimes, this is caused by developers avoiding opening development versions.

It's a bad idea to put files in version control that aren't recommended to be there, like generated files from the build process and large binary files that are not changed.

In summary, the version control system is here to help developers, and when used properly, it can be very helpful.
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

From Branch Merge Hell to Trunk-based Development - A Bank Agile Case Study 2/n

From Branch Merge Hell to Trunk-based Development - A Bank Agile Case Study 2/n | Devops for Growth | Scoop.it


In the first part of the case-study, we looked at the difficult conditions the team lived in. That was more to do with technical processes they used for handling multiple projects at the same time. This part focuses on how they moved on from the branch merge hell they lived in.

== Part 2==

It was evident that the code branches just postponed the pain. That pain would eventually become huge but difficult-to-deal-with after a couple of months.

Over time, the team realized two things from the Continuous Integration (CI) philosophy (yes, I call it a philosophy).
If it’s hard to do something, you are not doing it often enough!
If delta is small, so is the risk.

The team had a hard time in merging feature branches with mainline. That just meant, the team was not doing the code-merge often enough.
Moving to Trunk Based Development

After lots of analysis and experiments, the team decided to move towards trunk-based development. They stopped creating feature branches for new projects and started working on the trunk only. The merge-pain in this approach, though multiple times every day, was relatively small. The team would sort them out through active collaboration.

The idea is to let developers develop and push code in the trunk at regular intervals. That works only when the code has a safety net around.
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Principles of Agile Version Control: From OOD to TBD

Principles of Agile Version Control: From OOD to TBD | Devops for Growth | Scoop.it
The OOD principles of reuse-release equivalence, common closure, and common reuse are all about the appropriate granularity of packages of classes. We wish to investigate the corresponding granularity of packages of evolution within a version control environment. We can consider the scope and granularity of a change, a baseline, a codeline, and beyond. In either case, both (re)use and release imply reuse by some consumer and releasing to some target consumer. Once again, the notion of abstractness in OOD translates to the level of visibility of versioned content that will play a key role.

In version control, the reuse of changes and versions occurs when we view or update (merge/modify) a version of one or more files in our workspace in order to develop, build, test and release our changes. The release of changes and versions occurs when we commit changes to a codeline, transfer changes between codelines, baseline a configuration, or promote a configuration to a new promotion-level. Based on this, we already know a few things about change granularity:

The granule of change is not an individual file/checkout, but is rather a single development task that holds changes we then commit to the codeline.
The granule of baselining and promotion is not an individual change but is, instead, the unit of integration for building and testing the component or product undergoing change on the codeline, which is the configuration.
The granule of progressive collaboration and evolution is the codeline

Not all of the above require principles. Furthermore it’s not apparent that each of these three OOD principles will translate to individual version control principles. Instead, we want to see if we can apply these three principles together as a group for each of changes, baselines, and codelines.

Package Coupling - Change-Flow

The package coupling principles of OOD translate almost directly to version-control, with only slight modification. Sometimes dependency translates into flow, but note that change-flow does not imply dependency. These deal with branching, merging, and the flow and structure of changes across codelines.

What's Next?

Now that we've set the stage and introduced the players, we will exit the stage until next month, when we try to directly apply our translations to each of the different types of version control containers: changes/workspaces, baselines, and codelines. We're very interested in your feedback on these ideas and our initial mapping of them into the version-control domain. So if you have some insights to share, please let us know.
Mickael Ruau's insight:

 

The principles of object-oriented design [1] address the need to minimize the complexity and impact of change by minimizing dependencies through the use of loosely coupled and highly cohesive classes, interfaces, and packages. These are the logical containers of software functionality and are realized in “physical” containers of version control (configuration elements).  These exist in the form of files, libraries and components, and are as follows:

Principles of Class Design

SRP

The Single Responsibility Principle

A class should have one, and only one, reason to change.

OCP

The Open-Closed Principle

A class should be open for extension (of its behavior) but closed against modification (of its contents).

LSP

The Liskov Substitution Principle

Derived classes must be substitutable for (require no more, and ensure no less than) their base classes.

DIP

The Dependency Inversion Principle

Depend on abstract interfaces, not on concrete details.

ISP

The Interface Segregation Principle

Make fine grained interfaces that are client specific.

LOD

The Law Of Demeter
(Principle of Least Assumed Knowledge)

Objects and their methods should assume as little as possible about the structure or properties of other objects (including its own subcomponents). [3]

DRY

The "Don't Repeat Yourself" Principle

Every piece of knowledge should have one authoritative, unambiguous representation within the system. [4]

Principles of Package Design

REP

The Release Reuse Equivalency Principle

The granule of reuse is the granule of release.

CCP

The Common Closure Principle

Classes that change together are packaged together.

CRP

The Common Reuse Principle

Classes that are used together are packaged together.

Principles of Package Coupling

ADP

The Acyclic Dependencies Principle

The dependency graph of packages shall contain no cycles.

SDP

The Stable Dependencies Principle

Depend in the direction of stability.

SAP

The Stable Abstractions Principle

Abstractness increases with stability.

We wish to derive similar principles for version control using the logical containers of change-based versioning and task-based development:

  • Changes
  • Workspaces (sandboxes)
  • Versions (labels/tags)
  • Configurations (builds & baselines)
  • Streams (codelines)
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Branching strategies: Git-flow vs. trunk-based development

Branching strategies: Git-flow vs. trunk-based development | Devops for Growth | Scoop.it
With Git platforms like Bitbucket, GitLab, GitHub, Azure DevOps offered on the cloud, it is now easier than ever to create code repositories on a platform that you prefer. Devbridge can help to choose the right platform in an unbiased way.
Mickael Ruau's insight:

 

Below, we compare git-flow vs. trunk-based noting key considerations for each.

Philosophy

Git-flow Trunk-based As far as possible from main branch As close as possible to main branch New features started from develop branch Short-lived feature branches started from main branch New release branch derived from develop branch, after stabilized release branch deployed Main branch always in a state ready to be deployed to production Only hotfixes derived from main branch Hotfixes start from main or release branch, need to be cherry-picked back to main

Team composition

Git-flow Trunk-based Lack of seniority within the team Well-composed and experienced team Working with other vendors/third-party Team augmentation model

Product type

Git-flow Trunk-based Complex, mature, monolithic product Microservices Brown-field product Modern single page application (SPA) / Mobile apps   Proof-of-concept (POC) / Prototype   Distributed system components

Authoring process

Git-flow Trunk-based Governed Team-driven

Deployment

Git-flow Trunk-based Various deployment models used Continuous Deployment practices recommended, such as feature toggles, quality gates, canary testing, self-service automation (e.g.. ChatOps), and monitoring

Release frequency

Git-flow Trunk-based Slower release cadence, pre-determined schedule Teams able to iterate quickly and independently

 

 
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Git Flow vs. Trunk Based Development | Toptal

Git Flow vs. Trunk Based Development | Toptal | Devops for Growth | Scoop.it

Git Flow Pros and Cons

As you can see, doing pull requests might not always be the best choice. They should be used where appropriate only.
When Does Git Flow Work Best?

When you run an open-source project.
This style comes from the open-source world and it works best there. Since everyone can contribute, you want to have very strict access to all the changes. You want to be able to check every single line of code, because frankly you can’t trust people contributing. Usually, those are not commercial projects, so development speed is not a concern.

When you have a lot of junior developers.
If you work mostly with junior developers, then you want to have a way to check their work closely. You can give them multiple hints on how to do things more efficiently and help them improve their skills faster. People who accept pull requests have strict control over recurring changes so they can prevent deteriorating code quality.

When you have an established product.
This style also seems to play well when you already have a successful product. In such cases, the focus is usually on application performance and load capabilities. That kind of optimization requires very precise changes. Usually, time is not a constraint, so this style works well here. What’s more, large enterprises are a great fit for this style. They need to control every change closely, since they don’t want to break their multi-million dollar investment.

When Can Git Flow Cause Problems?

When you are just starting up.
If you are just starting up, then Git flow is not for you. Chances are you want to create a minimal viable product quickly. Doing pull requests creates a huge bottleneck that slows the whole team down dramatically. You simply can’t afford it. The problem with Git flow is the fact that pull requests can take a lot of time. It’s just not possible to provide rapid development that way.

When you need to iterate quickly.
Once you reach the first version of your product, you will most likely need to pivot it few times to meet your customers’ need. Again, multiple branches and pull requests reduce development speed dramatically and are not advised in such cases.

When you work mostly with senior developers.
If your team consists mainly of senior developers who have worked with one another for a longer period of time, then you don’t really need the aforementioned pull request micromanagement. You trust your developers and know that they are professionals. Let them do their job and don’t slow them down with all the Git flow bureaucracy.
Mickael Ruau's insight:

 

When we look at the history, we can broadly distinguish three generations of version control software.

Let’s take a look at them:

Generation Operations Concurrency Networking Examples First On a single file only Locks Centralized RCS Second On multiple files Merge before commit Centralized Subversion, CVS Third On multiple files Commit before merge Distributed Git, Mercurial

We notice that as version control systems mature, there is a tendency to increase the ability to work on projects in parallel.

One of the most groundbreaking changes was a shift from locking files to merging changes instead. It enabled programmers to work more efficiently.

No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Branch based vs Trunk based development

Branch based vs Trunk based development | Devops for Growth | Scoop.it
How to choose the right branching strategy for your project
Mickael Ruau's insight:

Choosing the right branching model can save you a lot of time in development. It also helps your dev team to work efficiently.

Coming to the point, we are gonna discuss two branching models today

  1. Branch based

  2. Trunk based

 

Branch based development

This is a very common strategy and most of them know it.

You have a stable branch like a master.

Then you have a feature branch like develop.

So whenever you develop new features or fix any bugs, you take a branch from develop and finish your work.

Then you raise a PR to the feature branch. After the code review, the branch will be merged.

When you have finalized the changes, then you merge the feature branch to master for the main release.

I know how common it is. Most of the open-source software use this method.

 

Trunk based development

On the other side, trunk based development doesn’t use branches or has very limited use of branches.

You have the main branch like master

Every developer will do all the changes in the main branch and push it directly to the main branch.

There are no PRs, branches, merge conflicts.

Just push directly to the main branch.

 

Seems very dangerous right?

With trunk-based development, you mostly can’t control who pushes the code and which code is being merged to the stable branch.

But there are things we have to consider with Trunk based development.

Trunk based development is useful when you want to deliver software in a fast phase.

And this method is always accompanied by best practices in writing software like TDD, CI/CD integration, Automation testing, high code coverage, pair programming, etc.

Trunk based development is a required practice of Continuous Integration (CI). With CI you get a deployment pipeline where you can run all tests and other integration jobs and safely deploy the code to production.

Most companies who are practicing CI often welcome Trunk based strategy.

Trunk based development is often practiced in a group of professional engineers. Because they have experience in writing software and know the best practices often. This comes with a high advantage.

Imagine a small group of professional engineers (maybe 10) who know best practices in development like TDD, Automation testing, etc, and are following Trunk based development. This group can deliver software in a fast and efficient way to its full potential.

This type of development is highly encouraged in Agile methodologies where you have to ship software frequently to get feedback often.

No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Git : les développeurs utilisent-ils le système de contrôle de version de façon optimale ? Il semblerait que beaucoup de développeurs se limitent au strict minimum

Git : les développeurs utilisent-ils le système de contrôle de version de façon optimale ? Il semblerait que beaucoup de développeurs se limitent au strict minimum | Devops for Growth | Scoop.it
L'on estime que les développeurs restent cantonnés à leur utilisation de base. Il existerait plusieurs explications à ce problème, mais les plus citées dans la communauté sont : Git est déroutant et difficile à prendre en main ; les débutants se jettent sur les outils GUI pour Git, etc. Dans un billet de blogue la semaine dernière, Dragos Barosan, un développeur, donne son avis sur ce problème.

Selon lui, si les utilisateurs ont une connaissance limitée de Git et le trouvent déroutant, c'est parce qu'ils n'explorent pas ou n'apprennent pas en profondeur le système de contrôle de version. Barosan donne l'exemple de nouvelles fonctionnalités introduites dans la version 2.23 du logiciel, notamment "switch" et "restore", pour tenter de réduire les agacements que pourrait engendrer la commande "git checkout". Ces commandes seraient très peu populaires. Il estime que "git checkout" est l'une des nombreuses raisons pour lesquelles les nouveaux arrivants trouvent Git déroutant. L'effet de "git checkout" dépend du contexte.
Mickael Ruau's insight:

Git permet beaucoup d'actions et il faut bien le comprendre.

Il faut comprendre comment fonctionne cet outil et éviter deux erreurs :

  • Ne pas utiliser Git comme SVN, ce n'est pas la même philosophie
  • Ne pas utiliser TortoiseGit qui essaie de ressembler à SVN
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Git : pourquoi écrire des commits atomiques ?

Git : pourquoi écrire des commits atomiques ? | Devops for Growth | Scoop.it
La notion de commits atomiques est souvent méconnue des développeurs. Mais qu'est-ce qu'un commit atomique et pourquoi l'utiliser ?
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Branches de fonctionnalités : la voie vers l'excellence

Branches de fonctionnalités : la voie vers l'excellence | Devops for Growth | Scoop.it

Astuce

Les branches ne servent pas uniquement à travailler sur les fonctionnalités. Elles peuvent mettre l'équipe à l'abri de changements d'architecture importants, tels que la mise à jour des frameworks, des bibliothèques communes, etc.
Trois stratégies de création de branches pour les équipes agiles

Les modèles de création de branches diffèrent souvent d'une équipe à l'autre. De nombreux débats animent la communauté des développeurs à ce sujet. L'un des thèmes majeurs concerne la quantité de travail qui doit demeurer au sein d'une branche avant de faire l'objet d'un merge dans la branche principale.
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Dolt, une base de données SQL avec des fonctions de contrôle de version, qui peut être forké, cloné, dérivé et DoltHub, un site Web qui héberge les BDD Dolt, décrit comme un Git pour les BDD

Dolt, une base de données SQL avec des fonctions de contrôle de version, qui peut être forké, cloné, dérivé et DoltHub, un site Web qui héberge les BDD Dolt, décrit comme un Git pour les BDD | Devops for Growth | Scoop.it

Dolt implémente un surensemble de MySQL. Il serait compatible avec MySQL et fournit des constructions supplémentaires exposant les fonctionnalités de contrôle de version qui sont étroitement modelées sur Git. « Dolt est le véritable Git pour l'expérience des données dans une base de données SQL, fournissant un contrôle de version pour les schémas et les données au niveau des cellules, le tout optimisé pour la collaboration », explique l'équipe. Selon elle, ces fonctionnalités sont combinées (Git + MySQL) pour créer un nouveau type de base de données relationnelle puissante et idéale pour le paysage des données évoluées.

Dolt est un outil libre et open source, sous licence Apache 2.0. Par ailleurs, DoltHub est un site Web qui héberge les bases de données Dolt, tout en fournissant des outils tels que l'hébergement, les autorisations, l'interface de requête, et plus encore, pour faciliter une collaboration transparente sur les données.

Ajout de fonctions de contrôle de version à une base de données SQL

Selon l'équipe, Dolt ajoute les fonctions de contrôle de version suivantes à une base de données SQL familière
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Installation et utilisation des clients CVS.

Installation et utilisation des clients CVS. | Devops for Growth | Scoop.it

Ce document a pour objectif de :

  • présenter rapidement l'outil de gestion de version CVS ;
  • présenter les programmes clients associés à CVS ;
  • aider à l'installation et à la configuration des clients ;
  • expliquer les opérations classiques ;
  • expliquer quelques opérations plus complexes.

Note de l'auteur : pour l'instant, seul CVS et le client WinCVS seront expliqués dans ce document. Il sera mis à jour plus tard pour intégrer un client alternatif TortoiseCVS.

Mickael Ruau's insight:
 

IV. Architecture de principe - Fonctionnement général

Objectif : expliquer le fonctionnement global de CVS.

CVS maintient un ensemble de fichiers dans un répertoire qu'on appelle repository. Toutes les versions successives d'un fichier sont stockées dans le repository (rien ne se perd) et chaque version d'un fichier est étiquetée avec un numéro de version.

Un utilisateur autorisé peut obtenir auprès du serveur CVS une copie locale (working copy) de ces fichiers dans son espace de travail (working space) par la commande checkout. Par défaut, la copie locale contient la version la plus récente des fichiers.

Il peut ensuite modifier (par exemple, avec un éditeur de texte) ces fichiers puis mettre à jour le repository par la commande commit. Lors du commit, chaque fichier réellement modifié fait l'objet d'une nouvelle version. Par exemple, si une copie locale d'un fichier est obtenue en version 1.4, que cette copie est ensuite modifiée, puis réintroduite dans le repository, une nouvelle version de ce fichier est stockée avec le numéro de version 1.5 (la version 1.4 existe toujours ! ).

Il peut aussi mettre à jour sa copie locale avec les nouvelles modifications incorporées dans le repository par d'autres développeurs, grâce à la commande update.

Enfin il peut poser un tag sur le module afin d'identifier la livraison correspondant à l'état courant des fichiers.

Voici un schéma indiquant le sens des transferts d'informations entre le Repository et les copies locales des utilisateurs :

 

No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Trunk-based Development

Learn about trunk-based development, a version control management practice where developers merge small, frequent updates to a core “trunk” or main branch
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Version Control for Multiple Agile Teams

Version Control for Multiple Agile Teams | Devops for Growth | Scoop.it


Table of contents

Introduction
Goals
Single page summary (downloadable for wall mounting)
The version control pattern
Branch owner & policy
The "done" concept
The Done branch
When do we create additional branches?
Work branches
Publishing from work to trunk
What if our team implements multiple stories in parallell?
Done includes regression testing!
Diverging code (merging conflicts)
Multiple teams - what if other teams are publishing to the trunk as well?
Release branches
The big picture
Variations to the model
FAQ
Where does continuous integration (CI) fit into this?
What's the best tool for this version control model?
What about checkins that aren't related to a user story?
Merging is a pain, so I want to do it as seldom as possible!
I have more questions!
References


Downloadable PDF of this article

No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Software Development: Agile Version Control

Software Development: Agile Version Control | Devops for Growth | Scoop.it
Agile version control is very different to traditional version control. It is performed using many small feature branches which are being continually merged back into the trunk (or main development stream). This is necessary for the practice of Continuous Integration (CI) which is a core part of the Agile approach.

CI is an example of JIT (and hence DIRE) allowing problems to be found as soon as possible. It also supports other Agile practices such as short sprints and evolving the software using small, simple, user-centric User Stories. Use of CI depends on a version control system that allows easy branching and merging.

Most Agile teams also have two ongoing code streams (see Diagram 7) - the development "branch(es)" and the delivery "trunk". Again, this relies on a version control system that supports easy merging.

As far as I know Git is the only version control system currently available where a version node in the repository can have two parents. In other words Git allows you to automatically and safely merge code from different sources.

Although Git is not without it's problems (which I will discuss next month) I think using it is essential for Agile development to work smoothly. I will discuss the day-to-day use of different version controls systems (including Git) next month.
Mickael Ruau's insight:

Agile version control using Git is simple. A developer branches the code to work on a User Story. Git makes it easy to merge the branch back into the trunk. A simple example is shown in the following diagram where all User Story branches are merged back into the trunk by the end of each sprint.

Diagram 6. Agile Version Control


However, generally you need control of what features are delivered to "production". This is often accomplished by having dual streams - an on-going "development" stream (or branch) and a separate "delivery" stream (trunk) allowing control over when features are delivered.

Diagram 7. Dual Streams


This is very different from traditional version control where branches are eventually discarded (after possibly having been merged back into the trunk) - instead you have two on-going streams. This approach is only possible with a version control system such as Git where a version (ie, a node in the diagrams) can have two parents - in the diagrams this is any node with two outgoing arrows.

For a large project with multiple teams I have even seen the suggestion of multiple on-going "development" branches (eg: see Version Control for Multiple Agile Teams). I have not tried this but I have reservations because code merges between the teams would occur irregularly and might easily be forgotten (remember the rule of merge early and often). The two teams might create conflicting changes which are not discovered until the conflicting code is merged from the trunk into the other teams stream.

 

Diagram 8. Multiple Development Streams
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Why I Prefer Trunk-Based Development Over Feature Branching and GitFlow - DZone DevOps

Why I Prefer Trunk-Based Development Over Feature Branching and GitFlow - DZone DevOps | Devops for Growth | Scoop.it

Check out the components of Trunk-based Development as implemented by Facebook and Google, and see how it helps resolve and prevent merge conflicts.
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Trunk-Based Development - DZone Web Dev

Trunk-Based Development - DZone Web Dev | Devops for Growth | Scoop.it
When coding an application, it is important to remain in sync with the other engineers working on the project. One strategy that helps a team stay in sync with codebase changes is trunk-based development. When employing trunk-based development, the developers working on a project make all their code changes in a common branch known as "trunk". There are numerous benefits to developing with this approach, which we will discuss in this article.
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Git Branching Strategies vs. Trunk-Based Development

Git Branching Strategies vs. Trunk-Based Development | Devops for Growth | Scoop.it
Development branch

The development branch is a long-lived feature branch that holds changes made by developers before they’re ready to go to production. It parallels the trunk and is never removed. Some teams have the development branch correspond with a non-production environment. As such, commits to the development branch trigger test environment deployments. Development and trunk are frequently bidirectionally integrated, and it’s typical for a team member to bear the responsibility of integrating them.
Feature branch

A feature branch can be short- or long-lived depending on the specific branching flow. The branch often is used by a single developer for only their changes, but it is possible to share it with other developers as well. Again, the branching strategy will determine how exactly you define a “feature branch”.
Release branch

A release branch can be either short-lived or long-lived depending on the strategy. In either case, the release branch reflects a set of changes that are intended to go through the production release process.
Hotfix branch

A hotfix branch is a branch that’s used generally to hold changes related to emergency bug fixes. They can be short-lived or long-lived, though generally they exist as long-lived branches split off from a release branch. They tend to be more common in teams with explicitly versioned products, such as installed applications.
Merge conflicts and pain

It’s easy for development teams to find themselves with a tangled mess of branches that need to be merged with the mainline all at once. And the longer multiple developers keep their code changes from mixing with each other, the higher the risk that those changes will conflict (through changes to common code).

It’s changes to common code that prevent Git from handling merges automatically and cause developers to experience the classic horrors of source control management: merge conflicts that waste time, lost changes that vanish entirely, and regression defects from removed code that somehow finds its way back in. Part of why trunk-based development has grown in popularity is because it helps avoid these painful merge conflicts.
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Choosing between Trunk based development(TBD) vs Feature branching – Agile Champs

Choosing between Trunk based development(TBD) vs Feature branching – Agile Champs | Devops for Growth | Scoop.it
Following are the various factors to look at before selecting Trunk based vs feature branching.

location of team members: when team members are co-located, the trunk is the best bet, helps us to get faster feedback. Also team can just talk about the code changes directly. Since the feedback will be faster in a single trunk, the team need to sync up more frequently. Co-location enables this sync trunk changes to happen frequently and faster. When there is a distributed environment (often in our teams), feature branching works best.

speed development environment: In a high speed dev environment, the trunk just shines as there are less and less process overhead, like branching, Pull request, review etc. Feature branching shines well when there is less speed in churning code.

size of code base: Insanely higher number of code lines can be better handled using feature branching. But for smaller code base, the cost of creating branches etc can be higher.

In our team meetings, we often talk about the right tools for the problem at hand. And using the right branching strategy is an important decision. We often question ourselves if the strategy is right for the given epic/sprint. If the answer is NO for few sprints, we know, we need to change something!
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Microservices — the Letter and the Spirit

Microservices — the Letter and the Spirit | Devops for Growth | Scoop.it

Key Takeaways

Microservices pattern doesn’t refer to the size of the services, decomposing your solution into ‘micro’ pieces is not the goal of the pattern, think of your solution as one whole then look at the requirements to guide you through what pieces to partition out. The article gives you an example of doing that.

Mickael Ruau's insight:

Central to the microservices pattern is the concept that services must be decoupled; the end goal of the pattern is to make a distributed solution easy to develop, operate and maintain which can be easier achieved when the services are decoupled.


Decoupling the services is twofold

 

1) Services don’t interact directly with each other, instead they use an integration service.

2) Services are versioned.

 

Using an integration service (e.g. service bus) frees your microservices from depending on each other, a failure of one service shouldn’t cause the other services to fail.

 

Versioning shouldn’t be an afterthought in microservices, implement it at day one. If Versioning seems an overkill you’re probably prematurely ‘microservicing’ your solution.

No comment yet.
Scooped by Mickael Ruau
Scoop.it!

UnifiedFlow: Git Branching Strategy - DZone DevOps

UnifiedFlow: Git Branching Strategy - DZone DevOps | Devops for Growth | Scoop.it
Pros

Every branches fork from a stable state.
Prevent side-effects (defect/ad-hoc/config) from merging develop into feature, release and main.
Group stable features according to release plan.
Easily remove features from release.

Cons

Require optional merge branch if using with Pull-Request. PR will merge the target branch on your feature; may cause unknown side-effects and stall you for days to fix it.
Multiple merge conflicts in develop and release.
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Comment monter concrètement une usine logicielle moderne ?

Comment monter concrètement une usine logicielle moderne ? | Devops for Growth | Scoop.it


Monter une usine logicielle moderne c’est avant tout se poser la question du niveau d’intégration au regard de l’ambition de son entreprise et définir deux piliers essentiels : la gestion du contrôle de code source (SCM) et les pratiques combinées d’intégration et de livraison continue (CI/CD).
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Picking the Right Branch-Merge Strategy

Picking the Right Branch-Merge Strategy | Devops for Growth | Scoop.it
A good branch-merge strategy facilitates processes among multiple developers and is the basis for any well-functioning DevOps pipeline that uses continuous integration. Let’s explore branching strategies, merging strategies, and how you can put them together in a way that’s right for your team in order to bring quality features to production faster.
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

TortoiseCVS: About

TortoiseCVS: About | Devops for Growth | Scoop.it
TortoiseCVS lets you work with files under CVS version control directly from Windows Explorer.
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

An Introduction To Trunk-Based Development - LaunchDarkly | LaunchDarkly - 极思路

An Introduction To Trunk-Based Development - LaunchDarkly | LaunchDarkly - 极思路 | Devops for Growth | Scoop.it
No comment yet.