Let's say I want to create a spinoff of a chat application branded under a different name, different UI, and some changed features. How would one sync changes between these to codebases which are 80% the same?
EDIT: Already use git.
This is a pretty generic question and one that should be covered in any basic Software Engineering course.
I'd start with:
SCM (Source CodeManagement) http://en.wikipedia.org/wiki/Source_Code_Management
Separate 'shared' code into libraries (either statically or dynamically linked)
There is a whole field of experts and products on this topic - revision control and merging.
You should look into using a distributed code repository, if it is usually a one-way sync (main development pushes to spinoff project).
Mercurial is one of the most popular DCR
There are many distributed code repository systems. The website provide a nice tutorial.