7

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?

Brent Hronik
  • 2,357
  • 1
  • 27
  • 43

2 Answers2

6

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.)

Trevor Johns
  • 15,682
  • 3
  • 55
  • 54
3

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)

Community
  • 1
  • 1
VonC
  • 1,262,500
  • 529
  • 4,410
  • 5,250