("On-premises build agents" makes it sound fancier than it is, it's actually Raspberry Pi's on my desk, but hey, whatever works, right?)
3,773 karma · joined May 31, 2012
https://www.edwardthomson.com/
Maintainer of libgit2. https://libgit2.github.io
[ my public key: https://keybase.io/ethomson; my proof: https://keybase.io/ethomson/sigs/48RVOIuAzrPKWNpOT1zlhLUUiT8VXFtqnuo5MzEds_w ]
("On-premises build agents" makes it sound fancier than it is, it's actually Raspberry Pi's on my desk, but hey, whatever works, right?)
There's a lot of shops that are happy with their git hosting provider and their agile planning tool and go looking for a CI/CD tool and may have been turned off by VSTS because it looked like a monolith. Making it clear that you can just use Azure Pipelines without having to use the entire stack was a priority for us, but you're absolutely right that we need to round this out with some better case studies. Thanks for the feedback.
We've got some neat new features launching today and more coming soon. My favorite new feature is the Azure Pipelines app the the GitHub Marketplace. It makes it one-click to build a continuous integration and pull request validation pipeline right from your GitHub repository, you don't even need an Azure DevOps account to get started.
Microsoft doesn’t force employees to use Microsoft tools; Microsoft forces employees to think critically, empathize with our users and build great experiences for them.
This is, of course, unexpected. And while you should perhaps raise an eyebrow if somebody you don't know asks you to recursively clone a repository that you're not interested in - this is indeed a problem and you should upgrade your Git client.
Edit: sarcasm aside, you're right in saying that there is competition here. And competition is healthy, it's what drives us to solve problems in different ways and _allows_ us to collaborate. But to suggest that we shouldn't use each others technologies feels short sighted and like the wrong kind of competition.
Another comment suggests that there's "fierce competition" in the version control space. In fact, I think that there's fierce collaboration in the version control space! Durham Goode from their team gave an interesting talk at Git Merge 2017 about how they're using Hg and some of the interesting user-experience tools that they've built on top of it: https://m.youtube.com/watch?list=PL0lo9MOBetEGRAJzoTCdco_fOK...
I don't personally prefer Mercurial (I like Git, as you might have guessed), but I think that there's some opportunities to learn from their user experiences and perhaps add or improve some high-level Git commands.
We're not enemies. We're not competing. We're trying to make developers lives better, and there are a number of techniques that can work, and a number of tools that can help them.
This clearly reduces the ambiguity in the community. And even if some ambiguity does remain - which, as you point out, is inevitable - having examples of obviously impermissible behavior and a framework for conflict resolution is requisite for a community.
You may be shocked to learn that some people actually do not have common sense. And that there is very little recourse when those people - the ones lacking common sense - decide to harass or intimidate people. Unless you actually _make rules_ about your community, you cannot _enforce those rules_.
So there are no "common sense" solutions to these problems unless you actually spell them out in advance. As an open source maintainer myself, I assure you that we do not do these things "to please some groups" but to have a framework for operating when people who lack "common sense" decide to be jerks and harass or intimidate other members of our community.
I would use VSTS for the whole pipeline, including the Git repository hosting, but I wanted to have a public repository, in case listeners wanted to submit pull requests. So far that hasn't happened, so I'm missing out on some of the VSTS features, but maybe it still will.
I also have a weekly newsletter (https://developertoolsweekly.com/) that uses a static site generator that I build myself. It's very Jekyll-inspired and uses Liquid templates, but instead of generally processing markdown, it takes a simple list of links and descriptions and emits a website as well as the HTML and plain text for the emails.
This workflow is similar, the generator is run in a Docker container, but this workflow is entirely VSTS and Azure.
My favorite talk that I watched in 2017 was Durham Goode's talk at Git Merge 2017, concerning scaling Mercurial at Facebook. It's always good to share knowledge about version control and scar difficulties:
https://m.youtube.com/watch?list=PL0lo9MOBetEGRAJzoTCdco_fOK...
My favorite talk that I gave was at GitHub Universe. I spoke about how Microsoft adopted the Git version control system and - ultimately - open source:
The US already has a variety of digital gates to _enter_ the country - similar to the digital gates that Heathrow has at immigration - but this article is talking about special electronic gates at _exit_ which I've never seen at any LHR terminal.
I'm impressed. This visualization is _really_ advanced.
Or maybe the labels are just incorrect.
You can read about their architecture in their discussions of Spokes, which replicates repository networks (the original repository and its forks) across data centers. eg: https://githubengineering.com/stretching-spokes/
Trying to put all of GitHub's object files in a single packfile - even just putting them on a single server - would be impossible.
But even on hosting providers with a bespoke implementation - that do not use core git to manage Git repositories - this would be challenging. We have a custom Git server implementation in Visual Studio Team Services, but it still makes sense to shard object storage with the repository: you have to worry about scalability and performance, but also things like data sovereignty. We can't just put a user's git repository in some global SQL Azure database that contains all the repositories in Visual Studio Team Services: the repositories need to be geographically located with the VSTS account they created.
And I would encourage you to read them, so I won't belabor the details here, but to give you just one example: git blame is not the issue that we're most concerned about. The basic, highest priority functionality in Git - things like git add - are the the issues we're most concerned about.
git add is O(n) on the number of files in the repository. When you run `add`, git reads the index, modifies the entry (or entries) that you're changing, and writes the index back out.
The Windows repository has about 3.5 million files[2]. Running `git add` - when we started thinking about moving Windows into Git - took minutes.
Can you imagine running `git add` and having it take 10 minutes?
Now obviously there are some inefficiencies here - there's quadratic operations and the like that went in assuming that nobody would ever put 3.5 million files into a Git repository. And we've been cutting those out over time[3].
Thankfully, Git does have some functionality to support very large repositories - using shallow clones, sparse checkouts and the like. We've added narrow clones, to only download portions of the tree, and automation to handle this automatically without user intervention.
That's the scaling work that we're doing with GVFS. And these changes bring the P80 time for git add down to 2.5 seconds[4]. We've been contributing these changes back to git itself, and we're thrilled to work with industry partners like GitHub who are also interested.
Sorry to go on - version control is a passion of mine, as it is for many of us working on Visual Studio Team Services. Your conclusion is very much correct: Git wasn't designed for this from the beginning. Thankfully, software isn't immutable, so we're scaling it up.
[1]: http://gvfs.io/
[2]: https://blogs.msdn.microsoft.com/bharry/2017/05/24/the-large...
[3]: https://blogs.msdn.microsoft.com/devops/2017/05/30/optimizin...
[4]: https://blogs.msdn.microsoft.com/devops/2017/11/15/updates-t...
GVFS is part of our effort within the company to standardize on a single set of best-of-breed tools, and use the same tools inside Microsoft that we deliver to customers. So we're adopting one engineering system throughout the company and we're moving everybody to Visual Studio Team Services.
Microsoft took the same look and went the opposite direction, and decided that Git was easier for us to hack on. This was a no brainer for us. We build multiple tools that host peoples Git repositories (TFS and VSTS) and have Git repositories as deployment mechanisms for Azure. We have several contributors to tools in the Git ecosystem on staff, including people contributing to core git, and the maintainer for Git for Windows, libgit2 and LibGit2Sharp. But we have comparatively little institutional knowledge of Hg.
That post you linked is awesome. Facebook has done a lot of really impressive work scaling Hg and a lot of the lessons learned at Facebook and implementations in Hg are very similar to what we've done with Git.
This video from Durham Goode on Facebook's version control team (from Git Merge, amusingly) is also awesome: https://m.youtube.com/watch?v=gOVD-DrUpwQ