Repo is a tool provided by Google that simplifies using Git in the context of the Android source.
# Make a directory where Repo will be stored and add it to the path
$ mkdir ~/bin
$ PATH=~/bin:$PATH
# Download Repo itself
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
# Make Repo executable
$ chmod a+x ~/bin/repo
# Create a directory for the source files
# This can be located anywhere (as long as the fs is case-sensitive)
$ mkdir WORKSPACE
$ cd WORKSPACE
# Install Repo in the created directory
# Use a real name/email combination, if you intend to submit patches
$ repo init -u https://github.com/crdroidandroid/android -b 5.1.1
This is what you will run each time you want to pull in upstream changes. Keep in mind that on your first run, it is expected to take a while as it will download all the required Android source files and their change histories.
# Let Repo take care of all the hard work
$ repo sync
In case you are not interested in syncing all the projects, you can specify what projects you do want to sync. This can help if, for example, you want to make a quick change and quickly push it back for review. You should note that this can sometimes cause issues when building if there is a large change that spans across multiple projects.
# Specify one or more projects by either name or path
# For example, enter AOSPA/android_frameworks_base or
# frameworks/base to sync the frameworks/base repository
$ repo sync PROJECT
# Go to the root of the source tree...
$ cd WORKSPACE
# ...and run to prepare our devices list.
$ . build/envsetup.sh
# ...choose your device by picking a combo
$ lunch
# ... now run after the combo picked
$ brunch "your device name"