Coder Social home page Coder Social logo

tmt's Introduction

Temporary Merge Tool (tmt)

tmt helps you work with several feature branches at once, by generating a checkout that contains the merge of all of the desired branches, and helping you commit changes back to the relevant branch.

A use case is to develop several feature branches (or github pull requests) at once, testing all of them together, but keeping their history separate for sharing with others or merging to master.

Usage

All these commands should be run somewhere in a git checkout.

Initialise: tmt init

Show status: tmt status

Add in a branch to the current mix: tmt add <branchname> - you'll need to add two branches for this to be interesting. (eg master, and a feature branch)

Remove a branch from the current mix: tmt remove <branchname>

Commit changes you've made locally onto a specific branch: tmt on master git commit (or, tmt on <branch> <command>) tmt will switch to that branch, carrying over uncommitted changes if git is capable of doing so, run the command, then materialise the full mix again. This is especially prone to breaking (but hey, maybe all of that will get fixed?)

Force tmt to regenerate the current mix: tmt materialise

State file

.git/tmt-context is a mostly human readable files containing the branches used in the current mix, and should be safe to edit by hand when you need to repair something that tmt can't deal with. After editing, run tmt materialise to regenerate a checkout.

git rerere

tmt knows about git rerere. This can make the repeated materialisation of conflicting branches substantially more user friendly.

Turn git rerere on by typing:

git config --local rerere.enabled 1

and then fix and commit merge conflicts as before.

When a previously seen merge conflict is encountered during tmt materialise, git rerere will be used to replay the resolution, allowing the merge to complete successfully.

The user interface flow for this is a little awkward: you will see the initial git merge fail, followed by tmt fixing up the merge failure using git rerere.

Comparison to stgit

I like using stgit (https://github.com/ctmarinas/stgit) to keep different pieces of work separate (as patches) while also being able to use my local copy of a repo with several (or all) of those patches applied.

That doesn't work so well for collaborative development - stgit patches aren't themselves versioned, so are hard to share.

tmt is an attempt to get something like that workflow, but collaboratively. The equivalent to an stgit patch is a regular git branch. 'tmt' lets you combine a bunch of those regular branches into your work directory, and commit a change onto any of those branches. Regular git commands let you share those branches with other developers.

Command-line completion

bash commandline completion can be enabled by typing:

 source <(tmt --bash-completion-script $(which tmt))

In theory, completion is also available for zsh and fish using --zsh-completion-script and --fish-completion-script.

This uses the optparse-applicative library. More information on how that library handles command line completion is here: https://github.com/pcapriotti/optparse-applicative#bash-zsh-and-fish-completions

License

tmt is Copyright (C) 2018 Ben Clifford

This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License
as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.