An open API service indexing awesome lists of open source software.

https://github.com/dimagi/git-build-branch

Utility tool for building Git branches my merging multiple other branches together.
https://github.com/dimagi/git-build-branch

Last synced: 5 months ago
JSON representation

Utility tool for building Git branches my merging multiple other branches together.

Awesome Lists containing this project

README

          

==================
git-build-branch
==================

.. image:: https://img.shields.io/pypi/v/git-build-branch.svg
:target: https://pypi.python.org/pypi/git-build-branch

Utility tool for building Git branches by merging multiple other branches together.

* Free software: BSD license

For guidelines on contributing to the project please read the CONTRIBUTING_ documentation.

.. _CONTRIBUTING: CONTRIBUTING.rst

Documentation
-------------
In some cases it may be desirable to have full control over what code is deployed. This can
be accomplished by creating a YAML configuration file to describe what should be included in your branch.

The format of the file is as follows:

.. code-block:: yaml

trunk: master
name: autostaging # name of the branch to build
branches: # list of branches to merge into final branch
- feature1
- feature2
- forkowner:feature3 # branch from fork of repository
submodules:
submodules/module1:
branches:
- feature1
- forkowner:feature2 # branch from fork of repository
submodules/module2:
trunk: develop
branches:
- feature2

To add some safety around this file you should use the ``safe-commit-files`` utility:

.. code-block:: shell

safe-commit-files --push /path/to/branch_config.yml

Building the branch
~~~~~~~~~~~~~~~~~~~
This configuration file can be used to build a deploy branch:

.. code-block:: bash

git checkout master
git-build-branch path/to/branch_config.yml

Conflict Resolution
~~~~~~~~~~~~~~~~~~~

First, determine where the conflict lies.

a). branch ``foo`` conflicts with ``master``

.. code-block:: shell

git checkout -b foo origin/foo
git pull origin master

# try to resolve conflict

git push origin foo

b). branch ``foo`` conflicts with branch ``bar``

You can't just merge foo into bar or vice versa, otherwise the PR
for foo will contain commits from bar. Instead make a third,
conflict-resolution branch:

.. code-block:: shell

git checkout -b foo+bar --no-track origin/foo
git pull origin bar

# try to resolve conflict

git push origin foo+bar

Now add the branch ``foo+bar`` to ``branch_config.yml`` and move branches foo and
bar to right below it.

Later on branch B gets merged into master and removed from ``branch_config.yml``.

Perhaps the person who removes it also notices the A+B and does the
following. Otherwise anyone who comes along and sees A+B but not both
branches can feel free to assume the following need to be done.

* Merge A+B into A. Since B is now gone, you want to merge the
resolution into A, otherwise A will conflict with master.

* Remove A+B from ``branch_config.yml``. It's no longer necessary since it's
now a subset of A.

If you are unsure of how to resolve a conflict, notify the branch owner.