Commit 1755f67c authored by Jonathan Doklovic's avatar Jonathan Doklovic

Merge branch 'release/1.0-m5'

parents 1657c024 83eb9d5d
# JGit-Flow
**Current Version: 1.0-m3**
**Current Version: 1.0-m5**
**Issue Tracker Has Moved To: [https://ecosystem.atlassian.net/browse/MJF](https://ecosystem.atlassian.net/browse/MJF)**
......@@ -9,25 +9,7 @@ blog post").
It is based on Vincent Driessen's excellent command line tool [gitflow](https://github.com/nvie/gitflow) and is built on top of [JGit](http://eclipse.org/jgit/)
Currently it is only implemented as a JAVA library, but we will soon be adding JGit command line integration.
## Read The Wiki
For more information and usage guide, [see the wiki](https://bitbucket.org/atlassian/jgit-flow/wiki)
## Read The Docs
For more information and docs, see our new site: [http://jgitflow.bitbucket.org/](http://jgitflow.bitbucket.org/)
# Maven JGit-Flow Plugin
**Current Version: 1.0-m3**
**The Issue Tracker Has Moved To: [https://ecosystem.atlassian.net/browse/MJF](https://ecosystem.atlassian.net/browse/MJF)**
The Maven JGit-Flow Plugin is based on and a replacement for the maven-release-plugin to enable git-flow release workflows.
This plugin also provides support for other git-flow tasks like managing features and hotfixes.
For more information and usage guide, [see the wiki](https://bitbucket.org/atlassian/jgit-flow/wiki)
For discussion about the plugin, [see the google group](https://groups.google.com/forum/#!forum/maven-jgitflow-users)
To log an issue or feature request, [use the issue tracker](https://ecosystem.atlassian.net/browse/MJF)
Got something to say? [@sysbliss](https://twitter.com/sysbliss) #MavenJGitFlow
\ No newline at end of file
......@@ -4,7 +4,7 @@
<parent>
<groupId>external.atlassian.jgitflow</groupId>
<artifactId>jgitflow-parent</artifactId>
<version>1.0-m4.3</version>
<version>1.0-m5</version>
</parent>
<artifactId>jgit-flow-core</artifactId>
......@@ -56,6 +56,14 @@
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<inherited>false</inherited>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
package com.atlassian.jgitflow.core;
import com.google.common.base.Strings;
import org.eclipse.jgit.lib.Config;
import org.eclipse.jgit.lib.Config.ConfigEnum;
import org.eclipse.jgit.lib.ConfigConstants;
......@@ -37,6 +38,27 @@ public enum CoreEol implements ConfigEnum
DEFAULT);
}
public static CoreEol fromString(String eol)
{
if(!Strings.isNullOrEmpty(eol))
{
for(CoreEol type : CoreEol.values())
{
if(type.toConfigValue().equalsIgnoreCase(eol))
{
return type;
}
}
}
return null;
}
public static boolean isValid(String eol)
{
return (null != fromString(eol));
}
@Override
public String toConfigValue()
{
......
......@@ -11,20 +11,20 @@ import static com.atlassian.jgitflow.core.util.Preconditions.checkState;
* Instances of this class can be passed to the {@link com.atlassian.jgitflow.core.JGitFlow} init methods to override the default
* branch names and prefixes used by git flow.
* </p>
* <p/>
* <p></p>
* Examples:
* <p/>
* <p></p>
* Override master branch name
* <p/>
* <p></p>
* <pre>
* InitContext ctx = new InitContext();
* ctx.setMaster("GA");
*
* JGitFlow flow = JGitFlow.getOrInit(new File(&quot;some dir&quot;), ctx);
* </pre>
* <p/>
* <p></p>
* Override master branch and release prefix
* <p/>
* <p></p>
* <pre>
* InitContext ctx = new InitContext();
* ctx.setMaster(&quot;GA&quot;).setRelease(&quot;rel/&quot;);
......
......@@ -14,14 +14,14 @@ import org.eclipse.jgit.lib.RepositoryBuilder;
/**
* Offers a Git Flow API to interact with a git repository.
* <p/>
* <p></p>
* This class only offers methods to construct so-called command classes. Each
* command is represented by one command class.<br>
* Example: this class offers a {@code featureStart} method returning an instance of
* the {@code FeatureStartCommand} class. The {@code FeatureStartCommand} class has setters
* for all the arguments and options. The {@code FeatureStartCommand} class also has a
* {@code call} method to actually execute the command.
* <p/>
* <p></p>
* All mandatory parameters for commands have to be specified in the methods of
* this class, the optional parameters have to be specified by the
* setter-methods of the Command class.
......
......@@ -25,32 +25,32 @@ import org.eclipse.jgit.revwalk.RevWalk;
/**
* Initializes a project for use with git flow
* <p/>
* <p></p>
* Examples:
* <p/>
* <p></p>
* Initialize with the defaults or throw an exception if it's already initialized
* <p/>
* <p></p>
* <pre>
* JGitFlow flow = JGitFlow.init(new File(&quot;some dir&quot;));
* </pre>
* <p/>
* <p></p>
* Initialize with the defaults or return the instance if it's already initialized
* <p/>
* <p></p>
* <pre>
* JGitFlow flow = JGitFlow.getOrInit(new File(&quot;some dir&quot;));
* </pre>
* <p/>
* <p></p>
* Initialize with custom overrides or return the instance if it's already initialized
* <p/>
* <p></p>
* <pre>
* InitContext ctx = new InitContext();
* ctx.setMaster("GA");
*
* JGitFlow flow = JGitFlow.getOrInit(new File(&quot;some dir&quot;), ctx);
* </pre>
* <p/>
* <p></p>
* Initialize with custom overrides replacing any existing configuration
* <p/>
* <p></p>
* <pre>
* InitContext ctx = new InitContext();
* ctx.setMaster("GA");
......@@ -398,7 +398,7 @@ public class JGitFlowInitCommand implements Callable<JGitFlow>
/**
* Whether to override the current configuration
*
* @param force <code>true</code> to override, <code>false</code>(default) otherwise
* @param force {@code true} to override, {@code false}(default) otherwise
* @return {@code this}
*/
public JGitFlowInitCommand setForce(boolean force)
......
......@@ -19,6 +19,7 @@ import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.merge.MergeStrategy;
import org.eclipse.jgit.transport.RefSpec;
import org.eclipse.jgit.util.StringUtils;
public abstract class AbstractBranchMergingCommand<C, T> extends AbstractGitFlowCommand<C, T>
{
......@@ -72,9 +73,19 @@ public abstract class AbstractBranchMergingCommand<C, T> extends AbstractGitFlow
}
else
{
mergeResult = git.merge().setFastForward(ffMode).include(localBranchRef).call();
MergeCommand mergeCommand = git.merge().setFastForward(ffMode).include(localBranchRef);
// check if you want scmCommentSuffix/scmCommentPrefix in the comment (if either is set, it shuold be used for merge messages as well for consistency)
boolean isCustomScmMessage = (!StringUtils.isEmptyOrNull(getScmMessagePrefix())) || (!StringUtils.isEmptyOrNull(getScmMessageSuffix()));
if(isCustomScmMessage) {
mergeCommand.setCommit(false);
}
mergeResult = mergeCommand.call();
if (mergeResult.getMergeStatus().isSuccessful() && MergeCommand.FastForwardMode.FF.equals(ffMode))
if (mergeResult.getMergeStatus().isSuccessful() && (MergeCommand.FastForwardMode.FF.equals(ffMode) || isCustomScmMessage))
{
git.commit().setMessage(getScmMessagePrefix() + "merging '" + branchToMerge + "' into '" + mergeTarget + "'" + getScmMessageSuffix()).call();
}
......@@ -183,7 +194,7 @@ public abstract class AbstractBranchMergingCommand<C, T> extends AbstractGitFlow
/**
* Set whether to use the force flag when deleting the local feature branch
*
* @param force <code>true</code> to force, <code>false</code>(default) otherwise
* @param force {@code true} to force, {@code false}(default) otherwise
* @return {@code this}
*/
public C setForceDeleteBranch(boolean force)
......
......@@ -18,6 +18,7 @@ import com.atlassian.jgitflow.core.util.RequirementHelper;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.transport.PushResult;
import org.eclipse.jgit.transport.RefSpec;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -89,13 +90,22 @@ public abstract class AbstractGitFlowCommand<C, T> implements Callable<T>, JGitF
{
reporter.infoText(getCommandName(), "pushing '" + branchToPush + "'");
RefSpec branchSpec = new RefSpec(branchToPush);
git.push().setRemote(Constants.DEFAULT_REMOTE_NAME).setRefSpecs(branchSpec).call();
Iterable<PushResult> i = git.push().setRemote(Constants.DEFAULT_REMOTE_NAME).setRefSpecs(branchSpec).call();
for (PushResult pr : i)
{
reporter.infoText(getCommandName(), "messages: '" + pr.getMessages() + "'");
if (pr.getMessages() != null && pr.getMessages().length() > 0) {
// TODO: not sure if a message always means an error, so we may need to create a parameter to let the user control this
throw new JGitFlowGitAPIException("error pushing to " + branchToPush + " - " + pr.getMessages());
}
}
}
}
if (includeTags)
{
reporter.infoText(getCommandName(), "pushing tags");
// TODO: check for errors or at least log error messages received
git.push().setRemote(Constants.DEFAULT_REMOTE_NAME).setPushTags().call();
}
......@@ -165,7 +175,7 @@ public abstract class AbstractGitFlowCommand<C, T> implements Callable<T>, JGitF
/**
* Set whether to perform a git fetch of the remote branches before doing the merge
*
* @param fetch <code>true</code> to do the fetch, <code>false</code>(default) otherwise
* @param fetch {@code true} to do the fetch, {@code false}(default) otherwise
* @return {@code this}
*/
@Override
......@@ -184,7 +194,7 @@ public abstract class AbstractGitFlowCommand<C, T> implements Callable<T>, JGitF
/**
* Set whether to push the changes to the remote repository
*
* @param push <code>true</code> to do the push, <code>false</code>(default) otherwise
* @param push {@code true} to do the push, {@code false}(default) otherwise
* @return {@code this}
*/
@Override
......
......@@ -29,23 +29,23 @@ import static com.atlassian.jgitflow.core.util.Preconditions.checkState;
* <p>
* This will merge the feature into develop and set the local branch to develop.
* </p>
* <p/>
* Examples (<code>flow</code> is a {@link com.atlassian.jgitflow.core.JGitFlow} instance):
* <p/>
* <p></p>
* Examples ({@code flow} is a {@link com.atlassian.jgitflow.core.JGitFlow} instance):
* <p></p>
* Finish a feature:
* <p/>
* <p></p>
* <pre>
* flow.featureFinish(&quot;feature&quot;).call();
* </pre>
* <p/>
* <p></p>
* Don't delete the local feature branch
* <p/>
* <p></p>
* <pre>
* flow.featureFinish(&quot;feature&quot;).setKeepBranch(true).call();
* </pre>
* <p/>
* <p></p>
* Squash all commits on the feature branch into one before merging
* <p/>
* <p></p>
* <pre>
* flow.featureFinish(&quot;feature&quot;).setSquash(true).call();
* </pre>
......@@ -56,6 +56,7 @@ public class FeatureFinishCommand extends AbstractBranchMergingCommand<FeatureFi
private boolean rebase;
private boolean squash;
private boolean noMerge;
private boolean suppressFastForward;
private FeatureFinishExtension extension;
/**
......@@ -63,10 +64,8 @@ public class FeatureFinishCommand extends AbstractBranchMergingCommand<FeatureFi
* <p></p>
* An instance of this class is usually obtained by calling {@link com.atlassian.jgitflow.core.JGitFlow#featureFinish(String)}
*
* @param name The name of the feature
* @param git The git instance to use
* @param gfConfig The GitFlowConfiguration to use
* @param reporter
*/
public FeatureFinishCommand(String branchName, Git git, GitFlowConfiguration gfConfig)
{
......@@ -161,7 +160,8 @@ public class FeatureFinishCommand extends AbstractBranchMergingCommand<FeatureFi
MergeProcessExtensionWrapper developExtension = new MergeProcessExtensionWrapper(extension.beforeDevelopCheckout(), extension.afterDevelopCheckout(), extension.beforeDevelopMerge(), extension.afterDevelopMerge());
if (commitList.size() < 2)
{
mergeResult = doMerge(prefixedBranchName, gfConfig.getDevelop(), developExtension, false, MergeCommand.FastForwardMode.FF);
MergeCommand.FastForwardMode ffMode = suppressFastForward ? MergeCommand.FastForwardMode.NO_FF : MergeCommand.FastForwardMode.FF;
mergeResult = doMerge(prefixedBranchName, gfConfig.getDevelop(), developExtension, false, ffMode);
}
else
{
......@@ -212,7 +212,7 @@ public class FeatureFinishCommand extends AbstractBranchMergingCommand<FeatureFi
/**
* Set whether to perform a git rebase on the feature before doing the merge
*
* @param rebase <code>true</code> to do a rebase, <code>false</code>(default) otherwise
* @param rebase {@code true} to do a rebase, {@code false}(default) otherwise
* @return {@code this}
*/
public FeatureFinishCommand setRebase(boolean rebase)
......@@ -224,7 +224,7 @@ public class FeatureFinishCommand extends AbstractBranchMergingCommand<FeatureFi
/**
* Set whether to squash all commits into a single commit before the merge
*
* @param squash <code>true</code> to squash, <code>false</code>(default) otherwise
* @param squash {@code true} to squash, {@code false}(default) otherwise
* @return {@code this}
*/
public FeatureFinishCommand setSquash(boolean squash)
......@@ -239,6 +239,12 @@ public class FeatureFinishCommand extends AbstractBranchMergingCommand<FeatureFi
return this;
}
public FeatureFinishCommand setSuppressFastForward(boolean suppressFastForward)
{
this.suppressFastForward = suppressFastForward;
return this;
}
public FeatureFinishCommand setExtension(FeatureFinishExtension extension)
{
this.extension = extension;
......
......@@ -18,11 +18,11 @@ import org.eclipse.jgit.transport.RefSpec;
/**
* Publishes feature branch to the remote repository
* <p/>
* Examples (<code>flow</code> is a {@link com.atlassian.jgitflow.core.JGitFlow} instance):
* <p/>
* <p></p>
* Examples ({@code flow} is a {@link com.atlassian.jgitflow.core.JGitFlow} instance):
* <p></p>
* Publish a feature:
* <p/>
* <p></p>
* <pre>
* flow.featurePublish(&quot;feature&quot;).call();
* </pre>
......@@ -36,10 +36,8 @@ public class FeaturePublishCommand extends AbstractGitFlowCommand<FeaturePublish
* <p></p>
* An instance of this class is usually obtained by calling {@link com.atlassian.jgitflow.core.JGitFlow#featurePublish(String)}
*
* @param name The name of the feature
* @param git The git instance to use
* @param gfConfig The GitFlowConfiguration to use
* @param reporter
*/
public FeaturePublishCommand(String branchName, Git git, GitFlowConfiguration gfConfig)
{
......
......@@ -9,11 +9,11 @@ import org.eclipse.jgit.api.errors.GitAPIException;
/**
* Performs a rebase of the feature branch
* <p/>
* Examples (<code>flow</code> is a {@link com.atlassian.jgitflow.core.JGitFlow} instance):
* <p/>
* <p></p>
* Examples ({@code flow} is a {@link com.atlassian.jgitflow.core.JGitFlow} instance):
* <p></p>
* Rebase a feature:
* <p/>
* <p></p>
* <pre>
* flow.featureRebase(&quot;feature&quot;).call();
* </pre>
......@@ -27,7 +27,6 @@ public class FeatureRebaseCommand extends AbstractGitFlowCommand<FeatureRebaseCo
* <p></p>
* This command is usually run as part of a release finish by calling {@link FeatureFinishCommand#setRebase(boolean)}
*
* @param name The name of the feature
* @param git The git instance to use
* @param gfConfig The GitFlowConfiguration to use
*/
......@@ -55,7 +54,7 @@ public class FeatureRebaseCommand extends AbstractGitFlowCommand<FeatureRebaseCo
try
{
git.checkout().setName(prefixedBranchName).call();
git.rebase().call();
git.rebase().setUpstream(gfConfig.getDevelop()).call();
}
catch (GitAPIException e)
{
......
......@@ -17,17 +17,17 @@ import org.eclipse.jgit.lib.Ref;
* <p>
* This will create a new branch using the feature prefix and feature name from the tip of develop
* </p>
* <p/>
* Examples (<code>flow</code> is a {@link com.atlassian.jgitflow.core.JGitFlow} instance):
* <p/>
* <p></p>
* Examples ({@code flow} is a {@link com.atlassian.jgitflow.core.JGitFlow} instance):
* <p></p>
* Start a feature:
* <p/>
* <p></p>
* <pre>
* flow.featureStart(&quot;feature&quot;).call();
* </pre>
* <p/>
* <p></p>
* Perform a fetch of develop before branching
* <p/>
* <p></p>
* <pre>
* flow.featureStart(&quot;feature&quot;).setFetch(true).call();
* </pre>
......@@ -45,7 +45,6 @@ public class FeatureStartCommand extends AbstractBranchCreatingCommand<FeatureSt
* @param branchName The name of the feature
* @param git The git instance to use
* @param gfConfig The GitFlowConfiguration to use
* @param reporter
*/
public FeatureStartCommand(String branchName, Git git, GitFlowConfiguration gfConfig)
{
......
......@@ -24,35 +24,35 @@ import static com.atlassian.jgitflow.core.util.Preconditions.checkState;
* <p>
* This will merge the hotfix into both master and develop and create a tag for the hotfix
* </p>
* <p/>
* Examples (<code>flow</code> is a {@link com.atlassian.jgitflow.core.JGitFlow} instance):
* <p/>
* <p></p>
* Examples ({@code flow} is a {@link com.atlassian.jgitflow.core.JGitFlow} instance):
* <p></p>
* Finish a hotfix:
* <p/>
* <p></p>
* <pre>
* flow.hotfixFinish(&quot;1.0&quot;).call();
* </pre>
* <p/>
* <p></p>
* Don't delete the local hotfix branch
* <p/>
* <p></p>
* <pre>
* flow.hotfixFinish(&quot;1.0&quot;).setKeepBranch(true).call();
* </pre>
* <p/>
* <p></p>
* Squash all commits on the hotfix branch into one before merging
* <p/>
* <p></p>
* <pre>
* flow.hotfixFinish(&quot;1.0&quot;).setSquash(true).call();
* </pre>
* <p/>
* <p></p>
* Push changes to the remote origin
* <p/>
* <p></p>
* <pre>
* flow.hotfixFinish(&quot;1.0&quot;).setPush(true).call();
* </pre>
* <p/>
* <p></p>
* Don't create a tag for the hotfix
* <p/>
* <p></p>
* <pre>
* flow.hotfixFinish(&quot;1.0&quot;).setNoTag(true).call();
* </pre>
......@@ -72,7 +72,6 @@ public class HotfixFinishCommand extends AbstractBranchMergingCommand<HotfixFini
* @param hotfixName The name/version of the hotfix
* @param git The git instance to use
* @param gfConfig The GitFlowConfiguration to use
* @param reporter
*/
public HotfixFinishCommand(String hotfixName, Git git, GitFlowConfiguration gfConfig)
{
......@@ -135,11 +134,6 @@ public class HotfixFinishCommand extends AbstractBranchMergingCommand<HotfixFini
doPushIfNeeded(extension, !noTag, gfConfig.getDevelop(), gfConfig.getMaster(), prefixedBranchName);
}
if (mergeSuccess)
{
cleanupBranchesIfNeeded(gfConfig.getDevelop(), prefixedBranchName);
}
//Backmerge to release branch if needed
if (releaseBranchExists())
{
......@@ -156,6 +150,11 @@ public class HotfixFinishCommand extends AbstractBranchMergingCommand<HotfixFini
}
}
if (mergeSuccess)
{
cleanupBranchesIfNeeded(gfConfig.getDevelop(), prefixedBranchName);
}
reporter.infoText(getCommandName(), "checking out '" + gfConfig.getDevelop() + "'");
git.checkout().setName(gfConfig.getDevelop()).call();
......@@ -217,7 +216,7 @@ public class HotfixFinishCommand extends AbstractBranchMergingCommand<HotfixFini
/**
* Set whether to turn off tagging
*
* @param noTag <code>true</code> to turn off tagging, <code>false</code>(default) otherwise
* @param noTag {@code true} to turn off tagging, {@code false}(default) otherwise
* @return {@code this}
*/
public HotfixFinishCommand setNoTag(boolean noTag)
......
......@@ -18,11 +18,11 @@ import org.eclipse.jgit.transport.RefSpec;
/**
* Publishes hotfix branch to the remote repository
* <p/>
* Examples (<code>flow</code> is a {@link com.atlassian.jgitflow.core.JGitFlow} instance):
* <p/>
* <p></p>
* Examples ({@code flow} is a {@link com.atlassian.jgitflow.core.JGitFlow} instance):
* <p></p>
* Publish a hotfix:
* <p/>
* <p></p>
* <pre>
* flow.hotfixPublish(&quot;hotfix&quot;).call();
* </pre>
......@@ -37,7 +37,6 @@ public class HotfixPublishCommand extends AbstractGitFlowCommand<HotfixPublishCo
* An instance of this class is usually obtained by calling
* {@link com.atlassian.jgitflow.core.JGitFlow#hotfixPublish(String)}
*
* @param name The name of the feature
* @param git The git instance to use
* @param gfConfig The GitFlowConfiguration to use
*/
......
......@@ -17,17 +17,17 @@ import org.eclipse.jgit.lib.Ref;
* <p>
* This will create a new branch using the hotfix prefix and release name from the tip of develop
* </p>
* <p/>
* Examples (<code>flow</code> is a {@link com.atlassian.jgitflow.core.JGitFlow} instance):
* <p/>
* <p></p>
* Examples ({@code flow} is a {@link com.atlassian.jgitflow.core.JGitFlow} instance):
* <p></p>
* Start a feature:
* <p/>
* <p></p>
* <pre>
* flow.hotfixStart(&quot;1.0.1&quot;).call();
* </pre>
* <p/>
* <p></p>
* Perform a fetch of develop before branching
* <p/>
* <p></p>
* <pre>
* flow.hotfixStart(&quot;1.0.1&quot;).setFetch(true).call();
* </pre>
......@@ -45,7 +45,6 @@ public class HotfixStartCommand extends AbstractBranchCreatingCommand<HotfixStar
* @param hotfixName The name of the hotfix
* @param git The git instance to use
* @param gfConfig The GitFlowConfiguration to use
* @param reporter
*/
public HotfixStartCommand(String hotfixName, Git git, GitFlowConfiguration gfConfig)
{
......
......@@ -22,35 +22,35 @@ import static com.atlassian.jgitflow.core.util.Preconditions.checkState;
* <p>
* This will merge the release into both master and develop and create a tag for the release
* </p>
* <p/>
* Examples (<code>flow</code> is a {@link com.atlassian.jgitflow.core.JGitFlow} instance):
* <p/>
* <p></p>
* Examples ({@code flow} is a {@link com.atlassian.jgitflow.core.JGitFlow} instance):
* <p></p>
* Finish a release:
* <p/>
* <p></p>
* <pre>
* flow.releaseFinish(&quot;1.0&quot;).call();
* </pre>
* <p/>
* <p></p>
* Don't delete the local release branch
* <p/>
* <p></p>
* <pre>
* flow.releaseFinish(&quot;1.0&quot;).setKeepBranch(true).call();
* </pre>
* <p/>
* <p></p>
* Squash all commits on the release branch into one before merging
* <p/>
* <p></p>
* <pre>
* flow.releaseFinish(&quot;1.0&quot;).setSquash(true).call();
* </pre>
* <p/>
* <p></p>
* Push changes to the remote origin
* <p/>
* <p></p>
* <pre>
* flow.releaseFinish(&quot;1.0&quot;).setPush(true).call();
* </pre>
* <p/>
* <p></p>
* Don't create a tag for the release
* <p/>
* <p></p>
* <pre>
* flow.releaseFinish(&quot;1.0&quot;).setNoTag(true).call();
* </pre>
......@@ -73,7 +73,6 @@ public class ReleaseFinishCommand extends AbstractBranchMergingCommand<ReleaseFi
* @param releaseName The name/version of the release
* @param git The git instance to use
* @param gfConfig The GitFlowConfiguration to use
* @param reporter
*/