Rhiakath Guru
Joined: 10 Feb 2006 Posts: 572 Location: Hell...
|
Posted: Fri Feb 08, 2013 11:26 am Post subject: project organization with git. Some advice needed |
|
|
Hi there.
I code for a living and for a hobby ( I know, i know, I should get a life ).
So, I frequently have a pet project in which i use some.... modules. For example, I have a folder called Utils, with general utility code which i'm always using. Also a folder for a logging system. And another for a OpenGL Framework, etc etc.
So, i created a git repo for each of these. So far so good.
now, I'm trying to get some of this together to build a graphics engine. The opengl framework uses the logging system, so i added the logger as a git submodule of opengl framework. As for utils.
Also, since the graphics engine is supposed to show something, I've written some code to load models from some data files.
But, this code, as I see it, is not supposed to be part of the graphics engine. Whoever loads the models, should have it, right? And then pass the models in an internal object to the graphics engine.
So, I have a Test application, which loads models, and displays them using the graphics engine. As such, the Test application has them as submodules.
So, this tree is the final result:
Code: |
./GLFramework
./GLFramework/Utils
./GLFramework/Logger
./GLFramework/Physics
./GLFramework/Math
./GLFramework/Image
./GLFramework/Model
./GLFramework/XWindow
./Test
./Test/XKeyboard
./Test/DataFileFormats
./Test/DataFileFormats/ModelMD5
./Test/DataFileFormats/ModelWHM
./Test/DataFileFormats/ModelMOD
./Test/DataFileBase
|
But now, I have a dilemma. The model loader in the test, also uses the logger, to show data file loading errors, etc etc. And as such, I've began wondering. How should I organize this?
Do I do a #include <GLFramework/Logger/Logger.h> ? That sounds bad. The logger isn't part of a GL Framework, the Framework just uses it.
Also, if I add the Logger as a submodule of the test, it becomes a bit stupid. Two copies of the same code, in the same project??
Also, I could just modify the data loading code or makefile to point two folders above to search for the logger, but that also feels wrong.
So, I tried a different approach. An empty project, with no code, but with a lot of submodules.
It got me this:
Code: |
./Utils
./Logger
./Physics
./Math
./Image
./Model
./GLFramework
./XWindow
./Test
./XKeyboard
./DataFileFormats
./DataFileFormats/ModelMD5
./DataFileFormats/ModelWHM
./DataFileFormats/ModelMOD
./DataFileBase
|
All this in the Graphics engine folder.
What i had before trying to use git, was simply, each module in its own folder, and all on the same level, kinda like this last approach.
It works for sharing modules across multiple projects, but then there's no auto fetching of modules by git, etc etc. This way, I have a project with several submodules, and i can automatically fetch all of them, manage them, etc etc.
This still has the problem that I use the Logger for other projects, and if i change something in one project I can either copy the folder to another project, or commit it, and update it on the other project.
I think the best way to do this, was to be able to have a submodule of a project being created on the same level as the project folder, instead of inside it, so every project would see the same code, but i seem to not be able to do it with git.
What do you think? How should I organize this? _________________ pc-rhiakath ~ $ emerge -s happiness
Searching..
[ Results for search key : happiness ]
[ Applications found : 0 ]
-------------------------------------------
I see dead pixels... |
|