Git workflow for maintaining a derivative fork

别来无恙 提交于 2021-02-06 09:55:11

问题


Overview

I have a project that is a customisation of an existing FOSS product. Its getting to the point where we're maintaining a long-term fork rather than applying new plugins and the like. I'd like some input on what the sanest workflow for maintaining this project might be.

Criteria

  1. We should be able to send pull requests / patches upstream easily
  2. The project needs to track from tagged releases, and may be updated to newer releases as part of our own release workflow.
  3. Needs to have its own tagged releases
  4. Needs to have its own branching structure for a git-flow like development process.

Option 1

Just fork the project on github. Super messy to maintain and get people up to speed on. fails 3,4.

Option 2

Make a new repository, have a project maintainer pull in tagged releases of the upstream codebase as needed. eg something like git fetch upstream; git merge upstream/sometag tagintegrationbranch Not sure how to easily push fixes upstream in this model. Kind of fails 1.

Option 3

Fork the upstream project, use that as the upstream like in Option 2. Used as an aide to the PR system. Will probably have to do cherry-picks or some similar micromanagement to push code back up this workflow depending on how well feature/bug branches are managed, but should be fairly clean. Seems to satisfy most criteria.

Option ?

Something I have not considered?


回答1:


Option 3 seems to represent to clearest separation of workflow between the two projects:

  • one with occasional contribution back to the original project, with pull requests
  • one with entirely new branches and code for the new application

To facilitate the merges, I would recommend using hierarchical branch names in your repo, in order to clearly separate:

  • branches for your project development (classic names, no need for a '/' in them)
  • branches from the upstream/original repo (all prefixed with a name representing a branch from the original repo, like 'original/dev', for you to cherry-pick from or to)
    Those branches are already in their remotes/upstream namespace, but if you want to push back new commits, you need to create a local branch, and my point is: the name of that local branch should have a '/' in it, in order to clearly differentiate it with other regular branches for your project.


来源:https://stackoverflow.com/questions/22471151/git-workflow-for-maintaining-a-derivative-fork

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!