Subject: Re: Help planning a git repo layout

From: Boaz Harrosh <[email-masked]>
Date: Thu, 18 Sep 2008 16:25:08 +0300

Leevi Graham wrote:
> Thanks for the advice Boaz,
> 
> So to clarify:
> 
> Create a new git repo in the root of the EE install. This will be the  
> master branch.
> 
> Then create branches (from the master branch) for each addon (product  
> branches) that only shows the files that relate to that addon. How do  
> I filter out the files I don't want to see?
> 
> Work on each product branch independently merging as I go.
> 
> Occasionally merge everything back into the master branch so I know  
> that there are no conflicts with the product branches.
> 
> I think I have it pretty clear in my head.
> 
> Thanks for your patience and help
> 
> Leevi

NP. Please don't top-post when on a mailing list. It's good
when chatting with individuals, but it is a mess, for people
that need to view it on a mailing list archives.

Basically yes. You start with master and commit some basic/common
files like:
$ git add .gitignore; git-commit ...
$ git tag BEGIN
then create a branch
$ git checkout -b foo
selectively add files
$ git add foo/ include/foo doc/foo
$ git-commit
You might want to add all these in a set of patches for readability.
Then
$ git-checkout -b bar BEGIN
Note that all foo's files vanished
$ git add bar/ include/bar ...
$ git-commit ...
and so on...

Then at the end
$ git-checkout master
Note that all files have vanished
$ git-merge foo
$ git-merge bar
All the files are back

then you can clone locally to trees, one with foo checked-out,
one with bar, if you need to commit to both at once. Then push
and merge at master

Good luck
Boaz

> 
> On 18/09/2008, at 9:48 PM, Boaz Harrosh wrote:
> 
>> Leevi Graham wrote:
>>> Hey everyone,
>>>
>>> I'm after some advice on how to layout my git repo(s).
>>>
>>> Here's my current situation:
>>>
>>> I am developing 10 different ExpressionEngine addons that all live
>>> inside one ExpressionEngine installation. A simplified EE  
>>> installation
>>> has the following folders (all cruft removed):
>>>
>>> |-root
>>>   |-ee-admin
>>>   |---extensions
>>>   |---language
>>>   |---modules
>>>   |-themes
>>>   |---site_themes
>>>
>>> My addons are a combination of files located in the extensions,
>>> language, modules and themes folders. An simple extension may look  
>>> like:
>>>
>>> |-root
>>>   |-ee-admin
>>>   |---extensions
>>>   |-----ext.lg_data_matrix.php
>>>   |---language
>>>   |-----english
>>>   |---------lang.lg_data_matrix.php
>>>   |---modules
>>>   |-themes
>>>   |---site_themes
>>>
>>> The extension above contains two files:
>>>
>>> - /ee-admin/extensions/ext.lg_data_matrix.php
>>> - /ee-admin/language/english/ext.lg_data_matrix.php
>>>
>>> I will be developing multiple extensions in the one EE install to  
>>> make
>>> sure they all work with the core and do not conflict with each other.
>>> So my directory will have more than one addon in it:
>>>
>>> |-root
>>>   |-ee-admin
>>>   |---extensions
>>>   |-----ext.lg_data_matrix.php
>>>   |-----ext.lg_minify.php
>>>   |-----ext.lg_better_meta_ext.php
>>>   |---language
>>>   |-----english
>>>   |---------lang.lg_data_matrix.php
>>>   |---------lang.lg_minify.php
>>>   |---------lang.lg_better_meta.php
>>>   |---------lang.lg_better_meta_ext.php
>>>   |---modules
>>>   |-----lg_better_meta
>>>   |---------mcp.lg_better_meta.php
>>>   |---------mod.lg_better_meta.php
>>>   |-themes
>>>   |---site_themes
>>>
>>> My problem comes when I want to tag and release an individual addon
>>> which is a collection of files in multiple folders.
>>>
>>> Just say I wanted to tag and release LG Better Meta. Ideally I would
>>> like to export a folder structure like:
>>>
>>> - /ee-admin/extensions/ext.lg_better_meta.php
>>> - /ee-admin/language/english/ext.lg_better_meta.php
>>> - /ee-admin/language/english/ext.lg_better_meta_ext.php
>>> - /ee-admin/modules/lg_better_meta/mcp.lg_better_meta.php
>>> - /ee-admin/modules/lg_better_meta/mod.lg_better_meta.php
>>>
>>> I would also like to give people the ability to clone each of the
>>> addons either as a full repo or part thereof.
>>>
>>> Any advice would be greatly appreciated.
>>>
>>> Cheers Leevi
>>>
>> Have branches with individual views of files like the above
>> LG-Better-Meta starts from a clean tree and only adds
>> - /ee-admin/extensions/ext.lg_better_meta.php
>> - /ee-admin/language/english/ext.lg_better_meta.php
>> - /ee-admin/language/english/ext.lg_better_meta_ext.php
>> - /ee-admin/modules/lg_better_meta/mcp.lg_better_meta.php
>> - /ee-admin/modules/lg_better_meta/mod.lg_better_meta.php
>>
>> Other branches with other individual views of files.
>> Commits will have to be on the individual branches.
>> Lets call these product-branches
>>
>> Then you have integration branches that merge from time
>> to time the product-branches, master been the merge of
>> all.
>>
>> Users that only need a single product-branch will checkout
>> that one. Users needing all will checkout master.
>>
>> For your convenience, you can locally clone the master
>> git, and have checkouts of single product-branches so
>> you can commit patches in parallel. Then push and merge.
>>
>> Don't forget to give all empty branches at least one
>> common ancestor before adding files. Like with .gitignore
>>
>> Boaz
>>
>