3

I am a freelance developer. I have multiple clients, each client has multiple projects, and each project has multiple distinct pieces of software. I recently migrated all my source control from my old subversion service to a business github account.

My question is, what is a workable strategy for organizing clients, projects, and applications, where the tools at my disposal are GitHub’s interface plus directory structures in my repos?

Currently I just have one repo per application, and I name the repos Client_Project_Application. It’s kind of ugly because I have this huge unmanageable list of repos and also if I want to grant somebody permission to access an entire client or project, it’s tedious to do it for every applicable repo individually. It’s also difficult to find specific repos quickly on the github site and desktop app.

What I want to be able to do is:

  • Keep all clients separate, ideally with the ability to grant a user permission to contribute to an entire client’s collection or an entire project.
  • Keep each application separate, because when I clone the repo on a dev machine I don’t always want everything (practical example: if I have a desktop application with 5gb of data in it and an associated raspberry pi application, there’s no reason to grab the massive desktop app on a pi dev machine — sometimes it’s not even possible).
  • Easily find/browse repos for a specific client and project on github.com and on github desktop, that is, some way to keep associated things close together instead of in the giant recently-used-first flat list of everything.
  • I prefer to work with repos visually as much as possible, that is through github.com and github desktop, especially when it comes to cloning repos because I have a hard time remembering precise repo names.
  • I’d really prefer to not have to add any extra steps into the normal change -> commit -> push workflow.

How is this type of organization usually done? I’m open to a complete change of my current “strategy”, I’ve always been poorly organized and I need to make some big changes here.

  • 1
    Possible duplicate of Choosing between Single or multiple projects in a git repository? – gnat Jan 19 '18 at 17:22
  • @gnat Awesome. Just read through that. Before I close this as a dupe, am I correct in understanding that those are the only two organizational options, and there’s nothing else closer to what I’m looking for? – Jason C Jan 19 '18 at 17:26
  • 1
    Github simply doesn't offer any particular support for your use case. I use repo name prefixes for the same purpose. Note that GH competitors such as Bitbucket do allow you to group multiple repos into one project. – amon Jan 19 '18 at 18:36
  • 1
    I think it's a bit too early to jump at conclusions yet - per my recollection when I faced similar problem I studied not only duplicate but most of the questions linked to it, in order to make sure that I didn't miss something useful – gnat Jan 19 '18 at 21:21
  • 1
    As a more balanced solution, you could make one repo per client, and separate applications only by folder structure. For checking out a single application, you may use the techniques described in this older SO post. Another alternative is, let the repo structure as it is, but create some scripts or even UI tools for your most frequent multi-repo operations, utilizing the git command line tools. – Doc Brown Jan 19 '18 at 21:57
2

You can use organizations, meaning one organization by client.

Withing an organizations you can create multiple repository and manage permission on a repository and/or organization level.

The team plan is probably enough for the need you describe and you can easily include it in the price of your service.

Bonus if you want or need project management for all and across client get a look at Zenhub, they have a pretty good supprt for cross repositories/organizations boards. Again make the clients pay for it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.