[[ch09-git-and-other-systems]]
== Git and Other Systems

The world isn't perfect.
Usually, you can't immediately switch every project you come in contact with to Git.
Sometimes you're stuck on a project using another VCS, and wish it was Git.
We'll spend the first part of this chapter learning about ways to use Git as a client when the project you're working on is hosted in a different system.

At some point, you may want to convert your existing project to Git.
The second part of this chapter covers how to migrate your project into Git from several specific systems, as well as a method that will work if no pre-built import tool exists.

=== Git as a Client

(((Git as a client)))
Git provides such a nice experience for developers that many people have figured out how to use it on their workstation, even if the rest of their team is using an entirely different VCS.
There are a number of these adapters, called "`bridges,`" available.
Here we'll cover the ones you're most likely to run into in the wild.

include::book/09-git-and-other-scms/sections/client-svn.asc[]

include::book/09-git-and-other-scms/sections/client-hg.asc[]

include::book/09-git-and-other-scms/sections/client-p4.asc[]

[[_migrating]]
=== Migrating to Git

(((Migrating to Git)))
If you have an existing codebase in another VCS but you've decided to start using Git, you must migrate your project one way or another.
This section goes over some importers for common systems, and then demonstrates how to develop your own custom importer.
You'll learn how to import data from several of the bigger professionally used SCM systems, because they make up the majority of users who are switching, and because high-quality tools for them are easy to come by.

include::book/09-git-and-other-scms/sections/import-svn.asc[]

include::book/09-git-and-other-scms/sections/import-hg.asc[]

include::book/09-git-and-other-scms/sections/import-p4.asc[]

include::book/09-git-and-other-scms/sections/import-custom.asc[]

=== Summary

You should feel comfortable using Git as a client for other version-control systems, or importing nearly any existing repository into Git without losing data.
In the next chapter, we'll cover the raw internals of Git so you can craft every single byte, if need be.
