./thesis
├── docker-compose.yaml
├── micrsoserviceX
├── micrsoserviceY
├── memory-engine
Adapted from here. Below is an executive summary for the use case of a university collaborative thesis project.
We have the thesis
folder and some other, subproject folder (the memory-engine
in this example).
We want the thesis
to be a "main" repository, such that on a new machine, just pulling it is enough to get us started.
We also want to make it easy to make changes either to memory-engine/
code, or to code in the thesis/
or to both, without having to bump versions/commits every time we push to memory-engiine
.
We could have used git submodules
but it's so much pain (really).
- In
thesis/
:
git remote add memory-engine-origin git@github.com:warreee/memory-engine.git
- add the subtree (this will clone the master of the
memory-engine
repo and configre the thesis) repo.
git subtree add --prefix=memory-engine/ memory-engine-origin master
We have opened the thesis repo in, say, PyCharm, we make a change in the 'memory-engine' folder and just want to publish our changes without having to push first to the memory-engine
repo and then pulling from thesis
.
- e.g. if we are in
thesis/
, we can make changes to the memory-engine
touch ./memory-engine/boo
- and then push the changes to the
thesis
repo
git commit -am "added boo"
git push origin master
(origin here is the thesis origin)
In GitHub of thesis
, the commit would appear. Nothing special, but still useful because we didn't have to bump versions anywhere.
Example - change files in both the thesis
and the memory-engine
folders:
- make the changes
georgi@georgi-laptop:~/Projects/thesis/memory-engine(master)$ echo "boo :)" >> README.md
georgi@georgi-laptop:~/Projects/thesis(master)$ echo "testing" >> README.md
- make a commit and push it to the
thesis
repo
git commit -am "made a commit to both repos"
git push origin master
- Push to the
memory-engine
repo
georgi@georgi-laptop:~/Projects/thesis(master)$ git subtree push --prefix memory-engine memory-engine-origin master
- If we open the GitHub of
thesis
- we will see the commit, with both files changed. If we open the GitHub ofmemory-engine
, only the memory-engine/README.md will be in the commit. Voila
- push the branch to the
memory-engine
repo - In
thesis
rm -rf memory-engine
- Commit
georgi@georgi-laptop:~/Projects/thesis(master)$ git subtree add --prefix=memory-engine/ memory-engine-origin <memory-engine-branch-we-want>