# Comparison with GitHub

> How GitHub concepts map onto Tangled, and where the models differ.

Most of what you do on GitHub has a direct counterpart on Tangled. Git itself is unchanged: commits, branches, tags and remotes work the same. What differs is who stores what: your account, your git data, and your CI can each live on a different server. Tangled is federated: those servers can be run by different people, including you, and still work together.

## Accounts

GitHub hosts every account itself. On Tangled, your account lives with an account provider (a PDS), and Tangled is one app that uses it. If you sign up with Tangled you get a handle like `alice.tngl.sh`. If you already have an atproto account, sign in with that handle instead; there is nothing to link.

## Repositories and hosting

On GitHub, the website and the git server are one service. On Tangled, the git server is a **knot**, and anyone can run one. Host repositories with Tangled on the knots we run, or on your own knot; the web app shows both the same way.

Issues and pull requests are stored on the same knot as the code, not in your account. That keeps a project’s discussion with the project, and the knot enforces who may write it.

## Pull requests

A GitHub pull request tracks a moving branch: force-push and the old commits disappear from the review. In contrast, pull request submissions in Tangled are immutable.

When you create a pull request, it creates an immutable “round”. To update your pull request, you may push to the same branch, and hit “resubmit” on the interface. This creates a new round. Each round records a fixed base and head commit, reviewers can read earlier rounds and observe a pull request as it evolves.

Tangled also has support for the Jujutsu version control system: it can automatically detect Jujutsu change-ids and can calculate interdiffs across rounds. [Pull requests](/docs/guides/pull-requests/) covers the workflow and its current limits.

## CI

Workflows live in `.tangled/workflows/*.yml` and run on a **spindle**: run CI with Tangled, or run your own spindle. [Writing workflows](/docs/spindles/writing-workflows/) has working examples.

To move an existing repository over, see [Migrating from GitHub](/docs/migrating-from-github/).