I'm trying to solve a problem with git, but I think I'm going about it the 
wrong way.  I've tried searching for a lot of related terms, but either the 
answer isn't out there, or I'm not trying the right words.  It's possible 
git can't do what I want, but I hope so.

We've been using git to manage our puppet manifests and content files for 
over a year now.  We have 2 branches, master and devel.  We make changes to 
the "devel" branch, do a git pull of "devel" on the development server, 
then test with the development workstations.  When the changes are ready, 
we merge them into "master", do a git pull of "master" on the production 
server, and the production network (Linux) clients get the changes.

This has been working well enough.  There are only 2 of us making changes, 
so there are few conflicts.  The issue is that now we're adding 2 more 
developers for a different platform (OS X), but they'll be working with 
files in the same filesystem tree (and currently the same git branch) as we 
are for Linux.  99% of their work will be on different files, but in the 
same directories as our files.

What we'd like to be able to do is push either:

a) changes just made to the Linux files
b) changes made by one person
c) select commits

to the "master" branch, and thus production server, without also merging 
any potentially not-ready-for-prime-time changes made to the OS X files 
and/or one or both of the OS X developers.  It would be nice for Linux 
developer A to be able to exclude Linux developer B's changes too, 
sometimes, but not as critical.

We initially thought of creating a separate development branch that only 
had their files, but trying to have two git branches share a single 
filesystem location doesn't work, at least not the way we're doing it 
(check out the OS X branch, and /etc/puppet/darwinstuff is there, but 
/etc/puppet/linuxstuff vanishes, and vice-versa).  Complicating things is 
the fact that their files (currently a small quantity, but sure to grow) 
are currently in the "devel" branch as the result of a previous effort.

I feel like this has to be easier than I'm making it, and I'm just going 
about it the wrong way because I don't understand Git well enough.  But the 
documentation I've found doesn't really seem to describe how to solve this.


Reply via email to