Processen
Processen övergripande
Git flow exempel hämtade från:
https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow
http://nvie.com/posts/a-successful-git-branching-model/
http://danielkummer.github.io/git-flow-cheatsheet/
Övergripande om processen
- Branchen master innehåller endast taggade produktions-releaser.
- Branchen develop är där ny funktionalitet införs (integration branch)
- Varje feature utvecklas i en egen branch med develop som ursprunglig branch.
- När en feature är klar mergas den tillbaka in i develop.
- När branchen develop innehåller tillräckligt med features för en release, skapas en release-branch, och samtidigt startas utvecklingen för nästa release.
- I release-branch görs endast bug-fixar och dokumentationsuppdateringar.
- När den release-branch är redo att skeppas, mergas den till master och taggas med version, efter det mergas ändringar till develop.
- En support branch är en långlivad 'master-branch' för en viss version.
Namnkonventioner
develop-branch: develop
release-branch: release/v<version>, tex release/v2.3.0
feature-branch: feature/<JIRA nr>, tex feature/SKLTP-123
hotfix-branch: hotfix/<JIRA nr>, tex hotfix/SKLTP-123
support-branch: support/<version>, tex support/v.2.3.0
tag: <version>, tex v2.3.0
kommentar: ex SKLTP-123: Loggning av payload skall vara konfigurerbar av/på
SKLTP/NTjP/Inera's Informationstjänster git branch mot driftmiljö
Git flow processen och exempel med git-flow installerat
Nedan exempel med verktyget git-flow och motsvarande git kommandon om man inte har tillgång till verktyget
https://github.com/nvie/gitflow
Installera verktyget git-flow
Om du som utvecklare väljer att inte installera git-flow enligt ovan så kan man använda git kommandon för att uppnå samma resultat. Dessa beskrivs separat längs ner på sidan.
Brew on mac $ brew install git-flow Linux $ apt-get install git-flow Windows (Cygwin, wget, util-linux) $ wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
Införa ny funktionalitet (feature branch)
Starta en feature branch
─$ git-flow feature start SKLTP-123 Switched to a new branch 'feature/SKLTP-123' Summary of actions: - A new branch 'feature/SKLTP-123' was created, based on 'develop' - You are now on branch 'feature/SKLTP-123' Now, start committing on your feature. When done, use: git flow feature finish SKLTP-123
Dela en feature branch
╰─$ git-flow feature publish SKLTP-123 Total 0 (delta 0), reused 0 (delta 0) To git@github.com:skltp-aggregerandetjanster/riv.clinicalprocess.healthcond.basic.GetAggregatedObservation.git * [new branch] feature/SKLTP-123 -> feature/SKLTP-123 Already on 'feature/SKLTP-123' Your branch is up-to-date with 'origin/feature/SKLTP-123'. Summary of actions: - A new remote branch 'feature/SKLTP-123' was created - The local branch 'feature/SKLTP-123' was configured to track the remote branch - You are now on branch 'feature/SKLTP-123'
Färdigställ en feature branch
╰─$ git-flow feature finish SKLTP-123 Switched to branch 'develop' Already up-to-date. Deleted branch feature/SKLTP-123 (was 039205e). Summary of actions: - The feature branch 'feature/SKLTP-123' was merged into 'develop' - Feature branch 'feature/SKLTP-123' has been removed - You are now on branch 'develop'
Göra en release (release branch)
Starta en release branch
─$ git-flow release start v1.0.0 Switched to a new branch 'release/v1.0.0' Summary of actions: - A new branch 'release/v1.0.0' was created, based on 'develop' - You are now on branch 'release/v1.0.0' Follow-up actions: - Bump the version number now! - Start committing last-minute fixes in preparing your release - When done, run: git flow release finish 'v1.0.0'
Stega upp version i källkoden (pom.xml)
Från maven-release-plugin 2.1.0 finns möjlighet att sätta konfiguration som underlättar releaser till Git. Rekommenderade versioner på maven-release-plugin är 2.3.2 eller 2.5.1 (ej 2.4). tagNameFormat, överlagra default namnsättning på version för att tex sätta v.1.0.0 pushChanges, localCheckout, autoVersionSubmodules,
<build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version>2.4.1</version> <configuration> <autoVersionSubmodules>true</autoVersionSubmodules> <tagNameFormat>v@{project.version}</tagNameFormat> <pushChanges>false</pushChanges> <localCheckout>true</localCheckout> </configuration> </plugin> </plugins> </pluginManagement> </build>
╰─$ mvn release:prepare --- --- --- ╰─$ mvn release:perform
Verifiera att versionen stegats upp och taggats korrekt i git
╰─$ git stauts On branch release/v1.0.0 Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: pom.xml
╰─$ git tag v1.0.0-RC1
Dela ut release branchen så att andra utvecklare kan se den
╰─$ git-flow release publish v1.0.0
Färdiställ release branch
╰─$ git-flow release finish v.1.0.0 -- -- ╰─$ git push --tags
Göra en rättning på en publicerad release (hotfix branch)
Påbörja en hotfix branch
╰─$ git-flow hotfix start v.2.3.1
Färdigställ en hotfix branch
╰─$ git-flow hotfix finish v.2.3.1
Skapa en långlivad support branch för att kunna rättningar på äldre versioner (support branch)
Påbörja en långlivad support branch
╰─$ git-flow support start v.2.3.0
Git flow processen och exempel utan git-flow installerat
Hämta ut develop branchen där utveckling sker
git clone ssh://user@host/path/to/repo.git git checkout -b develop origin/develop
Införa ny funktionalitet (feature branch)
Starta en feature branch
git checkout -b feature/SKLTP-123 develop
Dela en feature branch
git push -u origin feature/SKLTP-123
Färdigställ en feature branch
git pull origin develop git checkout develop git merge --no-ff feature/SKLTP-123 git push git branch -d feature/SKLTP-123
Göra en release (release branch)
Starta en release branch
git checkout -b release/2.3.0 develop
Stega upp version i källkoden (pom.xml)
Från maven-release-plugin 2.1.0 finns möjlighet att sätta konfiguration som underlättar releaser till Git. Rekommenderade versioner på maven-release-plugin är 2.3.2 eller 2.5.1 (ej 2.4). tagNameFormat, överlagra default namnsättning på version för att tex sätta v.1.0.0 pushChanges, localCheckout, autoVersionSubmodules,
<build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version>2.4.1</version> <configuration> <autoVersionSubmodules>true</autoVersionSubmodules> <tagNameFormat>v@{project.version}</tagNameFormat> <pushChanges>false</pushChanges> <localCheckout>true</localCheckout> </configuration> </plugin> </plugins> </pluginManagement> </build>
╰─$ mvn release:prepare --- --- --- ╰─$ mvn release:perform
Verifiera att versionen stegats upp och taggats korrekt i git
╰─$ git stauts On branch release/v2.3.0 Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: pom.xml
╰─$ git tag v2.3.0-RC1
Dela ut release branchen så att andra utvecklare kan se den
git push -u origin release/v2.3.0
Färdiställ release branch
git checkout master git merge --no-ff release/vp-2.3.0 git push git checkout develop git merge --no-ff release/2.3.0 git push git branch -d release/2.3.0 git tag -a 2.3.0 -m "2.3.0 release" master git push --tags
Göra en rättning på en publicerad release (hotfix branch)
Påbörja en hotfix branch
git checkout -b hotfix/SKLTP-112 develop
Färdigställ en hotfix branch
git checkout master git merge --no-ff hotfix/SKLTP-112 git push git checkout develop git merge --no-ff hotfix/SKLTP-112 git push git branch -d hotfix/SKLTP-112 git tag -a 2.3.1 -m "2.3.1 release with hotfix SKLTP-122" master git push --tags
Skapa en långlivad support branch för att kunna rättningar på äldre versioner (support branch)
Skapa en långlivad support branch
git checkout -b support/v2.3.0 master