Code Management¶
Best Practices¶
- Build an abstract Layer between your Version Control System system and the entire SCM Toolkit.
- Atomicity, so every operation is atomic, 0 or 1, True or False, there are no states in between.
- Avoid storing different types of data than the actual source code (no binfiles, media, etc..).
Common Problems¶
Pull Request VS Code Review¶
- On Pull Requests: on-pull-requests
Choosing VCS System¶
- Ohloh comparison: ohloh-comparison
- Why Git? why-git
- 2013: A Year of Open Source at Facebook: open-source-facebook
- The Open Source Wave in SCM: open-source-wave
Branching¶
- Recommendations on Branching: recommendations-branching
- Branching Models: branching-models
- Feature development lifecycle with Git: feature-lifecycle
- Simple Git workflow is simple: simple-git-worklfow
- Branching Patterns for Parallel Software Development: branching-bradapp
Performance & Scaling¶
- Facebook and Git performance issues: facbook-git
- Facebook and Mercurial scaling: facebook-mercurial
Binary Files¶
For every Distributed Version Control System (DVCS) handling (especially large) binary files is an issue.
- How to handle big repositories with git: handle-big-repositories-git
- Git Document Sharing: git-document-sharing
- Using Git to Manage the Storage and Versioning of Digital Objects richard-anderson-stanford
- Git & Perforce comparison: git-perforce-bin-files
- Linus Torvalds about big objects in Git: linus-big-objects
Creating Workspace¶
For every Distributed Version Control System (DVCS) creating a workspace operation may be an issue, especially for big repositories or repositories with a big number of projets (subrepositories).
- Facebook: “it takes about 10 minutes to begin discovering commits in Facebook’s 350,000-commit primary repository, and about 18 hours to import it all with 64 taskmasters on modern hardware.” Source: facebook-creating-workspace.
VCS/DVCS Migrations¶
- Choosing the right Git hosting service: choosing-git-hosting
- Use Git even if your team doesn’t: git-svn tips and tricks: git-svn-tips-and-tricks
- Migrating a large codebase to Git with Atlassian Stash: atlassian-svn-to-git
- Eight key points to consider: clearvision-migrations
- Django migration to Github: django-github-migration
Large Changes in Code Review¶
Most of Code Review tools do not support large changes.
- How Facebook deals with the problem: facebook-large-changes1 and facebook-large-changes2
Versioning¶
Android¶
Starting with Cupcake, individual builds are identified with a short build code, e.g. FRF85B. The first letter is the code name of the release family, e.g. F is Froyo. The second letter is a branch code that allows Google to identify the exact code branch that the build was made from, and R is by convention the primary release branch. The next letter and two digits are a date code. The letter counts quarters, with A being Q1 2009. Therefore, F is Q2 2010. The two digits count days within the quarter, so F85 is June 24 2010. Finally, the last letter identifies individual versions related to the same date code, sequentially starting with A; A is actually implicit and usually omitted for brevity.
- Versioning - an Underrated Discipline: versioning-underrated-discipline
- Semantic Versioning: semantic-versioning
Tools¶
Centralized VS Distributed¶
- Attlassian blog: atlassian-blog
Git, Mercurial and Bazaar domination¶
- Why Git? why-git
- Clearvision: clearvision-dvcs
- RedMonk: redmonk-dvcs
- Ian Skerrett: ianskerrett-dvcs
- Atlassian: atlassian-dvcs
- Why switch to Bazaar: bazaar-switch
Git¶
- How to Deal with mess in Git?: deal-with-git-mess
- Useful Tips: useful-tips
- Gitflow - branching model: gitflow-branching-model
Tools and Plugins¶
- PowerShell + Git integration: posh-git
- Doing Git Your Way: git-your-way
- Sexy bash prompt: sexy-bash-prompt
- Gittle: gittle
Git Propaganda¶
- Why Git? why-git
- GitHub: 10 Million Repositories: github-10-milion
- Microsoft announces Git support: microsoft-announces-git
- Google announces Git support: google-announces-git
- Bitbucket announces Git support: bitbucket-announces-git
- CodePlex: codeplex-announces-git
Git Branching¶
- Stackoverflow: stackoverflow-branching
- Reinh: reinh-branching
- nvie: nvie-branching
- Github Flow: github-branching
Git on Windows¶
- Mercurial as a workaround: mercurial-git-workaround
Git & Multiple Projects¶
- Managing Many Repos: managing-many-repos
- Gitslave: gitslave
- Submodules: submodules
Git Tools¶
- Building a Git Server: building-git-server
- gitsh is a new way to use Git: gitsh
Git Use Cases¶
- Texas Instruments and Git: texas-instruments
Online Tutorials¶
- Pro Git book: pro-git
- Interactive Git Tutorial: interactive-git
- Git Immersion: git-immersion
- Git Howto: git-howto
- Git Pro [lang=PL]: git-pro
- SAP documentation about Git & Gerrit: sap-gerrit
- Bare vs non-bare repositories: bare-vs-nonbare
- Git by Example: git-by-example
- Visual Git Guide: visual-git-guide
- Git Tutorial: git-tutorial
- Git bisect: git-bisect
- Video tutorial: video-tutorial
- Git Pocket Guide: git-pocket
- Code School: code-school
- How to quickly to start with Git: how-to-start
Git Presentations¶
- Randal Schwartz: randal-schwarts-git_
- Randal Schwartz - Google Tech Talk: randal-schwarts-tech-talk-git_
Git cheatsheets¶
- Git Tower Cheat Sheet Grey: git-tower-cheatsheet-grey
- Git Tower Cheat Sheet Detail: git-tower-cheatsheet-detail
- Nerdgirl Cheatsheet: nerdgirl-cheatsheet
- NDP Software Cheatsheet: ndp-cheatsheet
Best Practices¶
- Git Best Practices: git-best-practices
Git and Android¶
- Life of a Patch: life-of-patch
Gerrit¶
- From Code Review to OpsWorks: code-review-to-opsworks
- Code reviews and bad habits: code-reviews-bad-habits and code-reviews-bad-habits-discussion
- FOSDEM: Using Gerrit Code Review: using-gerrit
- Gerrit vs Rietveld and Gitosis: gerrit-rietveld-gitosis
- Gerrit vs other Git servers: gerrit-vs-other
- Gerrit & Jenkins integration: gerit-and-jenkins
- Future of Gerrit/Repo script: future-of-gerrit-and-repo
- Gerrit backup: gerrit-backup
- Gerrit installation: gerrit-installation
Cross Repo Dependencies¶
- Git and project dependencies: project-dependencies
- QT approach - Staging: qt-crd
- Gerrit contributors discussion: gerrit-crd
Gerrit Server - public instances¶
- Typo3: typo3-gerrit
- Android: android-gerrit
- QT: qt-gerrit
Tips and Tricks¶
- Git hooks deployment: hooks-deployment
- Get rid of Git dangling objects: dangling-objects
- Git hooks: git-hooks
Mercurial¶
Propaganda¶
- Google announces Mercurial support:
- CodePlex announces Mercurial support:
Architecture¶
- Mercurial Architecture: ols-mercurial-paper.pdf
Veracity¶
- Homepage: veracity-homepage
VCS¶
VCS is an abstraction layer over various version control systems: vcs-homepage. Project seems to be dead.
Commercial¶
- Perforce and Git Fusion: perforce-git-fusion
Perforce
- Dear Perforce Fuck You: perforce-fuck-you
Code Review¶
- Every team needs kick-ass code reviews: jira-code-reviews
Phabricator¶
Phabircator is developed and used by Facebook (and many other companies.. )
- Homepage: phabricator-homepage
Rietveld¶
- Installation: rietveld-installation
Code Review Use Cases¶
- Duke Nuke 3D: duke-nuke-code-review
Tips and Tricks¶
- Closing issues via commit messages: commit-messages
Resources¶
- Code managemetn in Facebook: code-management-facebook
Software Development KPIs¶
Development KPIs
- Lines of code per developer
- Build test failures
- Unit test failures
- Number of bugs found in their code
- Number of bugs fixed
- Actual time to finish a task based against their own estimate
- Number of developers and commits by organization, site or country (Bangalore, Brugge)
- Number of revisions merged per contributor
- Number of revisions abandoned per contributor
- Number of revisions merged per organization, site, country
- Number of revisions abandoned per organization, site, country
- Ratios merged/abandoned
- Number of new contributors with 1 / 2-5 / 6+ changes submitted in the past 3 months
- Number of contributors stopping contributing or decreasing continuously in the past 3 months.
Gerrit KPIs
- Number of Code review comments
- Average time spent on Code Review
- Number of commits reviewed in <2 days, <1 week, <1 month, <3 months, >3 months or unreviewed
- Code Review queue size
- How many new users registered (per day, per month, per year)
SCM Team KPIs
- Time to set up an environment
- Time from change request to release
- Mean time to resolution
JIRA Related KPIs:
- Average time for an accepted bug report between bug creation date and PATCH_TO_REVIEW status being set
- Average time for an accepted bug report between PATCH_TO_REVIEW status being set and RESOLVED FIXED status being set.
- Average time for an accepted bug report between bug creation date and first comment by not the reporter her/himself.
Deployment KPIs:
- Speed of deployment
- Deployment success rate
- How quickly service can be restored after a failed deployment