Difference between repo start and git checkout -b

Doing some work in the Android Kernel. I am very familiar with git, but not extraordinarily familiar with repo, so I read the following document: http://source.android.com/source/version-control.html. To my understanding from it, as well as experimenting around with topic branches, repo start BRANCH_NAME is the same as git checkout -b BRANCH_NAME. Am I correct in my understanding, or are there some subtle, important details that I am missing?

  • How to add an extra project into existing Android operating system source?
  • Best way to change android repository versions efficiently once downloaded using repo/git
  • Download Android code for Contacts application
  • How to browse Android source code at a particular version?
  • Android Repo init failed
  • How does the Android repo manifest repository work?
  • Using git fast-export to export a repo starting at a given commit
  • Git - error: RPC failed; result=22, HTTP code = 401 fatal: The remote end hung up unexpectedly
  • git merge does not merge
  • How do I access my SSH public key?
  • Deploy and build my go app on my server
  • Is it possible to completely empty a remote Git repository?
  • 2 Solutions collect form web for “Difference between repo start and git checkout -b”

    Looking at the start.py source code for repo start, I believe the main difference is in the management of the manifest files which are included in Android projects.

    begins a new branch of development, starting from the revision specified in the manifest.

    To add to Trevor Johns’ answer, you need to check “How do you make an existing Git branch track a remote branch?” (when you are not using repo start):

    git checkout -b newBranch -t aosp/master

    That will set remote and merge (-t = “track”) in the config associated to the new branch.

    A simple git checkout -b wouldn’t set anything, and create a purely local branch (without tracking any upstream branch to a remote repo)

    The difference is that repo start sets the remote and merge properties for your branch inside of .git/config:

    [branch "YOUR_BRANCH_HERE"]
        remote = aosp
        merge = master

    Without these, repo won’t know how to properly upload your change when you run repo upload later, and it will act as if your new branch simply doesn’t exist.

    (There’s also some logic in there that lets you create the new branch for every project in the repo simultaneously with --all, but that’s just a convenience thing.)

    Git Baby is a git and github fan, let's start git clone.