{"id":396,"date":"2026-10-14T02:31:07","date_gmt":"2026-10-14T02:31:07","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2014\/12\/10\/top-10-website-to-host-git-repository-online\/"},"modified":"2026-10-14T02:31:08","modified_gmt":"2026-10-14T02:31:08","slug":"top-10-website-to-host-git-repository-online","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/top-10-website-to-host-git-repository-online\/","title":{"rendered":"Online Git Repository Hosting: Revisiting the 2014 Top 10 with a Modern Selection and Migration Guide"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>Originally published on 2014-12-10; fully revised and updated.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The original post listed ten websites for hosting Git repositories, but provided almost no technical context. This version keeps those source links intact and adds what DevOps teams usually need: a clear decision process, evaluation criteria, and practical migration commands.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2014\/12\/top-10-website-to-host-git-.png\" alt=\"Top websites to host Git repositories online\"\/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">The original 2014 top 10 Git hosting links (preserved)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The source article was primarily a link gallery. The table below preserves the original destinations and adds a practical verification checklist you can use before adoption.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Rank<\/th><th>Service<\/th><th>Original link<\/th><th>What to verify now<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>Assembla<\/td><td><a href=\"https:\/\/www.assembla.com\/home\">assembla.com\/home<\/a><\/td><td>Current Git hosting plans, access controls, and integration options.<\/td><\/tr><tr><td>2<\/td><td>Beanstalk<\/td><td><a href=\"http:\/\/beanstalkapp.com\/\">beanstalkapp.com<\/a><\/td><td>Repository limits, user model, and deployment workflow compatibility.<\/td><\/tr><tr><td>3<\/td><td>BetterCodes<\/td><td><a href=\"http:\/\/bettercodes.org\/\">bettercodes.org<\/a><\/td><td>Service availability and current product scope.<\/td><\/tr><tr><td>4<\/td><td>Bitbucket<\/td><td><a href=\"https:\/\/bitbucket.org\/\">bitbucket.org<\/a><\/td><td>Plan limits, branch permissions, and CI\/CD integration fit.<\/td><\/tr><tr><td>5<\/td><td>Codebase<\/td><td><a href=\"https:\/\/www.codebasehq.com\/\">codebasehq.com<\/a><\/td><td>Project governance features, API coverage, and export options.<\/td><\/tr><tr><td>6<\/td><td>Fog Creek Kiln<\/td><td><a href=\"https:\/\/www.fogcreek.com\/kiln\/\">fogcreek.com\/kiln<\/a><\/td><td>Whether this product\/URL is still active and what replacement exists.<\/td><\/tr><tr><td>7<\/td><td>GitHub<\/td><td><a href=\"https:\/\/github.com\/\">github.com<\/a><\/td><td>Org policy controls, auditability, and required marketplace integrations.<\/td><\/tr><tr><td>8<\/td><td>Gitorious<\/td><td><a href=\"https:\/\/gitorious.org\/\">gitorious.org<\/a><\/td><td>Whether service is active or requires migration to an alternative.<\/td><\/tr><tr><td>9<\/td><td>SourceRepo<\/td><td><a href=\"http:\/\/sourcerepo.com\/\">sourcerepo.com<\/a><\/td><td>Current service availability, support model, and data export path.<\/td><\/tr><tr><td>10<\/td><td>Unfuddle<\/td><td><a href=\"https:\/\/unfuddle.com\/\">unfuddle.com<\/a><\/td><td>Git capabilities, permission model, and automation endpoints.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">A practical workflow to choose a Git hosting platform<\/h2>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Define team and repository needs] --> B[Set hard requirements]\n    B --> C{Need strict self managed control}\n    C -- yes --> D[Shortlist platforms with self managed options]\n    C -- no --> E[Shortlist cloud hosted platforms]\n    D --> F[Run security and workflow trial]\n    E --> F\n    F --> G{Meets policy and developer experience}\n    G -- no --> H[Refine shortlist and retest]\n    G -- yes --> I[Plan migration and cutover]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Comparison checklist for any Git hosting option<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Evaluation area<\/th><th>Why it matters in DevOps<\/th><th>What to test<\/th><\/tr><\/thead><tbody><tr><td>Identity and access<\/td><td>Controls who can push, merge, and administer repositories.<\/td><td>SSO support, role granularity, branch protection behavior.<\/td><\/tr><tr><td>Pull request workflow<\/td><td>Defines code review quality and release safety.<\/td><td>Required reviewers, merge checks, policy enforcement.<\/td><\/tr><tr><td>CI\/CD integration<\/td><td>Connects commit activity to build, test, and deploy pipelines.<\/td><td>Native pipelines, webhooks, runner\/agent flexibility.<\/td><\/tr><tr><td>Audit and compliance<\/td><td>Supports incident analysis and regulated delivery processes.<\/td><td>Audit logs, retention controls, exportability.<\/td><\/tr><tr><td>Backup and portability<\/td><td>Reduces vendor lock-in and outage impact.<\/td><td>Mirror push support, repository export, API completeness.<\/td><\/tr><tr><td>Scale and performance<\/td><td>Affects large monorepos and globally distributed teams.<\/td><td>Clone\/fetch behavior, LFS support, concurrency limits.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Git commands for repository audit and migration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use these commands to inventory a repository, mirror it to a new host, and verify that refs were copied correctly.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\"><span class=\"hljs-comment\"># 1) Inspect current remotes and refs<\/span>\ngit remote -v\ngit branch -a\ngit tag -l<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\"><span class=\"hljs-comment\"># 2) Mirror-clone from old host<\/span>\ngit <span class=\"hljs-keyword\">clone<\/span> --mirror https:<span class=\"hljs-comment\">\/\/old-host.example.com\/team\/repo.git<\/span>\ncd repo.git\n\n<span class=\"hljs-comment\"># 3) Add destination and push all refs<\/span>\ngit remote add <span class=\"hljs-keyword\">new<\/span>-origin https:<span class=\"hljs-comment\">\/\/new-host.example.com\/team\/repo.git<\/span>\ngit push --mirror <span class=\"hljs-keyword\">new<\/span>-origin<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\"><span class=\"hljs-comment\"># 4) Verify heads and tags on destination<\/span>\ngit ls-remote --heads <span class=\"hljs-keyword\">new<\/span>-origin\ngit ls-remote --tags <span class=\"hljs-keyword\">new<\/span>-origin<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Command options compared: clone modes for migration<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Command<\/th><th>Best for<\/th><th>Important behavior<\/th><\/tr><\/thead><tbody><tr><td><code>git clone URL<\/code><\/td><td>Normal development checkout<\/td><td>Creates a working tree; not ideal for full-host migration.<\/td><\/tr><tr><td><code>git clone --bare URL<\/code><\/td><td>Server-side repository copy<\/td><td>No working tree; includes Git database for hosting use.<\/td><\/tr><tr><td><code>git clone --mirror URL<\/code><\/td><td>Host-to-host migration<\/td><td>Copies refs and remote-tracking data for near-complete replication.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Common pitfalls<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Choosing a platform before defining <strong>security and compliance<\/strong> requirements.<\/li><li>Migrating only branches and forgetting tags, protected branch rules, or automation hooks.<\/li><li>Assuming historical links from older blog posts represent current products without verification.<\/li><li>Skipping a pilot migration for one non-critical repository before full cutover.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The original post also included a YouTube gallery block that currently reports an API-key restriction error. The referenced URL in that block is <a href=\"https:\/\/www.youtube.com\/watch?v=ZCfrNvu6nMc\">youtube.com\/watch?v=ZCfrNvu6nMc<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This revised guide preserves the original 2014 list of Git hosting websites and adds a practical framework for evaluating providers today. It also includes a selection workflow and Git commands for safe repository migration.<\/p>\n","protected":false},"author":1,"featured_media":386,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[38],"tags":[],"class_list":["post-396","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-git"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/396","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=396"}],"version-history":[{"count":4,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/396\/revisions"}],"predecessor-version":[{"id":79267,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/396\/revisions\/79267"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/386"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=396"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=396"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=396"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}