Switch to github organization and Google repo

A few weeks ago we started cutting out the different parts of OpTiMSoC
from the original repository to
separate repositories at the new
organization. The aim is to structure
it better and have separation of different aspects of OpTiMSoC.

The method of separating subtrees from the original tree with keeping
the history is straight forward using git filter-branch. Some parts
of the history get lost, especially for the system software.
Nevertheless, we now have cut the original large repository into
smaller logical units. Some of them are only needed for installation
if you simply want to run OpTiMSoC, others are needed to build systems
or for debugging.

Finally, we struggled a bit with still allowing for a unified tree
layout, which is desirable for the documentation and ease of use. We
wanted a tree similar to the original layout and inspected git
submodule and git subtree. Unfortunately both did not convince us
entirely, as we don’t want people to learn new merge strategies etc.

We first started with a simple shell script that initially creates the
layout. After some more search we came to Google
repo, which is a git wrapper for
Android developers. While we don’t plan to use the entire feature set,
we use it to distribute the tree layout. The layout is distributed as
xml files and it is possible to define groups for different feature
sets.

To start a layout, simply create an empty folder, download the repo
script and make it executable:

Now you can initialize the repository layout. The script downloads
some more files from Google’s repositories and reads the remote xml
description into a local repository of the repository files, both in
the hidden path .repo.

./repo init -u https://github.com/optimsoc/optimsoc-repo

You then synchronize the repositories and repo clones and puts them
into “detached HEAD” state.

./repo sync

If you want to create a new feature branch for a part of OpTiMSoC you
can use the repo infrastructure or simply do this with the usual git
commands (create branch, stage, commit etc.). We are also still
experimenting with the best development strategies.