Developers love Git. But as Git adoption grows in the enterprise, the complexity can become overwhelming, and in retrospect, some say more thought should have been given to things like access control.
While centralized version control systems remain popular, Git is gaining traction fast, especially among agile teams. Since more enterprise tool vendors are integrating their IDEs, ALM suites and SCM products with Git, and open-source innovation never stops, it is now easier for teams to integrate Git into their daily workflows.
As always, what suits individual developers doesn’t always suit enterprise teams, at least without some adjustments. But in today’s agile world where speed matters, there is less tolerance for things like broken builds and central repository failures that delay commits and other things that negatively impact team productivity.
(Related: What’s in the latest version of Git)
“Git almost eliminates some of the previous issues [with centralized version control systems], and it encourages collaboration,” said Eric Wittman, general manager of development tools at Atlassian. “Since modern development teams are highly distributed, having a more distributed development model is incredibly important.”
Git’s flexible branching and merging capabilities are attractive because more work can be done in parallel with less risk, whether it’s using local branches to build new features or experimenting with new ideas. Developers love it because it’s fast, as all operations are performed locally.
John Riordan, CTO of business phone service OnSip, said his organization migrated from Subversion (SVN) to Git based on its comparative performance and simplicity.
“Git is a tremendous time-saver from a programmer standpoint,” he said. “And branching and merging are really easy.”
Of course, Git adoption involves more than just Git itself.
Migrating to, integrating with, and managing Git
There’s no one right way to adopt Git. It depends on what’s in place, what the team needs, what the business needs, and what the preferences are. There are lots of free and open-source tools, some commercial tools, and lots of plug-ins to ease migration and integration. Popular IDEs support Git, including Visual Studio 2013, as do popular ALM tools from behemoths like IBM, HP, and Microsoft, as well as Rally, VersionOne, Parasoft, Inflectra, and Telerik.
There are a number of open-source tools for connecting Git and other revision-control systems such as Bazaar, ClearCase, CVS, Darcs, Mercurial, Monotone, Perforce, SVN and Quilt, to name a few. In addition, there are merge tools, hooks, bug and issue trackers, backup tools, access control, and hosting options. The choices can be confusing, especially when considering enterprise priorities.
Atlassian’s Wittman said that an individual developer on a team typically experiments with Git and then introduces it to his or her teammates. Some of those developers, as well as small teams and teams developing cloud applications, are using Atlassian’s Bitbucket for Git code hosting.
When Git grows in an enterprise, the team often migrates to Atlassian Stash for repository management behind the firewall. The new Stash 3.0 includes an interface that is substantially similar to Bitbucket, which makes such transitions even easier. Both products are integrated with JIRA and Bamboo (Atlassian’s continuous integration, continuous deployment, and release-management tool).
“Our customers love the fact their developers can stay in Stash or Bitbucket, and the Scrum Masters or product managers who use JIRA can get real-time visibility into the progress developers are making such as making a pull request or a commit,” said Wittman. “You can also see the status of builds. Enterprise customers value the tight integration of workflows and visibility.
The approach to Git is worth considering regardless of how it is adopted in an enterprise. Quite often developers think in terms of tools, but from a team or enterprise standpoint, there are more things that need to be considered. In retrospect, visibility, security, and compliance may not have been considered to the degree they should have been initially.
For example, when OnSip was a startup, little consideration was given to security, according to Riordan. Early on, there were about a dozen developers, all of whom had a copy of the Git repository. Later, OnSip adopted Gitolite, an open-source authorization layer on top of Git, so it could control individual developer access to repositories and which developers could push code to which branches.
Geospatial software services company HumanGeo has been using Git from the start, like OnSip. As it grew, HumanGeo replaced Gitolite with a subscription-based access control solution that also has code review, issue tracking, activity feed, and wiki features. It is also using Puppet, an open-source configuration-management tool to track the status of code.
“Gitolite was perceived as being pretty sparse in terms of features, and it had a bare-bones interface,” said Aaron Gussman, a senior technologist at HumanGeo. “We liked what we saw on GitHub but we didn’t want to pay for it. We also have a lot of clients in the Federal space who get cold feel when we talk about hosting our source code in the cloud.”
HumanGeo is using the access control solution in tandem with Gitflow, a collection of extensions that provides a branching model for Git. Together, the tools are aiding peer reviews and workflow, Gussman said. From an enterprise perspective, it is not yet clear whether a mandate should be issued requiring all teams to use the tools or whether project teams should be able to operate independently.
“Things like permissions and security can be really confusing,” said Atlassian’s Wittman.
Atlassian Stash supports branch-level permissions, which are important to Orbitz. The company has many different developers working on many different projects, so it wants to ensure that each developer has access to the right feature branch so he or she can work on or review the code.
Git smart about tools: A Buyers Guide
These open-source projects can make migrating to, integrating with and managing Git easier. If you want to know more about Git itself, read our report on it.
AccuRev – GitCentric allows developers to use Git and take advantage of AccuRev’s enterprise-class SCM platform. Developers can augment the power and flexibility of Git with security, auditability and development-process visualization.
Atlassian – Bitbucket is a hosted source-code-management tool for Git. It allows users to have as many public and private repositories as they want and manage their projects with confidence. It has built-in issue trackers, wikis, code comments, and pull requests. Developers can browse and search their repository over the Web, filter source by branches or tags, and navigate through a commit history. Bitbucket integrates with popular tools like JIRA, Crucible, Bamboo and Jenkins.
Atlassian – Stash is an on-premises source-code management tool for Git that’s secure, fast, and enterprise-grade. Developers use it to manage repositories, set up fine-grained permissions, and collaborate on code using their own servers. Stash’s interface makes administration and management fast and easy.
Branchable – git-annex allow users to manage files with Git without checking the file contents into Git. It is useful for files larger than Git can currently handle due to limitations in memory, time or disk space.
CollabNet – TeamForge allows enterprise teams to gain control of their Git repositories. With TeamForge, teams can integrate SVN and Git code projects and benefit from common code governance, security and workflows. As an enterprise-grade ALM tool, TeamForge extends Git workflows with defect management, code reviews, and build and test automation. It includes an undo button for Git code comments, enables the safe rollback of updates, intercepts history rewrite attempts, and more.
Critic – a Web-based code review tool based on Git. It allows reviews to be automatically created and updated by pushing changes to a Git repository maintained by Critic. Reviewers can be assigned automatically based on users’ preferences. It is written in Python.
EGit – an Eclipse plugin that allows developers to use Git.
git-commit-notifier – sends HTML e-mail commit messages, splitting commits that were pushed in one step. Changes are highlighted per word.
git-flow – a set of extensions that provide high-level repository operations for Vincent Driessen’s branching model.
git-multimail – a post-receive hook for sending e-mail notifications of pushes. It is a plug-in replacement for the post-receive-e-mail script available from Git’s contrib directory that includes bug fixes, additional configuration options, and many new features, including a one-e-mail-per-commit mode that threads commit e-mails by branch. It is easily extensible in Python.
Gitolite – an access control layer on top of Git. It allows developers to set up Git hosting on a central server with fine-grained access control such as controlled read access at the repo level, as well as controlled write access at the branch, tag, file, or directory level, including who can create, rewind, and delete branches or tags.
GitLab – software for code collaboration. It provides a wide range of features, including Git repository management, code reviews, issue tracking, activity feeds, and wikis. Enterprises install it on-premises and connect it with LDAP and Active Directory servers for secure authentication and authorization. A single GitLab server can handle more than 25,000 users, and it is also possible to create a high-availability setup with multiple active servers.
git-svn – a built-in tool for migrating between Git and Subversion. Similar tools are available for migrating from CVS (git-cvsexportcommit and git-cvsserver), Perforce (git-p4), and Quilt (git-quiltimport).
Google – Gerrit Code Review is a Web-based code-review system that facilitates online code reviews for projects using Git. It simplifies reviews by showing changes in a side-by-side display, and allows any viewer to add in-line comments. Gerrit permits any authorized user to submit changes to the master Git repository rather than requiring all approved changes to be merged manually by the project maintainer.
Ikiwiki – Ikiwiki is a wiki compiler. It converts wiki pages into HTML pages suitable for publishing on a website. Ikiwiki stores pages and history in Git or other version-control systems. It includes support for blogging, podcasting, and a wide array of plug-ins.
Meld – a visual diff and merge tool that helps developers compare files, directories and version-controlled projects. It provides two- and three-way comparison of files and directories, and supports many popular version-control systems. Meld helps developers review code changes and understand patches.
Microsoft – TFS 2013 includes the addition of Git as a source-code repository. Now, users can commit their changes locally, do file comparisons, create branches, merge code, and more. When developers are ready to share their changes with the rest of the team, they can push their changes to the centralized Git repository contained in the TFS Server. TFS’s Git implementation is based on MSysGit so developers familiar with Git can use the same commands as other Git implementations.
Microsoft – Visual Studio 2013 includes support for Git version control. Developers can now perform Git network operations from inside Visual Studio, such as cloning a repository, or performing a fetch, push or pull operation on an existing repository.
Perforce – Git Fusion is a comprehensive solution for managing Git environments. It helps teams bring order to repository chaos, enabling them to gain visibility across all projects and teams, enforce uniform access control, and achieve scale without a lot of manual effort. Git Fusion provides detailed version history and auditing, makes repository reorganization easy, and interoperates with existing Perforce environments.
SCM-Manager – a Java Web application for creating and managing Git, Mercurial and Subversion repositories. It provides easy access to the repositories over HTTP or HTTPS; has centralized user, group and permission management; and is completely configurable from within its Web interface.
SourceForge – Diffuse is a small and simple graphical tool for merging and comparing text files. Developers use Diffuse to merge, edit and review code changes. Diffuse can compare an arbitrary number of files side by side. Users also have the ability to manually adjust line-matching and directly edit files. Diffuse can also retrieve revisions of files from Git and other repositories for comparison and merging.