SlideShare una empresa de Scribd logo
1 de 86
Gerrit Code Review
First steps with Git and Code Review Workflow
Luca Milanesio
luca@gerritforge.com
@gitenterprise @gerritreview
• Author of "Learning Gerrit Code Review"
• Director of GerritForge
– Founded in the UK
– HQ in London, Offices in the USA, UK, Germany, Italy
– Committed to OpenSource
About me and GerritForge
GerritCode Review
@gitenterprise @gerritreview
Agenda – Introduction to Code Review (morning)
• Benefits of Code Review
• Overview of Gerrit
• Refresh of advanced Git commands needed for review
–Exercise: advanced git commands
• Pushing changes for review
• Push validation (Jira, uploadvalidator, Jenkins)
• Review using Gerrit UX
–Exercise: create a change and review workflow
–Exercise: validation with Jenkins and submit
• Wrap-up: Code Review Etiquette, Q&A
@gitenterprise @gerritreview
Agenda – Practicing Code Review workflow (afternoon)
• Exercise: adding a new patch-set to existing changes
• Exercise: multiple patch-sets reviews
• Exercise: rebase and conflicts resolution
• Wrap-up, Q&A
@gitenterprise @gerritreview
Four Benefits of Code Review
1. Build Stability
@gitenterprise @gerritreview
Four Benefits of Code Review
2. Knowledge Sharing
@gitenterprise @gerritreview
Four Benefits of Code Review
3. Team Dynamics – Collective Ownership
@gitenterprise @gerritreview
Four Benefits of Code Review
4. Qualitative Code Selection
Overview of Gerrit
Introducing Gerrit Code Review
@gitenterprise @gerritreview
Gerrit Code Review – brief history
The idea: Guido Van Rossum
– Code-review for Perforce
– Porting to SVN and OpenSourced
– Python-based
2008 - Project fork for AOSP
(Shawn Pearce / Joe Onorato)
– Name changed to Gerrit Rietveld
– Based on Git
– Set of “patches” on original Guido’s
Rietveld project
2009 - Gerrit 2, the Java + GWT rewriting
(Shawn Pearce)
Google
Mondrian
Rietveld
Gerrit
Rietveld
gerrit
@gitenterprise @gerritreview
Gerrit = pre-commit review
Review before push to target branch
• Pros:
– Make sure every commit is good
– Enforce company standards (e.g. Jira association)
– Keep Build and Team code stability
– Tightly integrated with Git
• Cons:
– Slows down code integration
– Needs tooling
– Git proficiency
@gitenterprise @gerritreview
Gerrit High Level Review Workflow
@gitenterprise @gerritreview
Gerrit as simple Git Server
Gerrit Code Review building blocks:
1.Advanced Git Server
2.Review API
3.Extensible Workflow
@gitenterprise @gerritreview
10 git commands commonly used in Gerrit Workflow
1. git clone
2. git fetch
3. git checkout
4. git add
5. git commit --amend
6. git reset
7. git rebase
8. git merge
9. git cherry-pick
10. git remote
@gitenterprise @gerritreview
Git refresh – Hands-on Lab#1
Practicing advanced
Git commands
@gitenterprise @gerritreview
Lab#1: Gerrit Repositories Browser: Gitiles
@gitenterprise @gerritreview
Lab#1: Clone the repository from Gerrit
$ git clone http://gerrit.training/lab1
Cloning into 'lab1'...
remote: Counting objects: 2, done
remote: Finding sources: 100% (2/2)
remote: Total 2 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (2/2), done.
Checking connectivity... done.
$ cd lab1
(master) $
@gitenterprise @gerritreview
Lab#1: Create a feature branch and add one commit
(master) $ git checkout -b feature/my-true-story
Switched to a new branch 'feature/my-true-story'
(feature/my-true-story) $ echo "This is me" > my-true-story.md
(feature/my-true-story) $ git add . && git commit -m "My true story"
[feature/my-true-story 0368861] My true story
1 file changed, 1 insertion(+)
create mode 100644 my-true-story.md
@gitenterprise @gerritreview
Lab#1: Push to Gerrit
(feature/my-true-story) $ git push --set-upstream origin feature/my-true-story
Username for 'http://gerrit.training': admin
Password for 'http://admin@gerrit.training': secret
Counting objects: 3, done.
Writing objects: 100% (3/3), 266 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: refs: 1, done
To http://gerrit.training/lab1
* [new branch] feature/my-true-story -> feature/my-true-story
Branch feature/my-true-story set up to track remote branch feature/my-true-story from origin.
@gitenterprise @gerritreview
Lab#1: See feature branches in Gitiles
@gitenterprise @gerritreview
Lab#1: Another developer pushes a feature branch
(master) $ git checkout -b feature/another-story
Switched to a new branch 'feature/another-story'
(feature/another-story) $ echo "This is you" > another-story.md
(feature/another-story) $ git add . && git commit –m "Another story"
[feature/my-true-story 036bc6d] Another story
1 file changed, 1 insertion(+)
create mode 100644 another-story.md
(feature/another-story) $ git push origin feature/another-story
@gitenterprise @gerritreview
Lab#1: Working in "detached HEAD" mode
$ git fetch origin feature/another-story
From http://gerrit.training/lab1
* branch feature/another-story -> FETCH_HEAD
$ git checkout FETCH_HEAD
Note: checking out 'FETCH_HEAD'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at 09385fc... Another story
@gitenterprise @gerritreview
Lab#1 – Amending a commit in "detached" HEAD
((09385fc...))$ echo "yet another word" >> another-story.md
((09385fc...))$ git commit -a --amend -m "Amended commit"
[detached HEAD bc4970b] Amended commit
Date: Thu May 18 23:35:12 2017 +0100
1 file changed, 1 insertion(+)
create mode 100644 another-story.md
((bc4970b...))$ git push -f origin HEAD:feature/another-story
Counting objects: 3, done.
Writing objects: 100% (3/3), 269 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: refs: 1, done
To http://gerrit.training/lab1
+ 09385fc...bc4970b HEAD -> feature/another-story (forced update)
@gitenterprise @gerritreview
Lab#1 – Fetching last HEAD of a branch
((09385fc...))$ git checkout feature/another-story
Previous HEAD position was c14001a... Amended commit
Switched to branch 'feature/another-story'
Your branch and 'origin/feature/another-story' have diverged,
and have 1 and 1 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
(feature/another-story)$ git fetch origin
From http://gerrit.training/lab1
* branch feature/another-story -> feature/another-story (forced update)
(feature/another-story)$ git reset --hard origin/feature/another-story
HEAD is now at c14001a Amended commit
@gitenterprise @gerritreview
Lab#1 – Rebase a feature branch against master (1)
$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
(master)$ echo foo > bar
(master)$ git add bar && git commit -m foo
[master 52c1df5] foo
1 file changed, 1 insertion(+)
create mode 100644 bar
(master)$ git push
Counting objects: 3, done.
Writing objects: 100% (3/3), 237 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: refs: 1, done
To http://gerrit.training/lab1
83db6be..52c1df5 master -> master
@gitenterprise @gerritreview
Lab#1 – Rebase a feature branch against master (2)
$ git checkout feature/another-story
Switched to branch 'feature/another-story'
Your branch is up-to-date with 'origin/feature/another-story'.
(feature/another-story)$ git fetch && git rebase origin/master
First, rewinding head to replay your work on top of it...
Applying: Amended commit
(feature/another-story)$ git push -f origin feature/another-story
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 316 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: refs: 1, done
To http://gerrit.training/lab1
+ c14001a...c9841bf feature/another-story -> feature/another-story (forced update)
@gitenterprise @gerritreview
Lab#1 – Cherry-pick commits between branches (1)
83db 52c10
0368
dda2
c984
master
feature/another-story
feature/my-true-story
feature/yet-another-story
@gitenterprise @gerritreview
Lab#1 – Cherry-pick commits between branches (2)
(feature/another-story)$ git cherry-pick 0368
[feature/another-story 31911f1] My true story
Date: Thu May 18 08:52:49 2017 +0100
1 file changed, 1 insertion(+)
create mode 100644 my-true-story.md
(feature/another-story)$ git push
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 332 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: refs: 1, done
To http://gerrit.training/lab1
c9841bf..31911f1 feature/another-story -> feature/another-story
@gitenterprise @gerritreview
Lab#1 – Cherry-pick commits between branches (3)
83db 52c10
0368
dda2
c984
master
feature/another-story
feature/my-true-story
feature/yet-another-story
3191
@gitenterprise @gerritreview
Lab#1 – Working with remotes
$ git remote -v
origin http://gerrit.training/lab1 (fetch)
origin http://gerrit.training/lab1 (push)
$ git remote set-url --push origin ssh://admin@gerrit.training:29418/lab1
$ git remote -v
origin http://gerrit.training/lab1 (fetch)
origin ssh://admin@gerrit.training:29418/lab1 (push)
$ git remote add sshorigin ssh://admin@gerrit.training:29418/lab1
$ git remote -v
origin http://gerrit.training/lab1 (fetch)
origin ssh://admin@gerrit.training:29418/lab1 (push)
sshorigin ssh://admin@gerrit.training:29418/lab1 (fetch)
sshorigin ssh://admin@gerrit.training:29418/lab1 (push)
@gitenterprise @gerritreview
Workflow
Gerrit Code Review Workflow
@gitenterprise @gerritreview
Code Review Workflow (0)
A1 origin/branch
CI Build: OK
@gitenterprise @gerritreview
Code Review Workflow (1)
A1 origin/branch
A1
clone
CI Build: OK
branch
@gitenterprise @gerritreview
Code Review Workflow (2)
A1 origin/branch
A1
clone
CI Build: OK
branchC2
@gitenterprise @gerritreview
Code Review Workflow (3)
A1 origin/branch
A1
clone
CI Build: OK
branchC2
C2
push
refs/for/branch
@gitenterprise @gerritreview
Code Review Workflow (4)
A1 origin/branch
A1
clone
CI Build: OK
branchC2
C2
push
refs/for/branch
Verified: -1
(build failed)
@gitenterprise @gerritreview
Code Review Workflow (5)
A1 origin/branch
A1
clone
CI Build: OK
branchC2
C2
push
refs/for/branch
Verified: -1
(build failed)
C2*
amend
@gitenterprise @gerritreview
Code Review Workflow (6)
A1 origin/branch
A1
clone
CI Build: OK
branchC2
C2
push
refs/for/branch
Verified: -1
(build failed)
C2*
amend
C2*
push
@gitenterprise @gerritreview
Code Review Workflow (7)
A1 origin/branch
A1
clone
CI Build: OK
branchC2
C2
push
refs/for/branch
Verified: -1
(build failed)
C2*
amend
C2*
push
Verified: +1
(build OK)
@gitenterprise @gerritreview
Code Review Workflow (8)
A1 origin/branch
A1
clone
CI Build: OK
branchC2
C2
push
refs/for/branch
Verified: -1
(build failed)
C2*
amend
C2*
push
Verified: +1
(build OK)
Reviewed: +2
@gitenterprise @gerritreview
Code Review Workflow (9)
A1 origin/branch
C2 C2*
A1
clone
C2 C2*
push
Verified: -1
(build failed)
Verified: +1
(build OK)
Reviewed: +2
C2*
CI Build: OK
push
amend
refs/for/branch
branch
@gitenterprise @gerritreview
Code Review Workflow (10)
A1 origin/branch
C2 C2*
A1
clone
C2 C2*
push
Verified: -1
(build failed)
Verified: +1
(build OK)
Reviewed: +2
CI Build: OK
C2*
CI Build: OK
push
amend
refs/for/branch
branch
@gitenterprise @gerritreview
Gerrit concepts: target branch
A1 origin/branch
C2 C2*
A1
clone
C2 C2*
push
Reviewed: +2
C2*
push
amend
refs/for/branch
branch
Target Branch
@gitenterprise @gerritreview
Gerrit concepts: magic ref
A1 origin/branch
C2 C2*
A1
clone
C2 C2*
push
Reviewed: +2
C2*
push
amend
refs/for/branch
branch
Target Branch
Magic Ref
@gitenterprise @gerritreview
Gerrit concepts: change (1)
A1 origin/branch
C2 C2*
A1
clone
C2 C2*
push
Reviewed: +2
C2*
push
amend
refs/for/branch
branch
Target Branch
Change Magic Ref
@gitenterprise @gerritreview
Gerrit concepts: change (2)
• Assigned by the Git client
• Generated by a Gerrit hook
• Appended to the Git commit footer meta-data
• Kept across multiple amendments to the commit
Commit headline for review
This is the Git commit message description
possibly multi-line
Change-Id: I14343c9ef7445558111ccfc345d5e9eb1d60529a
@gitenterprise @gerritreview
Gerrit concepts: patch-set (1)
A1 origin/branch
C2 C2*
A1
clone
C2 C2*
push
Reviewed: +2
C2*
push
amend
refs/for/branch
branch
Target Branch
Change
Patch-Set
Magic Ref
@gitenterprise @gerritreview
Gerrit concepts: patch-set (2)
• Assigned by Gerrit Server
• Unique for every commit
• Identified by
– Change Number (sequence)
– Patch Number (sequence)
@gitenterprise @gerritreview
Gerrit concepts: review label and score (1)
A1 origin/branch
C2 C2*
A1
clone
C2 C2*
push
Reviewed: +2
C2*
push
amend
refs/for/branch
branch
Target Branch
Change
Patch-Set
Review
Label
Magic Ref
@gitenterprise @gerritreview
Gerrit concepts: review label and score (2)
• Label = category of review
• Default Labels:
– Code-Review (human)
– Verified (build)
• Score types
– Neutral (comments)
– Positive (good)
– Negative (changes needed)
• Special Scores
– Max = approved
– Min = veto
@gitenterprise @gerritreview
Gerrit concept: Submit / Merge
• Last patch-set  target branch
• Enabled by rules on review
• Default Submit rules: Code-Review = +2 and Verified = +1
@gitenterprise @gerritreview
Gerrit as review tool
Gerrit Code Review building blocks:
1.Advanced Git Server
2.Review API
3.Extensible Workflow
@gitenterprise @gerritreview
Code Review Workflow – Hands-on Lab#2
First Code Review Workflow
@gitenterprise @gerritreview
Lab#2: Gerrit Project Page
@gitenterprise @gerritreview
Lab#2: Clone the repository with commit-msg hook
$ git clone http://admin@gerrit.training/a/lab2 && (cd lab2 && curl -kLo `git rev-parse --git-dir`/hooks/commit-msg
http://admin@gerrit.training/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg)
Cloning into 'lab2'...
remote: Counting objects: 2, done
remote: Finding sources: 100% (2/2)
Unpacking objects: 100% (2/2), done.
remote: Total 2 (delta 0), reused 0 (delta 0)
Checking connectivity... done.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 4691 100 4691 0 0 527k 0 --:--:-- --:--:-- --:--:-- 572k
$ cd lab2
(master) $
@gitenterprise @gerritreview
Lab#2: Create a local commit and push for review
(master)$ echo "My first review" > first-review
(master)$ git add . && git commit -m "My first review"
[master 4ee8383] My first review
1 file changed, 1 insertion(+)
create mode 100644 first-review
(master)$ git push origin HEAD:refs/for/master
Counting objects: 3, done.
Writing objects: 100% (3/3), 309 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: new: 1, refs: 1, done
remote:
remote: New Changes:
remote: http://gerrit.training/2 My first review
remote:
To http://admin@gerrit.training/a/lab2
* [new branch] master -> refs/for/master
@gitenterprise @gerritreview
Lab#2: Push for review explained
(master)$ echo "My first review" > first-review
(master)$ git add . && git commit -m "My first review"
[master 4ee8383] My first review
1 file changed, 1 insertion(+)
create mode 100644 first-review
(master)$ git push origin HEAD:refs/for/master
Counting objects: 3, done.
Writing objects: 100% (3/3), 309 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: new: 1, refs: 1, done
remote:
remote: New Changes:
remote: http://gerrit.training/2 My first review
remote:
To http://admin@gerrit.training/a/lab2
* [new branch] master -> refs/for/master
HEAD = latest commit
of current branch
ref/for/master = magic
ref for reviews
targeting master
@gitenterprise @gerritreview
Lab#2: List of open changes
Commit headline Commit author
Gerrit project
Target branch
@gitenterprise @gerritreview
Lab#2: Change details (1)
Change URL Change Number and Link
Code Review actions
Commit message
Change-Id
Engage with
reviewers
Open review in
Code Browser (Gitiles)
@gitenterprise @gerritreview
Lab#2: Change details (2)
Current Patch-Set Git commands to fetch the Patch-Set Diff view controls
Side-by-Side
Or
Unified diff-view
Change audit
including
review comments
@gitenterprise @gerritreview
Lab#2: Adding in-line comments
@gitenterprise @gerritreview
Lab#2: Draft comments review
Comments can be
associated to words,
entire line or entire file
Comments can be added,
edited, discarted and then
sent atomically
@gitenterprise @gerritreview
Lab#2: Sending draft comments
Shows number of
draft comments
Allow review label, score
and overall message
Review draft comments
and send them atomically
@gitenterprise @gerritreview
Lab#2: Review notification
• All reviewers receive notification via e-mail (see example)
@gitenterprise @gerritreview
Lab#2: Reply to comments and keep the discussion thread
Change
message
s
keep the
message
thread
@gitenterprise @gerritreview
Lab#2: Submit the change
Submit rules are
satisfied.
Press the Submit
button
@gitenterprise @gerritreview
Lab#2: See the change in code browser (Gitiles)
Keeps
reference
to
Change-Id
@gitenterprise @gerritreview
Validations
Validating Commits Automatically
@gitenterprise @gerritreview
Jenkins Build Validation
Gives
Verified +1
/ -1 based
on the
Build and
Tests
@gitenterprise @gerritreview
Automatic scoring
•Post Change / Patch-Set upload trigger
–Triggers Jenkins build on new Changes
–Triggers Jenkins build on new Patch-Sets
•Feedback as auto-review
–Automatic scoring when build completed
–Score  Submit rule evaluation
@gitenterprise @gerritreview
Atlassian Jira validation
Jira User
Developer:
PRJ-87 My code fix
Git push
Create
references
GerritCode Review
PRJ-87
@gitenterprise @gerritreview
Pre-push validation
• Validate commit during the push
–Commit message restrictions (regex)
–Existence of the Jira ticket
• Cross-reference Change to Jira ID
–Change  Jira
–Jira  Change
–Change audit-trail in Jira
• Blocks creation of Change / Patch-Set / Commits
–Push failed
–Failure description
@gitenterprise @gerritreview
Content validation
Project Onwer
Assign project policiesDeveloper:
file1.java
my-super-big-file.dat
Git push
Check commit
policies
GerritCode Review
@gitenterprise @gerritreview
Content Validation during push
• Project owner access
• Define blocks
• Require footer
• Block keywords
@gitenterprise @gerritreview
Play with Validations – Hands-on Lab#3
Experiment Jenkins, Jira
and Content Validations
@gitenterprise @gerritreview
Questions?
Q&A
@gitenterprise @gerritreview
Amend Changes – Hands-on Lab#4
Add additional patches to
existing Changes
@gitenterprise @gerritreview
Amend Changes – Hands-on Lab#5
Create dependent
Changes
@gitenterprise @gerritreview
Amend Changes – Hands-on Lab#6
Server-side Change rebase
and conflict resolution
@gitenterprise @gerritreview
Code Review Etiquette
@gitenterprise @gerritreview
Etiquette: Making Changes
• Each Change should add something USABLE
–Change = complete feature
OR
–Change = complete bug-fix
• Each Change should be STABLE
@gitenterprise @gerritreview
Etiquette: Making Changes
• Each change should focus on ONLY ONE THING
–do not mix features, bug-fixes
• Why is this bad?
–You need the bug-fix in another branch.
(git cherry-pick is not easy)
–The feature broke something.
(git revert cannot be used)
–It’s more difficult to review.
@gitenterprise @gerritreview
Etiquette: Making Changes
•Push only Changes that are READY
–Q: Who wants to merge unfinished changes?
–Q: Who wants to review unfinished changes?
•It is unclear for reviewers
–what is an issue and
–what is simply not done yet
@gitenterprise @gerritreview
Etiquette: Making Changes
• Explain the WHY for the Change
–what was changed can be seen from the diff
• Example: is this commit message good or bad?
"Disable category GET API"
– Commit Message without motivation
–No info about why this had to be disabled.
… git blame gets less useful 
@gitenterprise @gerritreview
Etiquette: Making Changes
•Make BIG features as series of SMALL
Changes
• Each Change adds something usable
• Mark the change series as a topic
@gitenterprise @gerritreview
Final wrap-up
Q&A

Más contenido relacionado

La actualidad más candente

Understanding AWS Secrets Manager - AWS Online Tech Talks
Understanding AWS Secrets Manager - AWS Online Tech TalksUnderstanding AWS Secrets Manager - AWS Online Tech Talks
Understanding AWS Secrets Manager - AWS Online Tech TalksAmazon Web Services
 
gkkAwscloudpractitioneressentialstraining
gkkAwscloudpractitioneressentialstraininggkkAwscloudpractitioneressentialstraining
gkkAwscloudpractitioneressentialstrainingAnne Starr
 
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_Singapore
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_SingaporeCI-CD with AWS Developer Tools and Fargate_AWSPSSummit_Singapore
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_SingaporeAmazon Web Services
 
Introduction to Amazon Lightsail
Introduction to Amazon LightsailIntroduction to Amazon Lightsail
Introduction to Amazon LightsailAmazon Web Services
 
Introduction To AWS & AWS Lambda
Introduction To AWS & AWS LambdaIntroduction To AWS & AWS Lambda
Introduction To AWS & AWS LambdaAn Nguyen
 
Achieving CI/CD with Kubernetes
Achieving CI/CD with KubernetesAchieving CI/CD with Kubernetes
Achieving CI/CD with KubernetesRamit Surana
 
Amazon EKS - Elastic Container Service for Kubernetes
Amazon EKS - Elastic Container Service for KubernetesAmazon EKS - Elastic Container Service for Kubernetes
Amazon EKS - Elastic Container Service for KubernetesAmazon Web Services
 
AWS Monitoring & Logging
AWS Monitoring & LoggingAWS Monitoring & Logging
AWS Monitoring & LoggingJason Poley
 
Storwize SVC presentation February 2017
Storwize SVC presentation February 2017Storwize SVC presentation February 2017
Storwize SVC presentation February 2017Joe Krotz
 
IAM Introduction and Best Practices
IAM Introduction and Best PracticesIAM Introduction and Best Practices
IAM Introduction and Best PracticesAmazon Web Services
 
DevOps on AWS - Building Systems to Deliver Faster
DevOps on AWS - Building Systems to Deliver FasterDevOps on AWS - Building Systems to Deliver Faster
DevOps on AWS - Building Systems to Deliver FasterAmazon Web Services
 
Azure Identity and access management
Azure   Identity and access managementAzure   Identity and access management
Azure Identity and access managementDinusha Kumarasiri
 
Amazon Virtual Private Cloud (VPC): Networking Fundamentals and Connectivity ...
Amazon Virtual Private Cloud (VPC): Networking Fundamentals and Connectivity ...Amazon Virtual Private Cloud (VPC): Networking Fundamentals and Connectivity ...
Amazon Virtual Private Cloud (VPC): Networking Fundamentals and Connectivity ...Amazon Web Services
 
AWS re:Invent 2016: Enabling Enterprise Migrations: Creating an AWS Landing Z...
AWS re:Invent 2016: Enabling Enterprise Migrations: Creating an AWS Landing Z...AWS re:Invent 2016: Enabling Enterprise Migrations: Creating an AWS Landing Z...
AWS re:Invent 2016: Enabling Enterprise Migrations: Creating an AWS Landing Z...Amazon Web Services
 
Infrastructure as Code for Azure: ARM or Terraform?
Infrastructure as Code for Azure: ARM or Terraform?Infrastructure as Code for Azure: ARM or Terraform?
Infrastructure as Code for Azure: ARM or Terraform?Katherine Golovinova
 

La actualidad más candente (20)

Understanding AWS Secrets Manager - AWS Online Tech Talks
Understanding AWS Secrets Manager - AWS Online Tech TalksUnderstanding AWS Secrets Manager - AWS Online Tech Talks
Understanding AWS Secrets Manager - AWS Online Tech Talks
 
AWS API Gateway
AWS API GatewayAWS API Gateway
AWS API Gateway
 
gkkAwscloudpractitioneressentialstraining
gkkAwscloudpractitioneressentialstraininggkkAwscloudpractitioneressentialstraining
gkkAwscloudpractitioneressentialstraining
 
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_Singapore
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_SingaporeCI-CD with AWS Developer Tools and Fargate_AWSPSSummit_Singapore
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_Singapore
 
Introduction to Amazon Lightsail
Introduction to Amazon LightsailIntroduction to Amazon Lightsail
Introduction to Amazon Lightsail
 
Introduction To AWS & AWS Lambda
Introduction To AWS & AWS LambdaIntroduction To AWS & AWS Lambda
Introduction To AWS & AWS Lambda
 
Achieving CI/CD with Kubernetes
Achieving CI/CD with KubernetesAchieving CI/CD with Kubernetes
Achieving CI/CD with Kubernetes
 
AWS Tagging Strategy
AWS Tagging StrategyAWS Tagging Strategy
AWS Tagging Strategy
 
Amazon EKS - Elastic Container Service for Kubernetes
Amazon EKS - Elastic Container Service for KubernetesAmazon EKS - Elastic Container Service for Kubernetes
Amazon EKS - Elastic Container Service for Kubernetes
 
AWS Monitoring & Logging
AWS Monitoring & LoggingAWS Monitoring & Logging
AWS Monitoring & Logging
 
Api Testing.pdf
Api Testing.pdfApi Testing.pdf
Api Testing.pdf
 
Storwize SVC presentation February 2017
Storwize SVC presentation February 2017Storwize SVC presentation February 2017
Storwize SVC presentation February 2017
 
IAM Introduction and Best Practices
IAM Introduction and Best PracticesIAM Introduction and Best Practices
IAM Introduction and Best Practices
 
DevOps on AWS - Building Systems to Deliver Faster
DevOps on AWS - Building Systems to Deliver FasterDevOps on AWS - Building Systems to Deliver Faster
DevOps on AWS - Building Systems to Deliver Faster
 
Azure Identity and access management
Azure   Identity and access managementAzure   Identity and access management
Azure Identity and access management
 
Amazon Virtual Private Cloud (VPC): Networking Fundamentals and Connectivity ...
Amazon Virtual Private Cloud (VPC): Networking Fundamentals and Connectivity ...Amazon Virtual Private Cloud (VPC): Networking Fundamentals and Connectivity ...
Amazon Virtual Private Cloud (VPC): Networking Fundamentals and Connectivity ...
 
Introduction to Amazon EKS
Introduction to Amazon EKSIntroduction to Amazon EKS
Introduction to Amazon EKS
 
AWS re:Invent 2016: Enabling Enterprise Migrations: Creating an AWS Landing Z...
AWS re:Invent 2016: Enabling Enterprise Migrations: Creating an AWS Landing Z...AWS re:Invent 2016: Enabling Enterprise Migrations: Creating an AWS Landing Z...
AWS re:Invent 2016: Enabling Enterprise Migrations: Creating an AWS Landing Z...
 
Infrastructure as Code for Azure: ARM or Terraform?
Infrastructure as Code for Azure: ARM or Terraform?Infrastructure as Code for Azure: ARM or Terraform?
Infrastructure as Code for Azure: ARM or Terraform?
 
AWS Security Best Practices
AWS Security Best PracticesAWS Security Best Practices
AWS Security Best Practices
 

Similar a Stable master workflow with Gerrit Code Review

Git workflows automat-it
Git workflows automat-itGit workflows automat-it
Git workflows automat-itAutomat-IT
 
Git 101 Workshop
Git 101 WorkshopGit 101 Workshop
Git 101 WorkshopJoy Seng
 
Git Distributed Version Control System
Git   Distributed Version Control SystemGit   Distributed Version Control System
Git Distributed Version Control SystemVictor Wong
 
Introduction to Git for Artists
Introduction to Git for ArtistsIntroduction to Git for Artists
Introduction to Git for ArtistsDavid Newbury
 
Introduction To Git Workshop
Introduction To Git WorkshopIntroduction To Git Workshop
Introduction To Git Workshopthemystic_ca
 
Jedi Mind Tricks for Git
Jedi Mind Tricks for GitJedi Mind Tricks for Git
Jedi Mind Tricks for GitJan Krag
 
Collaborative development with Git | Workshop
Collaborative development with Git | WorkshopCollaborative development with Git | Workshop
Collaborative development with Git | WorkshopAnuchit Chalothorn
 
Git Developer Cheatsheet
Git Developer CheatsheetGit Developer Cheatsheet
Git Developer CheatsheetAbdul Basit
 
Introduction to Git Version Control System
Introduction to Git Version Control SystemIntroduction to Git Version Control System
Introduction to Git Version Control SystemOleksandr Zaitsev
 
Intro to git and git hub
Intro to git and git hubIntro to git and git hub
Intro to git and git hubVenkat Malladi
 
Source Code Management with Git
Source Code Management with GitSource Code Management with Git
Source Code Management with GitThings Lab
 
Matt Gauger - Git & Github web414 December 2010
Matt Gauger - Git & Github web414 December 2010Matt Gauger - Git & Github web414 December 2010
Matt Gauger - Git & Github web414 December 2010Matt Gauger
 
HackMTY - GitHub Workshop
HackMTY - GitHub WorkshopHackMTY - GitHub Workshop
HackMTY - GitHub WorkshopLuis Lamadrid
 

Similar a Stable master workflow with Gerrit Code Review (20)

Git workflows automat-it
Git workflows automat-itGit workflows automat-it
Git workflows automat-it
 
Git 101 Workshop
Git 101 WorkshopGit 101 Workshop
Git 101 Workshop
 
Git github
Git githubGit github
Git github
 
Git Distributed Version Control System
Git   Distributed Version Control SystemGit   Distributed Version Control System
Git Distributed Version Control System
 
Introduction to Git for Artists
Introduction to Git for ArtistsIntroduction to Git for Artists
Introduction to Git for Artists
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshell
 
Introduction To Git Workshop
Introduction To Git WorkshopIntroduction To Git Workshop
Introduction To Git Workshop
 
Introduction to Git (part 1)
Introduction to Git (part 1)Introduction to Git (part 1)
Introduction to Git (part 1)
 
How to use git without rage
How to use git without rageHow to use git without rage
How to use git without rage
 
Switching to Git
Switching to GitSwitching to Git
Switching to Git
 
Jedi Mind Tricks in Git
Jedi Mind Tricks in GitJedi Mind Tricks in Git
Jedi Mind Tricks in Git
 
Jedi Mind Tricks for Git
Jedi Mind Tricks for GitJedi Mind Tricks for Git
Jedi Mind Tricks for Git
 
Gittalk
GittalkGittalk
Gittalk
 
Collaborative development with Git | Workshop
Collaborative development with Git | WorkshopCollaborative development with Git | Workshop
Collaborative development with Git | Workshop
 
Git Developer Cheatsheet
Git Developer CheatsheetGit Developer Cheatsheet
Git Developer Cheatsheet
 
Introduction to Git Version Control System
Introduction to Git Version Control SystemIntroduction to Git Version Control System
Introduction to Git Version Control System
 
Intro to git and git hub
Intro to git and git hubIntro to git and git hub
Intro to git and git hub
 
Source Code Management with Git
Source Code Management with GitSource Code Management with Git
Source Code Management with Git
 
Matt Gauger - Git & Github web414 December 2010
Matt Gauger - Git & Github web414 December 2010Matt Gauger - Git & Github web414 December 2010
Matt Gauger - Git & Github web414 December 2010
 
HackMTY - GitHub Workshop
HackMTY - GitHub WorkshopHackMTY - GitHub Workshop
HackMTY - GitHub Workshop
 

Más de Luca Milanesio

What's new in Gerrit Code Review v3.1 and beyond
What's new in Gerrit Code Review v3.1 and beyondWhat's new in Gerrit Code Review v3.1 and beyond
What's new in Gerrit Code Review v3.1 and beyondLuca Milanesio
 
Gerrit Analytics applied to Android source code
Gerrit Analytics applied to Android source codeGerrit Analytics applied to Android source code
Gerrit Analytics applied to Android source codeLuca Milanesio
 
Cloud-native Gerrit Code Review
Cloud-native Gerrit Code ReviewCloud-native Gerrit Code Review
Cloud-native Gerrit Code ReviewLuca Milanesio
 
Gerrit Code Review migrations step-by-step
Gerrit Code Review migrations step-by-stepGerrit Code Review migrations step-by-step
Gerrit Code Review migrations step-by-stepLuca Milanesio
 
Gerrit Code Review v3.2 and v3.3
Gerrit Code Review v3.2 and v3.3Gerrit Code Review v3.2 and v3.3
Gerrit Code Review v3.2 and v3.3Luca Milanesio
 
ChronicleMap non-blocking cache for Gerrit v3.3
ChronicleMap non-blocking cache for Gerrit v3.3ChronicleMap non-blocking cache for Gerrit v3.3
ChronicleMap non-blocking cache for Gerrit v3.3Luca Milanesio
 
Gerrit Code Review multi-site
Gerrit Code Review multi-siteGerrit Code Review multi-site
Gerrit Code Review multi-siteLuca Milanesio
 
What's new in Gerrit Code Review 3.0
What's new in Gerrit Code Review 3.0What's new in Gerrit Code Review 3.0
What's new in Gerrit Code Review 3.0Luca Milanesio
 
Gerrit User Summit 2019 Keynote
Gerrit User Summit 2019 KeynoteGerrit User Summit 2019 Keynote
Gerrit User Summit 2019 KeynoteLuca Milanesio
 
Gerrit multi-master / multi-site at GerritHub
Gerrit multi-master / multi-site at GerritHubGerrit multi-master / multi-site at GerritHub
Gerrit multi-master / multi-site at GerritHubLuca Milanesio
 
GerritHub a true Gerrit migration story to v2.15
GerritHub a true Gerrit migration story to v2.15GerritHub a true Gerrit migration story to v2.15
GerritHub a true Gerrit migration story to v2.15Luca Milanesio
 
Gerrit User Summit 2018 - Keynote
Gerrit User Summit 2018 - Keynote Gerrit User Summit 2018 - Keynote
Gerrit User Summit 2018 - Keynote Luca Milanesio
 
Jenkins plugin for Gerrit Code Review pipelines
Jenkins plugin for Gerrit Code Review pipelinesJenkins plugin for Gerrit Code Review pipelines
Jenkins plugin for Gerrit Code Review pipelinesLuca Milanesio
 
Gerrit User Summit 2017 Keynote
Gerrit User Summit 2017 KeynoteGerrit User Summit 2017 Keynote
Gerrit User Summit 2017 KeynoteLuca Milanesio
 
How to keep Jenkins logs forever without performance issues
How to keep Jenkins logs forever without performance issuesHow to keep Jenkins logs forever without performance issues
How to keep Jenkins logs forever without performance issuesLuca Milanesio
 
Jenkins Pipeline on your Local Box to Reduce Cycle Time
Jenkins Pipeline on your Local Box to Reduce Cycle TimeJenkins Pipeline on your Local Box to Reduce Cycle Time
Jenkins Pipeline on your Local Box to Reduce Cycle TimeLuca Milanesio
 
Jenkins world 2017 - Data-Driven CI Pipeline with Gerrit Code Review
Jenkins world 2017 - Data-Driven CI Pipeline with Gerrit Code ReviewJenkins world 2017 - Data-Driven CI Pipeline with Gerrit Code Review
Jenkins world 2017 - Data-Driven CI Pipeline with Gerrit Code ReviewLuca Milanesio
 
Gerrit Code Review Analytics
Gerrit Code Review AnalyticsGerrit Code Review Analytics
Gerrit Code Review AnalyticsLuca Milanesio
 
Zero-Downtime Gerrit Code Review Upgrade
Zero-Downtime Gerrit Code Review UpgradeZero-Downtime Gerrit Code Review Upgrade
Zero-Downtime Gerrit Code Review UpgradeLuca Milanesio
 
Speed up Continuous Delivery with BigData Analytics
Speed up Continuous Delivery with BigData AnalyticsSpeed up Continuous Delivery with BigData Analytics
Speed up Continuous Delivery with BigData AnalyticsLuca Milanesio
 

Más de Luca Milanesio (20)

What's new in Gerrit Code Review v3.1 and beyond
What's new in Gerrit Code Review v3.1 and beyondWhat's new in Gerrit Code Review v3.1 and beyond
What's new in Gerrit Code Review v3.1 and beyond
 
Gerrit Analytics applied to Android source code
Gerrit Analytics applied to Android source codeGerrit Analytics applied to Android source code
Gerrit Analytics applied to Android source code
 
Cloud-native Gerrit Code Review
Cloud-native Gerrit Code ReviewCloud-native Gerrit Code Review
Cloud-native Gerrit Code Review
 
Gerrit Code Review migrations step-by-step
Gerrit Code Review migrations step-by-stepGerrit Code Review migrations step-by-step
Gerrit Code Review migrations step-by-step
 
Gerrit Code Review v3.2 and v3.3
Gerrit Code Review v3.2 and v3.3Gerrit Code Review v3.2 and v3.3
Gerrit Code Review v3.2 and v3.3
 
ChronicleMap non-blocking cache for Gerrit v3.3
ChronicleMap non-blocking cache for Gerrit v3.3ChronicleMap non-blocking cache for Gerrit v3.3
ChronicleMap non-blocking cache for Gerrit v3.3
 
Gerrit Code Review multi-site
Gerrit Code Review multi-siteGerrit Code Review multi-site
Gerrit Code Review multi-site
 
What's new in Gerrit Code Review 3.0
What's new in Gerrit Code Review 3.0What's new in Gerrit Code Review 3.0
What's new in Gerrit Code Review 3.0
 
Gerrit User Summit 2019 Keynote
Gerrit User Summit 2019 KeynoteGerrit User Summit 2019 Keynote
Gerrit User Summit 2019 Keynote
 
Gerrit multi-master / multi-site at GerritHub
Gerrit multi-master / multi-site at GerritHubGerrit multi-master / multi-site at GerritHub
Gerrit multi-master / multi-site at GerritHub
 
GerritHub a true Gerrit migration story to v2.15
GerritHub a true Gerrit migration story to v2.15GerritHub a true Gerrit migration story to v2.15
GerritHub a true Gerrit migration story to v2.15
 
Gerrit User Summit 2018 - Keynote
Gerrit User Summit 2018 - Keynote Gerrit User Summit 2018 - Keynote
Gerrit User Summit 2018 - Keynote
 
Jenkins plugin for Gerrit Code Review pipelines
Jenkins plugin for Gerrit Code Review pipelinesJenkins plugin for Gerrit Code Review pipelines
Jenkins plugin for Gerrit Code Review pipelines
 
Gerrit User Summit 2017 Keynote
Gerrit User Summit 2017 KeynoteGerrit User Summit 2017 Keynote
Gerrit User Summit 2017 Keynote
 
How to keep Jenkins logs forever without performance issues
How to keep Jenkins logs forever without performance issuesHow to keep Jenkins logs forever without performance issues
How to keep Jenkins logs forever without performance issues
 
Jenkins Pipeline on your Local Box to Reduce Cycle Time
Jenkins Pipeline on your Local Box to Reduce Cycle TimeJenkins Pipeline on your Local Box to Reduce Cycle Time
Jenkins Pipeline on your Local Box to Reduce Cycle Time
 
Jenkins world 2017 - Data-Driven CI Pipeline with Gerrit Code Review
Jenkins world 2017 - Data-Driven CI Pipeline with Gerrit Code ReviewJenkins world 2017 - Data-Driven CI Pipeline with Gerrit Code Review
Jenkins world 2017 - Data-Driven CI Pipeline with Gerrit Code Review
 
Gerrit Code Review Analytics
Gerrit Code Review AnalyticsGerrit Code Review Analytics
Gerrit Code Review Analytics
 
Zero-Downtime Gerrit Code Review Upgrade
Zero-Downtime Gerrit Code Review UpgradeZero-Downtime Gerrit Code Review Upgrade
Zero-Downtime Gerrit Code Review Upgrade
 
Speed up Continuous Delivery with BigData Analytics
Speed up Continuous Delivery with BigData AnalyticsSpeed up Continuous Delivery with BigData Analytics
Speed up Continuous Delivery with BigData Analytics
 

Último

How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesManik S Magar
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 

Último (20)

How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 

Stable master workflow with Gerrit Code Review

  • 1. Gerrit Code Review First steps with Git and Code Review Workflow Luca Milanesio luca@gerritforge.com
  • 2. @gitenterprise @gerritreview • Author of "Learning Gerrit Code Review" • Director of GerritForge – Founded in the UK – HQ in London, Offices in the USA, UK, Germany, Italy – Committed to OpenSource About me and GerritForge GerritCode Review
  • 3. @gitenterprise @gerritreview Agenda – Introduction to Code Review (morning) • Benefits of Code Review • Overview of Gerrit • Refresh of advanced Git commands needed for review –Exercise: advanced git commands • Pushing changes for review • Push validation (Jira, uploadvalidator, Jenkins) • Review using Gerrit UX –Exercise: create a change and review workflow –Exercise: validation with Jenkins and submit • Wrap-up: Code Review Etiquette, Q&A
  • 4. @gitenterprise @gerritreview Agenda – Practicing Code Review workflow (afternoon) • Exercise: adding a new patch-set to existing changes • Exercise: multiple patch-sets reviews • Exercise: rebase and conflicts resolution • Wrap-up, Q&A
  • 5. @gitenterprise @gerritreview Four Benefits of Code Review 1. Build Stability
  • 6. @gitenterprise @gerritreview Four Benefits of Code Review 2. Knowledge Sharing
  • 7. @gitenterprise @gerritreview Four Benefits of Code Review 3. Team Dynamics – Collective Ownership
  • 8. @gitenterprise @gerritreview Four Benefits of Code Review 4. Qualitative Code Selection
  • 9. Overview of Gerrit Introducing Gerrit Code Review
  • 10. @gitenterprise @gerritreview Gerrit Code Review – brief history The idea: Guido Van Rossum – Code-review for Perforce – Porting to SVN and OpenSourced – Python-based 2008 - Project fork for AOSP (Shawn Pearce / Joe Onorato) – Name changed to Gerrit Rietveld – Based on Git – Set of “patches” on original Guido’s Rietveld project 2009 - Gerrit 2, the Java + GWT rewriting (Shawn Pearce) Google Mondrian Rietveld Gerrit Rietveld gerrit
  • 11. @gitenterprise @gerritreview Gerrit = pre-commit review Review before push to target branch • Pros: – Make sure every commit is good – Enforce company standards (e.g. Jira association) – Keep Build and Team code stability – Tightly integrated with Git • Cons: – Slows down code integration – Needs tooling – Git proficiency
  • 13. @gitenterprise @gerritreview Gerrit as simple Git Server Gerrit Code Review building blocks: 1.Advanced Git Server 2.Review API 3.Extensible Workflow
  • 14. @gitenterprise @gerritreview 10 git commands commonly used in Gerrit Workflow 1. git clone 2. git fetch 3. git checkout 4. git add 5. git commit --amend 6. git reset 7. git rebase 8. git merge 9. git cherry-pick 10. git remote
  • 15. @gitenterprise @gerritreview Git refresh – Hands-on Lab#1 Practicing advanced Git commands
  • 16. @gitenterprise @gerritreview Lab#1: Gerrit Repositories Browser: Gitiles
  • 17. @gitenterprise @gerritreview Lab#1: Clone the repository from Gerrit $ git clone http://gerrit.training/lab1 Cloning into 'lab1'... remote: Counting objects: 2, done remote: Finding sources: 100% (2/2) remote: Total 2 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (2/2), done. Checking connectivity... done. $ cd lab1 (master) $
  • 18. @gitenterprise @gerritreview Lab#1: Create a feature branch and add one commit (master) $ git checkout -b feature/my-true-story Switched to a new branch 'feature/my-true-story' (feature/my-true-story) $ echo "This is me" > my-true-story.md (feature/my-true-story) $ git add . && git commit -m "My true story" [feature/my-true-story 0368861] My true story 1 file changed, 1 insertion(+) create mode 100644 my-true-story.md
  • 19. @gitenterprise @gerritreview Lab#1: Push to Gerrit (feature/my-true-story) $ git push --set-upstream origin feature/my-true-story Username for 'http://gerrit.training': admin Password for 'http://admin@gerrit.training': secret Counting objects: 3, done. Writing objects: 100% (3/3), 266 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: Processing changes: refs: 1, done To http://gerrit.training/lab1 * [new branch] feature/my-true-story -> feature/my-true-story Branch feature/my-true-story set up to track remote branch feature/my-true-story from origin.
  • 20. @gitenterprise @gerritreview Lab#1: See feature branches in Gitiles
  • 21. @gitenterprise @gerritreview Lab#1: Another developer pushes a feature branch (master) $ git checkout -b feature/another-story Switched to a new branch 'feature/another-story' (feature/another-story) $ echo "This is you" > another-story.md (feature/another-story) $ git add . && git commit –m "Another story" [feature/my-true-story 036bc6d] Another story 1 file changed, 1 insertion(+) create mode 100644 another-story.md (feature/another-story) $ git push origin feature/another-story
  • 22. @gitenterprise @gerritreview Lab#1: Working in "detached HEAD" mode $ git fetch origin feature/another-story From http://gerrit.training/lab1 * branch feature/another-story -> FETCH_HEAD $ git checkout FETCH_HEAD Note: checking out 'FETCH_HEAD'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name> HEAD is now at 09385fc... Another story
  • 23. @gitenterprise @gerritreview Lab#1 – Amending a commit in "detached" HEAD ((09385fc...))$ echo "yet another word" >> another-story.md ((09385fc...))$ git commit -a --amend -m "Amended commit" [detached HEAD bc4970b] Amended commit Date: Thu May 18 23:35:12 2017 +0100 1 file changed, 1 insertion(+) create mode 100644 another-story.md ((bc4970b...))$ git push -f origin HEAD:feature/another-story Counting objects: 3, done. Writing objects: 100% (3/3), 269 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: Processing changes: refs: 1, done To http://gerrit.training/lab1 + 09385fc...bc4970b HEAD -> feature/another-story (forced update)
  • 24. @gitenterprise @gerritreview Lab#1 – Fetching last HEAD of a branch ((09385fc...))$ git checkout feature/another-story Previous HEAD position was c14001a... Amended commit Switched to branch 'feature/another-story' Your branch and 'origin/feature/another-story' have diverged, and have 1 and 1 different commits each, respectively. (use "git pull" to merge the remote branch into yours) (feature/another-story)$ git fetch origin From http://gerrit.training/lab1 * branch feature/another-story -> feature/another-story (forced update) (feature/another-story)$ git reset --hard origin/feature/another-story HEAD is now at c14001a Amended commit
  • 25. @gitenterprise @gerritreview Lab#1 – Rebase a feature branch against master (1) $ git checkout master Switched to branch 'master' Your branch is up-to-date with 'origin/master'. (master)$ echo foo > bar (master)$ git add bar && git commit -m foo [master 52c1df5] foo 1 file changed, 1 insertion(+) create mode 100644 bar (master)$ git push Counting objects: 3, done. Writing objects: 100% (3/3), 237 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: Processing changes: refs: 1, done To http://gerrit.training/lab1 83db6be..52c1df5 master -> master
  • 26. @gitenterprise @gerritreview Lab#1 – Rebase a feature branch against master (2) $ git checkout feature/another-story Switched to branch 'feature/another-story' Your branch is up-to-date with 'origin/feature/another-story'. (feature/another-story)$ git fetch && git rebase origin/master First, rewinding head to replay your work on top of it... Applying: Amended commit (feature/another-story)$ git push -f origin feature/another-story Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 316 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: Processing changes: refs: 1, done To http://gerrit.training/lab1 + c14001a...c9841bf feature/another-story -> feature/another-story (forced update)
  • 27. @gitenterprise @gerritreview Lab#1 – Cherry-pick commits between branches (1) 83db 52c10 0368 dda2 c984 master feature/another-story feature/my-true-story feature/yet-another-story
  • 28. @gitenterprise @gerritreview Lab#1 – Cherry-pick commits between branches (2) (feature/another-story)$ git cherry-pick 0368 [feature/another-story 31911f1] My true story Date: Thu May 18 08:52:49 2017 +0100 1 file changed, 1 insertion(+) create mode 100644 my-true-story.md (feature/another-story)$ git push Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 332 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: Processing changes: refs: 1, done To http://gerrit.training/lab1 c9841bf..31911f1 feature/another-story -> feature/another-story
  • 29. @gitenterprise @gerritreview Lab#1 – Cherry-pick commits between branches (3) 83db 52c10 0368 dda2 c984 master feature/another-story feature/my-true-story feature/yet-another-story 3191
  • 30. @gitenterprise @gerritreview Lab#1 – Working with remotes $ git remote -v origin http://gerrit.training/lab1 (fetch) origin http://gerrit.training/lab1 (push) $ git remote set-url --push origin ssh://admin@gerrit.training:29418/lab1 $ git remote -v origin http://gerrit.training/lab1 (fetch) origin ssh://admin@gerrit.training:29418/lab1 (push) $ git remote add sshorigin ssh://admin@gerrit.training:29418/lab1 $ git remote -v origin http://gerrit.training/lab1 (fetch) origin ssh://admin@gerrit.training:29418/lab1 (push) sshorigin ssh://admin@gerrit.training:29418/lab1 (fetch) sshorigin ssh://admin@gerrit.training:29418/lab1 (push)
  • 32. @gitenterprise @gerritreview Code Review Workflow (0) A1 origin/branch CI Build: OK
  • 33. @gitenterprise @gerritreview Code Review Workflow (1) A1 origin/branch A1 clone CI Build: OK branch
  • 34. @gitenterprise @gerritreview Code Review Workflow (2) A1 origin/branch A1 clone CI Build: OK branchC2
  • 35. @gitenterprise @gerritreview Code Review Workflow (3) A1 origin/branch A1 clone CI Build: OK branchC2 C2 push refs/for/branch
  • 36. @gitenterprise @gerritreview Code Review Workflow (4) A1 origin/branch A1 clone CI Build: OK branchC2 C2 push refs/for/branch Verified: -1 (build failed)
  • 37. @gitenterprise @gerritreview Code Review Workflow (5) A1 origin/branch A1 clone CI Build: OK branchC2 C2 push refs/for/branch Verified: -1 (build failed) C2* amend
  • 38. @gitenterprise @gerritreview Code Review Workflow (6) A1 origin/branch A1 clone CI Build: OK branchC2 C2 push refs/for/branch Verified: -1 (build failed) C2* amend C2* push
  • 39. @gitenterprise @gerritreview Code Review Workflow (7) A1 origin/branch A1 clone CI Build: OK branchC2 C2 push refs/for/branch Verified: -1 (build failed) C2* amend C2* push Verified: +1 (build OK)
  • 40. @gitenterprise @gerritreview Code Review Workflow (8) A1 origin/branch A1 clone CI Build: OK branchC2 C2 push refs/for/branch Verified: -1 (build failed) C2* amend C2* push Verified: +1 (build OK) Reviewed: +2
  • 41. @gitenterprise @gerritreview Code Review Workflow (9) A1 origin/branch C2 C2* A1 clone C2 C2* push Verified: -1 (build failed) Verified: +1 (build OK) Reviewed: +2 C2* CI Build: OK push amend refs/for/branch branch
  • 42. @gitenterprise @gerritreview Code Review Workflow (10) A1 origin/branch C2 C2* A1 clone C2 C2* push Verified: -1 (build failed) Verified: +1 (build OK) Reviewed: +2 CI Build: OK C2* CI Build: OK push amend refs/for/branch branch
  • 43. @gitenterprise @gerritreview Gerrit concepts: target branch A1 origin/branch C2 C2* A1 clone C2 C2* push Reviewed: +2 C2* push amend refs/for/branch branch Target Branch
  • 44. @gitenterprise @gerritreview Gerrit concepts: magic ref A1 origin/branch C2 C2* A1 clone C2 C2* push Reviewed: +2 C2* push amend refs/for/branch branch Target Branch Magic Ref
  • 45. @gitenterprise @gerritreview Gerrit concepts: change (1) A1 origin/branch C2 C2* A1 clone C2 C2* push Reviewed: +2 C2* push amend refs/for/branch branch Target Branch Change Magic Ref
  • 46. @gitenterprise @gerritreview Gerrit concepts: change (2) • Assigned by the Git client • Generated by a Gerrit hook • Appended to the Git commit footer meta-data • Kept across multiple amendments to the commit Commit headline for review This is the Git commit message description possibly multi-line Change-Id: I14343c9ef7445558111ccfc345d5e9eb1d60529a
  • 47. @gitenterprise @gerritreview Gerrit concepts: patch-set (1) A1 origin/branch C2 C2* A1 clone C2 C2* push Reviewed: +2 C2* push amend refs/for/branch branch Target Branch Change Patch-Set Magic Ref
  • 48. @gitenterprise @gerritreview Gerrit concepts: patch-set (2) • Assigned by Gerrit Server • Unique for every commit • Identified by – Change Number (sequence) – Patch Number (sequence)
  • 49. @gitenterprise @gerritreview Gerrit concepts: review label and score (1) A1 origin/branch C2 C2* A1 clone C2 C2* push Reviewed: +2 C2* push amend refs/for/branch branch Target Branch Change Patch-Set Review Label Magic Ref
  • 50. @gitenterprise @gerritreview Gerrit concepts: review label and score (2) • Label = category of review • Default Labels: – Code-Review (human) – Verified (build) • Score types – Neutral (comments) – Positive (good) – Negative (changes needed) • Special Scores – Max = approved – Min = veto
  • 51. @gitenterprise @gerritreview Gerrit concept: Submit / Merge • Last patch-set  target branch • Enabled by rules on review • Default Submit rules: Code-Review = +2 and Verified = +1
  • 52. @gitenterprise @gerritreview Gerrit as review tool Gerrit Code Review building blocks: 1.Advanced Git Server 2.Review API 3.Extensible Workflow
  • 53. @gitenterprise @gerritreview Code Review Workflow – Hands-on Lab#2 First Code Review Workflow
  • 55. @gitenterprise @gerritreview Lab#2: Clone the repository with commit-msg hook $ git clone http://admin@gerrit.training/a/lab2 && (cd lab2 && curl -kLo `git rev-parse --git-dir`/hooks/commit-msg http://admin@gerrit.training/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg) Cloning into 'lab2'... remote: Counting objects: 2, done remote: Finding sources: 100% (2/2) Unpacking objects: 100% (2/2), done. remote: Total 2 (delta 0), reused 0 (delta 0) Checking connectivity... done. % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 4691 100 4691 0 0 527k 0 --:--:-- --:--:-- --:--:-- 572k $ cd lab2 (master) $
  • 56. @gitenterprise @gerritreview Lab#2: Create a local commit and push for review (master)$ echo "My first review" > first-review (master)$ git add . && git commit -m "My first review" [master 4ee8383] My first review 1 file changed, 1 insertion(+) create mode 100644 first-review (master)$ git push origin HEAD:refs/for/master Counting objects: 3, done. Writing objects: 100% (3/3), 309 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: Processing changes: new: 1, refs: 1, done remote: remote: New Changes: remote: http://gerrit.training/2 My first review remote: To http://admin@gerrit.training/a/lab2 * [new branch] master -> refs/for/master
  • 57. @gitenterprise @gerritreview Lab#2: Push for review explained (master)$ echo "My first review" > first-review (master)$ git add . && git commit -m "My first review" [master 4ee8383] My first review 1 file changed, 1 insertion(+) create mode 100644 first-review (master)$ git push origin HEAD:refs/for/master Counting objects: 3, done. Writing objects: 100% (3/3), 309 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: Processing changes: new: 1, refs: 1, done remote: remote: New Changes: remote: http://gerrit.training/2 My first review remote: To http://admin@gerrit.training/a/lab2 * [new branch] master -> refs/for/master HEAD = latest commit of current branch ref/for/master = magic ref for reviews targeting master
  • 58. @gitenterprise @gerritreview Lab#2: List of open changes Commit headline Commit author Gerrit project Target branch
  • 59. @gitenterprise @gerritreview Lab#2: Change details (1) Change URL Change Number and Link Code Review actions Commit message Change-Id Engage with reviewers Open review in Code Browser (Gitiles)
  • 60. @gitenterprise @gerritreview Lab#2: Change details (2) Current Patch-Set Git commands to fetch the Patch-Set Diff view controls Side-by-Side Or Unified diff-view Change audit including review comments
  • 62. @gitenterprise @gerritreview Lab#2: Draft comments review Comments can be associated to words, entire line or entire file Comments can be added, edited, discarted and then sent atomically
  • 63. @gitenterprise @gerritreview Lab#2: Sending draft comments Shows number of draft comments Allow review label, score and overall message Review draft comments and send them atomically
  • 64. @gitenterprise @gerritreview Lab#2: Review notification • All reviewers receive notification via e-mail (see example)
  • 65. @gitenterprise @gerritreview Lab#2: Reply to comments and keep the discussion thread Change message s keep the message thread
  • 66. @gitenterprise @gerritreview Lab#2: Submit the change Submit rules are satisfied. Press the Submit button
  • 67. @gitenterprise @gerritreview Lab#2: See the change in code browser (Gitiles) Keeps reference to Change-Id
  • 69. @gitenterprise @gerritreview Jenkins Build Validation Gives Verified +1 / -1 based on the Build and Tests
  • 70. @gitenterprise @gerritreview Automatic scoring •Post Change / Patch-Set upload trigger –Triggers Jenkins build on new Changes –Triggers Jenkins build on new Patch-Sets •Feedback as auto-review –Automatic scoring when build completed –Score  Submit rule evaluation
  • 71. @gitenterprise @gerritreview Atlassian Jira validation Jira User Developer: PRJ-87 My code fix Git push Create references GerritCode Review PRJ-87
  • 72. @gitenterprise @gerritreview Pre-push validation • Validate commit during the push –Commit message restrictions (regex) –Existence of the Jira ticket • Cross-reference Change to Jira ID –Change  Jira –Jira  Change –Change audit-trail in Jira • Blocks creation of Change / Patch-Set / Commits –Push failed –Failure description
  • 73. @gitenterprise @gerritreview Content validation Project Onwer Assign project policiesDeveloper: file1.java my-super-big-file.dat Git push Check commit policies GerritCode Review
  • 74. @gitenterprise @gerritreview Content Validation during push • Project owner access • Define blocks • Require footer • Block keywords
  • 75. @gitenterprise @gerritreview Play with Validations – Hands-on Lab#3 Experiment Jenkins, Jira and Content Validations
  • 77. @gitenterprise @gerritreview Amend Changes – Hands-on Lab#4 Add additional patches to existing Changes
  • 78. @gitenterprise @gerritreview Amend Changes – Hands-on Lab#5 Create dependent Changes
  • 79. @gitenterprise @gerritreview Amend Changes – Hands-on Lab#6 Server-side Change rebase and conflict resolution
  • 81. @gitenterprise @gerritreview Etiquette: Making Changes • Each Change should add something USABLE –Change = complete feature OR –Change = complete bug-fix • Each Change should be STABLE
  • 82. @gitenterprise @gerritreview Etiquette: Making Changes • Each change should focus on ONLY ONE THING –do not mix features, bug-fixes • Why is this bad? –You need the bug-fix in another branch. (git cherry-pick is not easy) –The feature broke something. (git revert cannot be used) –It’s more difficult to review.
  • 83. @gitenterprise @gerritreview Etiquette: Making Changes •Push only Changes that are READY –Q: Who wants to merge unfinished changes? –Q: Who wants to review unfinished changes? •It is unclear for reviewers –what is an issue and –what is simply not done yet
  • 84. @gitenterprise @gerritreview Etiquette: Making Changes • Explain the WHY for the Change –what was changed can be seen from the diff • Example: is this commit message good or bad? "Disable category GET API" – Commit Message without motivation –No info about why this had to be disabled. … git blame gets less useful 
  • 85. @gitenterprise @gerritreview Etiquette: Making Changes •Make BIG features as series of SMALL Changes • Each Change adds something usable • Mark the change series as a topic