ITM Version of the Git extensions to provide high-level repository operations for Vincent Driessen's branching model.
You find a short summary on the basic concept of Vincent Driessen's branching model in Steve's SourceTree blog post.
Other fantastic sources of information are:
- Why aren't you using git-flow (by Jeff Kreeftmeijer)
- How to use a scalable Git branching model called git-flow (by Build a Module)
- A short introduction to git-flow (by Mark Derricutt)
- On the path with git-flow (by Dave Bock)
-
Additional subcommands
git-flow clone
,git-flow commit
, andgit-flow release
for better user-friendliness. -
Less effort for user due to a fully automated creation of version numbers for upcoming releases and hotfixes.
-
Thorough overhaul of original git-flow subcommands:
-
Improved strategy for synchronization of local repository with remote one to ensure data consistency and avoid redundancy.
-
Additional action
git-flow feature update <name> [<base>]
to reduce required user interaction. -
Additional action
git-flow <branch specifier> delete [-l]
to further reduce necessity to use standard Git commands along with the ITM Gitflow script. -
Removed superfluous restrictions of original subcommands to be able to deal with a higher number of scenarios possibly occurring during development.
-
Additional flags for all subcommands to make them easier to use and more flexible.
-
Possibility to merge a hotfix branch also into an existing release branch when finishing it in order to reduce the number of necessary workarounds.
-
Further developed the concept of support branches to allow for special solutions where necessary.
-
-
Additional sanity checks to improve script stability and safety in terms of data loss and branch conflicts.
-
A more detailed and concise user feedback to speed up the development process.
-
Improved source code documentation.
For more detailed information on all available ITM Gitflow subcommands/branch specifiers, branch actions, and accepted flags and arguments, see the cheat sheet. It also provides you with some facts about the underlying Git branching model by Vincent Driessen and the particularities of ITM Gitflow, as well as some suggestions on how to get started with the script and on the actual workflow.
A complete list of modification can be found in the changelog of the ITM Gitflow script package.
See the Wiki for up-to-date installation instructions.
For those who use the bash or zsh shell, please check out the excellent work on the git-flow-completion project by bobthecow. It offers tab-completion for all git-flow subcommands and branch names.
The version numbering scheme is the following: <Major tag>.<Minor tag>.<Hotfix tag>
For more information, please see the FAQ section of the project Wiki.
This project is under development. Questions, tips, and general remarks are very welcome and I encourage you to use the Issues list on GitHub to provide that feedback.
Feel free to fork this repository and commit your additions.
Fork the repository. Then, run:
git clone --recursive git@github.com:<username>/ITM_gitflow.git
cd ITM_gitflow
Install the ITM Gitflow software by running make.
git-flow init -d
git-flow feature start <your feature>
When you're done, open a pull request to your feature branch.
To initialize a new repository with the basic branch structure, use:
git-flow init [-d]
This will then interactively prompt you with some questions on which branches you would like to use as development and production branches, and how you would like your prefixes be named. You may simply press Return on any of those questions to accept the (sane) default suggestions.
The -d
flag will accept all defaults.
-
To list/start/update/track/finish/delete feature branches, use:
git-flow feature git-flow feature start <name> [<base>] (default: <base>=develop) git-flow feature update <name> [<base>] (default: <base>=develop) git-flow feature track <name> git-flow feature finish <name> git-flow feature delete <name>
For feature branches, the
<base>
argument must be a branch, default value isdevelop
. -
To list/start/track/finish/delete hotfix branches, use:
git-flow hotfix git-flow hotfix start <version> git-flow hotfix track <name> git-flow hotfix finish <name> git-flow hotfix delete <name>
-
To list/start/track/finish/delete release branches, use:
git-flow release git-flow release start major or git-flow release start minor git-flow release track <name> git-flow release finish <name> git-flow release delete <name>
-
To list/start/delete support branches, use:
git-flow support git-flow support start <name> <base> git-flow support delete <name>
For support branches, the
<base>
argument must be a branch.
-
clone subcommand (clone + init + chmod):
git-flow clone <reference repository> <destination directory>
Clones the specified reference repository into the provided destination directory, e.g.
<destination directory>=.
, initializes the ITM Gitflow script package for the cloned repository, and modifies the access permissions of the target directory in such a way that only the owner of the repository is allowed to read, write, and execute all content. -
commit subcommand (commit + push):
git-flow commit [flags <arguments>]
Basically, the
commit
subcommand is a wrapper script combining a commit to the local repository with one to the tracked remote repository. For this, the standardgit commit
command is employed and, therefore,git-flow commit
accepts the same flags and arguments as thegit commit
command does. -
reset subcommand (reset + push):
git-flow reset [flags <arguments>]
Basically, the
reset
subcommand is a wrapper script combining a reset of the local repository with one of the tracked remote repository. For this, the standardgit reset
command is employed and, therefore,git-flow reset
accepts the same flags and arguments as thegit reset
command does.
The ITM Gitflow script package is published under the liberal terms of the MIT License and the original git-flow software is released under the FreeBSD License, see the LICENSE file. Although the MIT License does not require you to share any modifications you make to the source code, you are very much encouraged and invited to contribute back your modifications to the community, preferably in a GitHub fork, of course.