By Mike on May 5, 2017
Performance was one of the key things we wanted to address while working on SourceTree 2.0 for Windows. It was a cause of frustration for many of you, and we knew we could do much better to improve your experience with SourceTree. Rather than focus on one performance attribute or one git command, we took a holistic approach. We looked at reducing the visual complexity of the UI, as well as the speed of many Git operations you love and use every day.
Visual complexity can be described as the number of elements displayed in an application; the more elements you have in your user interface, the more complex it is. SourceTree uses Windows Presentation Foundation (WPF) to render its user interface and the elements contained within. With WPF, interface elements are part of a composition tree, with each element in SourceTree’s interface adding one or more composition nodes to said tree. Whenever an element changes in the UI (e.g. an event occurs or an operation is performed in SourceTree) both a layout and redraw pass typically happens, as the tree is walked and rendering instructions executed for each composition node.
For visually complex applications (hello, SourceTree!) these passes look, from a user’s perspective, as stutters in the UI. So the general rule of thumb in light of this, along with the feedback we’ve received around performance, was to reduce the number of elements in SourceTree’s UI. We wanted to reduce the visual complexity of the application without losing the benefits of seeing the most important elements at the same time. We’ve actually been working at reducing this complexity for quite some time. So how do those elements stack up in SourceTree 2.0 for Windows compared to older versions?
Visual Complexity Across Versions – Corefx Repo
SourceTree Version 1.9/10: 1760 visual tree elements
How was it done?
- The file diff was rewritten to a custom text display control, which is now virtualized (only visible elements are part of the tree)
- The sidebar was rewritten to a custom virtualized tree view
- Bookmarks sidebar had a few icons removed
SourceTree Version 2: 1414 visual tree elements
How was it done?
- Bookmarks sidebar removed as it’s now in the “
- The log view pills were rewritten to draw via custom function rather than have visual tree elements
Caching File Lists
Another improvement we made was the caching of views between the “File Status” and “Log / History” view. Before 2.0, switching between these views would cause the file lists to refresh each time, something that could take a few seconds depending on how many files you had. In 2.0, these views are no longer recreated when switching, eliminating the stuttering you used to see as the lists were refreshed.
SourceTree Version 1.9/1.10: No Caching
SourceTree Version 2.0: Caching
The performance of individual Git functions has a tremendous impact on the overall responsiveness of the application. SourceTree frequently runs background tasks, so any improvement typically has a cascading effect on higher-level features. For 2.0 we decided to add a hybrid LibGit2 handler for most Git operations in order to improve performance for most operations.
The results speak for themselves:
And of course you’ll also see improvements in other features you know and love like Git LFS support, bundles, SVN support, and interactive rebasing.
Try SourceTree 2.0 for Windows today
SourceTree 2.0 for Windows is a sign of things to come and we’re excited to see our hard work bear fruit in the hands of all of our users. We’re not done yet and will continue to work harder on further performance improvements, and if you have any feedback we’d love to hear from you.
Download SourceTree free
By Kelvin Yap on April 27, 2017
It’s an exciting time to be a Windows developer using SourceTree. We’ve seen steady adoption of SourceTree for Windows and today more than half our users come from Windows – impressive for a tool that used to be Mac only! Since launching the 2.0 beta in January and acting on the feedback we’ve received since, we’re excited to announce that SourceTree for Windows 2.0 is now generally available.
Alongside refreshing the UI with a new and improved design, we’ve also listened to all the feedback you’ve provided and focused on making SourceTree for Windows 2.0 the fastest version yet. And that’s not all, as we’re proud to announce support for Microsoft’s Git Virtual File System, making the process of working with unusually large repositories easier than ever before.
change you’ll see in SourceTree is the new design. We gathered a lot of feedback around the user experience so not only have we updated SourceTree with a modern look and feel, we’ve also overhauled tabs to improve your repository browsing experience, with a specific focus on finding and cloning your remote repositories. We’ve added more vibrant colors, improved workflow for common operations, and we’ve increased performance by refactoring the bookmarks sidebar. .
Blazing fast performance
Many of you have voiced your concerns about the performance of SourceTree on Windows and we heard you loud and clear. By adding a hybrid LibGit2 handler under the hood for most git operations we were able to improve performance in some cases by almost 2x. Here are the performance tests we ran comparing 2.0 to 1.10 – the results speak for themselves:
And by all means don’t take our word for it, and see for yourself just how much faster performance is in this new release!
Support for Git Virtual File System
For all the great things about Git, a common complaint is how difficult it can be to work with large repositories. Git Large File Storage (LFS) helps alleviate these issues when your repository contains large files, but doesn’t help when you have lots of files or content in your repository. To help with this Microsoft announced Git Virtual File System (GVFS) at Git Merge this year, which “virtualizes the file system beneath your repo and makes it appear as though all the files in your repo are present, but in reality only downloads a file the first time it is opened.” So for those working on large repositories that typically deal with a small section of the codebase, using GVFS means you only download what you need rather than the entire repository. This in turn results in faster performance for common operations like checkout and status and improves the experience of using Git as a whole.
, enabling you to combine a beautifully simple UI alongside a great technology that makes handling large repositories easier than ever. We’re excited to support GVFS in 2.0, and the same sentiment is shared by Microsoft:
“We’re excited that GVFS is supported in a widely used git client like SourceTree, and we love the new look and feel in 2.0.”
Jeremy Epling, Principal Program Manager on Microsoft TFS & Visual Studio Team Services
Get started today
We’re proud to continue supporting all of the Windows developers out there using SourceTree, and we hope you’re as about all the great new features and improvements in SourceTree for Windows 2.0. Upgrade or download it today and tell us what you think!
Using SourceTree 1.9 or earlier?
We implemented a change in the way we roll out updates (announced here
) late last year, so if you’re using SourceTree for Windows 1.9 or earlier you will not see auto updates for 2.0. Please download 2.0 directly from our website
Download SourceTree free
By Kelvin Yap on February 10, 2017
Connect to your Bitbucket or GitHub accounts securely and with ease in the latest versions of SourceTree for Windows and Mac. These versions of SourceTree fully OAuth 2.0. Users with Two-Factor Authentication (2FA) enabled can connect to both services via OAuth and be guided through the standard two-factor login flow. Navigate to the Account Management screen to update your already connected accounts from Basic to OAuth today!
Also, gone are the days of manually creating and storing SSH keys via command line. Released in version 2.4 for Mac, SourceTree automates the whole process with a single click of a button. Whenever you edit an existing account or add a new one you’ll notice a new “Generate Key” button on the Account Details screen.
of SourceTree for Mac and Windows and take advantage of these new features (and various bug fixes/enhancements) today!
Download SourceTree free
By Mike on January 27, 2017
We’ve added a ton of new features and improvements in this release:
- Manage your bookmarks easily with a new and colorful tab design
- Huge performance improvements
- Pixel-perfect per-monitor DPI support
Tabs and Header
We implemented a new tab-centric design to increase vertical space and to give readability to the the repository you’re currently working in. The new header design gives you an additional 20px vertically, while the removal of the bookmarks sidebar gives you 250px horizontally.
Before (left) and after
The New Tab….Tab
The repository browser now lives in the New Tab. The old sidebar crammed repository names and had a confusing relationship to your remote repositories. Now you have a dedicated experience for both in a full window. This approach also frees up more space to focus on code once you’re in a repository.
SourceTree for Windows 2.0 is screaming fast. We improved performance by adding a hybrid LibGit2 handler for most git operations. In many cases, performance for most operations increased by almost 2x. Look how fast reading stashes are with LibGit2!
Many primary feature workflows have been rethought and improved. Compare the steps needed for creating a remote repo in the current version of SourceTree, vs the new workflow. In 2.0, creating a remote repository and managing your remote accounts is front-and-center rather than living 2-3 menus or pop-up dialogs deep.
Before (left) and after
Animations, more vibrant colors, improved contrast, and per-monitor DPI support are just a few of the improvements we’ve made. Note the removal of the Windows 2000 era pinstripes, vivid colors, and branch label readability improvements. We’ve improved contrast in many areas by tweaking our use of gray colors, and added accents to window dialogs and notifications.
Before (left) and after
Per-monitor DPI support
On systems that support per-monitor DPI settings (Windows 10 Anniversary), SourceTree will automatically adjust icons and text to be crisp and pixel perfect when the window is moved between monitors. SourceTree will still use high-DPI icons and scale properly even if your OS doesn’t support per-monitor DPI and you still have a high-DPI monitor or laptop.
Before (left) and after
Readability has been improved on the sidebar, with more spacing between text and increased vertical spacing.
Before (left) and after
Additionally, the ahead/behind indicator will now float on the right-side of the sidebar, and will be visible even if there’s a scroll-bar in either direction.
Before (left) and after
Download the beta and check out all the new improvements today!
Download SourceTree for Windows 2.0 beta
By Mike on December 13, 2016
There have been a few reports of memory leaks in recent versions of SourceTree for Windows. We understand these kinds of issues can adversely affect the SourceTree experience and are important to identify and address.
Identifying the leaky object
How does a memory leak appear? Most of the time it’s a fairly simple case of “I created some objects, and when I was done using those objects something was still referencing them”. In this case, identifying what was leaking in SourceTree was an easy task:
Determining the cause
Most of the time the cause of a leak is easy to spot:
- An event handler is still subscribed
- The object is not being removed from a list or is still held on to as a direct reference
- An unmanaged object wasn’t disposed/cleaned up
owever, the real difficulty isn’t figuring out if you have a leak – . In this case, I suspected that our UI library that quickly draws the sidebar was doing something wrong, and that it might be holding onto objects that it shouldn’t. After looking at the memory dump it was clear that assumption was correct:
more than 4x the correct number of nodes. Okay, so now we know that it involves the SidebarNode and the objects. The TreeNode holds a reference to the object it’s showing to the user, so something must be keeping a reference of it around, which is keeping our massive count of SidebarNodes around too.
After taking a peek into the the TreeNode class, there were a few issues (oops):
- A subscription to an event handler wasn’t unsubscribed
- The TreeNode objects were added to a cache and never removed from that cache
After running the tests, it appeared that the leak was fixed. As mentioned earlier this fix has been rolled out in 1.9.9 for Windows, and should address the memory issues we were seeing. Check it out for yourself!
Download SourceTree for Windows
By Kelvin Yap on December 5, 2016
We’ve been hard at work squashing bugs, fixing crashes, patching and upgrading parts of SourceTree for Windows in version 1.9.9. Remember that annoying memory leak in the TreeView? Patched. Want support for Git LFS 1.5.2? We’ve added that. Feel free to check that Spell Checker checkbox too – we’ve provided safeguards to protect against Windows’ own spellchecker performance issues. Performance when switching tabs have been improved too. And that’s just the tip of the iceberg.
We want to give a big shout out to members of our Beta community. Your participation helps us identify and fix the biggest pain points; thank you! And if you’re interested in joining the beta program you can do so here.
Download 22.214.171.124 today to get these improvements.
Download SourceTree for Windows
By Brian Ganninger on November 16, 2016
When it comes to rolling out new software updates, the SourceTree team is always looking to deliver a better experience to users with minimal disruption. In the past we an, detailed how we deliver releases, and now . By progressively rolling out updates we aim to deliver new features and functionality to users in a more robust fashion.
What’s the plan?
Where we used to roll a new update to all users on day one, we’re now progressively rolling out updates to users. This staged approach offers granularity during a release, allowing us to scrutinize each update for bugs and showstoppers before it hits critical mass.
The general flow of a build through our release pipeline is common across both Windows and Mac platforms. The below diagram – using our as an example – outlines our process and describes the granularity of our new staged rollout in more detail.
Once a release leaves beta it’s progressively rolled out to groups of users over a period of a few weeks, with time in-between for fixes to be implemented where necessary.
||Available exclusively for
How did we implement it?
The implementation is slightly different for Windows and macOS platforms, but aim to achieve the same goals:
- no dependency changes
- client self-assigns update group
- ability to release in stages (group 1 at 5%, group 2 at 15%, etc.)
- no impact on existing alpha/beta distribution
- minimal file duplication on server
- no need for a self-made web service
- automatable process
Having implemented Squirrel.Windows for SourceTree’s beta program, we’ve decided to move GA releases from AdvancedInstaller to Squirrel as well. Why Squirrel? We were attracted by its focus on simplicity and felt it aligned well with our goal of improving the installation process for users:
Windows apps should be as fast and as easy to install and update as apps like Google Chrome. From an app developer’s side, it should be really straightforward to create an installer for my app, and publish updates to it, without having to jump through insane hoops.
We’ve found it very easy to integrate Squirrel with our FAKE-based build process and CI. The resulting installer is much smaller, quicker to run, has a cleaner footprint, and comes with the added bonus of removing the requirement for Admin rights to install. Overall we felt the user install experience is much improved.
For progressive rollouts, Squirrel comes with built-in staged rollout functionality. SourceTree generates a release percentage for this local install; this defines which part of the release schedule the instance falls into. SourceTree will check at start up for any new updates, or the check can be manually triggered via the Tools/Options/Update tab. After each update, SourceTree will regenerate a new release percentage, ensuring a random distribution of updates.
Important information for Windows users
The switch from AdvancedInstaller to Squirrel will involve a number of changes you should be aware of:
- 1.9.x.x will be the last AdvancedInstaller update and will install as normal
- 1.9.x.x+1 will be the first progressive rollout release AND the first Squirrel release
- 1.9.x.x will detect 1.9.x.x+1 using the new Squirrel progressive rollout process
- 1.9.x.x+1 will be installed as a pure Squirrel install, i.e.
- installation location will move from ‘c:\program files x(86)\Atlassian\SourceTree’ to ‘c:\users\USERNAME\Appdata\Local\SourceTree’
- the new location means installation will no longer require Admin rights
- the new installation will for now still use the same configuration files held under ‘c:\users\USERNAME\Appdata\Local\Atlassia\SourceTree’ so all existing settings will be respected
- The Squirrel Update process does NOT include visible Release Notes before running.
- To uninstall you simply delete the folder
- It is possible to downgrade without uninstalling first, but data integrity of configuration and settings is not guaranteed.
For macOS we weren’t able to find any existing options that met our needs. But Sparkle, the update framework we’re already using, does include a number of hooks for customizing the experience, so we decided to build our own from that. In order to utilize staged updates we only need to take advantage of a single method:
Inside this method we use some randomization to choose groups; that logic is encapsulated in a thoroughly unit tested class (). On launch, a user’s group is assigned and cached, clearing when it’s a new app version (2.3.2 → 2.4, not 75 → 76).
On the Server
What happens on the server end is largely unchanged from what we have today. We’ve added new copies of feeds and tweaked release notes so they work in concert with randomization to make staged updates possible.
- direct download and update zip files – a release is uploaded like normal, access to them is managed by feeds; no duplication necessary
- appcast (update) XML feeds – Appcast.xml stays (legacy, no further updates), AppcastAlpha.xml and AppcastBeta.xml stay the same, adds AppcastGroup0.xml through AppcastGroup5.xml
- release notes – ReleaseNotes.html stays (legacy, no further updates), ReleaseNotesAlpha.html and ReleaseNotesBeta.html stay the same, now we use version specific release notes like 2.3.2.html
Build release process
Unsurprisingly, we continue automating via Fastlane:
fastlane update percentage:50
This former “early access” lane runs a relatively similar process as before: it takes the current version + build info and makes sure the appcast and release notes have been updated properly. If it’s already present no build is produced but the appcasts and release notes are prepared.
Iterating On Our Process
It’s been great revisiting the initial CI and deployment processes we put in place for the beta program and expanding upon them. Figuring out the path of least resistance and what options might work presented a fun challenge and our Fastlane suite is better than ever. Now that we’ve landed this important bit of infrastructure we look forward to the many successful deployments and exciting changes in SourceTree’s future!
By Kelvin Yap on October 26, 2016
SourceTree team here with a quick update on how we are managing the SourceTree blog. Starting Friday, October 28th, we will be turning off commenting on the blog.
It’s not that we don’t want to talk to you – we do! We noticed that sometimes blog comments go unanswered for weeks because a comment gets posted on a really old blog post. We want to make sure that you are able to get answers to the comments and questions you have on the right channels and by the right people. Here are the places for you to chat with us on anything from product questions, support requests, reporting bugs, and requesting features:
For any technical issues, please visit our support center.
Feature requests and bug reporting
If you would like to request a new feature or file a bug, please visit our public issue tracker for Mac, or our public issue tracker for Windows. Here you can see what other SourceTree customers have requested, follow requests and issues, and even create a new one yourself.
Have any open questions about how to use SourceTree, Git, or integrate with another product like Bitbucket? Visit Atlassian Answers where you will find questions submitted and answered by the user community, ecosystem developers, and SourceTree staff.
Finally, get social with us! Join us in our enthusiasm for SourceTree, spooning, or software development best practices on Twitter.
Thank you for reading our blog, and for all the feedback you’ve given us over the years. Talk to you soon!
By Manjunath Basaralu Srinivasa on May 4, 2016
A couple weeks ago we shared our beta development process. And If you’ve joined our beta program, you must be thinking, “when is SourceTree going to get to step 4: Early Access?” To elaborate a bit, an Early Access build is a production-ready build which has been tested by you, our Trusted Testers. We want to give you a heads up that will be available for download at www.sourcetreeapp.com in the coming days. Here are a few things to look out for in the update. The following will be available in OS X first, with Windows soon to follow later.
- Attic removed – While working on this upgrade we found that hg-attic, the Mercurial extension SourceTree used for shelving changes, was no longer compatible. SourceTree has now migrated to Mercurial’s built-in shelving implementation. Unfortunately, the two formats are incompatible and this means hg-attic and its contents are no longer supported in SourceTree. However, existing hg-attic shelves are not lost and are listed on the side bar under a new heading “SHELVED BY HG-ATTIC”. They are treated as standard patches with limited functionality to view, import or delete. We recommend applying any hg-attic shelves you have in your repos as soon as possible or convert to the new format by importing and creating a new shelve.
- No support for hgattic extension – From the next release onwards, v2.2.5 on OS X and on Windows, SourceTree will not support hgattic extension and recommend versions of Mercurial 3.7.3 or higher .
- on OS X build – Many of you might have seen errors which include the path “Users/mbasaralusrinivasa/workspace/git-scm/git-274/…”. Well, this is the path at which we installed Git 2.7.4 and was bundled with SourceTree 2.2.4. We had to address the Git security issues quickly and since an officially maintained build of Git was not available at the time, we built it ourselves. We later realized that there were some binaries that referenced the local install path which was visible in some error logs. To fix this, we bundled the (now) official Git 2.8.1 binaries.
If you notice any issues or bugs in the Early Access build, please feel free to file them at jira.atlassian.com. And if you haven’t already, please join our beta program to get access to a ton of features before they are made generally available.
By Rahul Chhabria on April 15, 2016
SourceTree Beta 1 is here! Over the past couple of weeks, we’ve announced a beta program and given you a look behind the curtains. The wait is over. Today, those of you who’ve signed up to be a trusted tester will get access to SourceTree Beta 1. In our first beta we’ve addressed:
- Several bug fixes
- Updated icons to include color and increased contrast
- Force Push on Windows
- Improved reliability and localizations on OS X
- Commit Templates with markdown on OS X
- Crash reporting via Bugsplat and Fabric
and get access to new features before they’re made generally available. Thanks for being part of the SourceTree team.