<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"> | |
<!-- ====================================================================== --> | |
<!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! --> | |
<!-- ====================================================================== --> | |
<html> | |
<head> | |
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> | |
<style type="text/css">@import "stylesheets/base.css";</style> | |
<meta name="author" value=" Apache UIMA Documentation Team"> | |
<meta name="email" value="dev@uima.apache.org"> | |
<title>Apache UIMA - Notes on Releases with Git</title> | |
<!-- Begin Cookie Consent plugin by Silktide - https://silktide.com/cookieconsent --> | |
<!-- Commented out because implied consent is not compatible with GDPR --> | |
<!-- | |
<script type="text/javascript"> | |
window.cookieconsent_options = {"message":"This website uses cookies to ensure you get the best experience on our website","dismiss":"Got it!","learnMore":"More info","link":"https://uima.apache.org/privacy-policy.html","theme":"dark-bottom"}; | |
</script> | |
<script type="text/javascript" src="/cookieconsent2/cookieconsent.min.js"></script> | |
--> | |
<!-- End Cookie Consent plugin --> | |
<!-- Begin Google Analytics --> | |
<!-- Commented out because GA requires consent according to GDPR --> | |
<!-- | |
<script> | |
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ | |
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), | |
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) | |
})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); | |
ga('create', 'UA-70846351-1', 'auto'); | |
ga('set', 'anonymizeIp', true); | |
ga('send', 'pageview'); | |
</script> | |
--> | |
<!-- End Google Analytics --> | |
</head> | |
<body> | |
<div class="topLogos"> | |
<table border="0" width="100%" cellspacing="0"> | |
<!-- TOP IMAGE --> | |
<tr> | |
<td align='LEFT'> | |
<a href="index.html"> | |
<img style="border: 1px solid black;" src="./images/UIMA_banner2tlpTm.png" alt="UIMA project logo" border="0"/> | |
</a> | |
</td> | |
<td align='CENTER'> | |
<div class="pageBanner">Notes on Releases with Git</div> | |
</td> | |
<td align='RIGHT'> | |
<a href="https://www.apache.org"> | |
<img src="./images/asf-logo-on-white-smallTm.png" alt="Apache UIMA" border="0"/> | |
</a> | |
</td> | |
</tr> | |
</table> | |
<hr noshade="" size="1"/> | |
</div> | |
<table border="0" width="100%" cellspacing="4"> | |
<tr> | |
<td align='RIGHT' colspan="2"> | |
<form method="get" action="https://www.google.com/search"> | |
Search the site | |
<input type="text" name="q" size="25" maxlength="255" value="" /> | |
<input type="hidden" name="sitesearch" value="https://uima.apache.org/" /> | |
<input name="Search" value="Search Site" type="submit"/> | |
</form> | |
</td> | |
</tr> | |
<tr> <!-- LEFT SIDE NAVIGATION --> | |
<td width="20%" valign="top"> | |
<!-- regular menu --> | |
<div class="navBar"> | |
<br/> | |
<div class="navBarItem"> <div class="navPartHeading">General</div> | |
</div> | |
<div class="navBar"> | |
<div class="navBarItem"> <a href="./index.html">Home</a> | |
</div> | |
<div class="navBarItem"> <a href="./downloads.cgi">Downloads</a> | |
</div> | |
<div class="navBarItem"> <a href="./documentation.html">Documentation</a> | |
</div> | |
<div class="navBarItem"> <a href="./news.html">News</a> | |
</div> | |
<div class="navBarItem"> <a href="./publications.html">Publications</a> | |
</div> | |
<br style="line-height: .5em"/> | |
<div class="navBarItem"> <a href="https://issues.apache.org/jira/browse/uima" target="_blank" rel="noopener">Issue tracker <img src="images/offsitelink.png"/></a> | |
</div> | |
<div class="navBarItem"> <a href="https://cwiki.apache.org/confluence/display/UIMA/" target="_blank" rel="noopener">Wiki <img src="images/offsitelink.png"/></a> | |
</div> | |
<br style="line-height: .5em"/> | |
<div class="navBarItem"> <a href="https://cwiki.apache.org/confluence/display/UIMA/Powered+by+Apache+UIMA" target="_blank" rel="noopener">Powered By UIMA <img src="images/offsitelink.png"/></a> | |
</div> | |
</div> | |
<br/> | |
<div class="navBarItem"> <div class="navPartHeading">Community</div> | |
</div> | |
<div class="navBar"> | |
<div class="navBarItem"> <a href="./get-involved.html">Get Involved</a> | |
</div> | |
<div class="navBarItem"> <a href="./mail-lists.html">Mailing Lists</a> | |
</div> | |
<div class="navBarItem"> <a href="./contribution-policy.html">Contribution Policies</a> | |
</div> | |
<div class="navBarItem"> <a href="./faq.html">FAQ</a> | |
</div> | |
<div class="navBarItem"> <a href="./project-guidelines.html">Project Guidelines</a> | |
</div> | |
</div> | |
<br/> | |
<div class="navBarItem"> <div class="navPartHeading">Scaleout Frameworks</div> | |
</div> | |
<div class="navBar"> | |
<div class="navBarItem"> <a href="./doc-uimaas-what.html">UIMA-AS</a> | |
</div> | |
<div class="navBarItem"> <a href="./doc-uimaducc-whatitam.html">UIMA-DUCC</a> | |
</div> | |
<div class="navBarItem"> <a href="./doc-uimaducc-demo.html">..Demo Page</a> | |
</div> | |
<div class="navBarItem"> <a href="http://uima-ducc-demo.apache.org:42133" target="_blank" rel="noopener">..Demo Live <img src="images/offsitelink.png"/></a> | |
</div> | |
</div> | |
<br/> | |
<div class="navBarItem"> <div class="navPartHeading">Components & Tools</div> | |
</div> | |
<div class="navBar"> | |
<div class="navBarItem"> <a href="./sandbox.html#uima-addons-annotators">Annotators</a> | |
</div> | |
<div class="navBarItem"> <a href="./toolsServers.html">Tools & Servers</a> | |
</div> | |
<div class="navBarItem"> <a href="./sandbox.html">Addons and Sandbox</a> | |
</div> | |
<div class="navBarItem"> <a href="./ruta.html">UIMA Ruta</a> | |
</div> | |
<div class="navBarItem"> <a href="./uimafit.html">uimaFIT</a> | |
</div> | |
<div class="navBarItem"> <a href="./external-resources.html">External Resources</a> | |
</div> | |
</div> | |
<br/> | |
<div class="navBarItem"> <div class="navPartHeading">Development</div> | |
</div> | |
<div class="navBar"> | |
<div class="navBarItem"> <a href="./dev-quick.html">Quick Start: building</a> | |
</div> | |
<div class="navBarItem"> <a href="./building-uima.html">Building from Source</a> | |
</div> | |
<div class="navBarItem"> <a href="./one-time-setup.html">One-time setups</a> | |
</div> | |
<div class="navBarItem"> <a href="./svn.html">Source Code</a> | |
</div> | |
<div class="navBarItem"> <a href="./release.html">Doing a UIMA release</a> | |
</div> | |
<div class="navBarItem"> <a href="https://www.apache.org/security/committers.html" target="_blank" rel="noopener">Doing a CVE (Apache) <img src="images/offsitelink.png"/></a> | |
</div> | |
<div class="navBarItem"> <a href="./eclipse-update-site.html">Eclipse Update Sites</a> | |
</div> | |
<div class="navBarItem"> <a href="./git.html">GIT</a> | |
</div> | |
<div class="navBarItem"> <a href="./codeConventions.html">Code Conventions</a> | |
</div> | |
<div class="navBarItem"> <a href="./uima-specification.html">UIMA Specification (OASIS)</a> | |
</div> | |
<div class="navBarItem"> <a href="./team-list.html">Project Team</a> | |
</div> | |
<div class="navBarItem"> <a href="./maven-design.html">Maven Use</a> | |
</div> | |
<div class="navBarItem"> <a href="./updating-website.html">Updating this Website</a> | |
</div> | |
</div> | |
<br/> | |
<div class="navBarItem"> <div class="navPartHeading">Events and Conferences</div> | |
</div> | |
<div class="navBar"> | |
<div class="navBarItem"> <a href="./coling14.html">COLING 2014</a> | |
</div> | |
<div class="navBarItem"> <a href="./gscl13.html">GSCL 2013</a> | |
</div> | |
<div class="navBarItem"> <a href="./iks09.html">IKS 2009</a> | |
</div> | |
<div class="navBarItem"> <a href="./gscl09.html">GSCL 2009</a> | |
</div> | |
<div class="navBarItem"> <a href="./lsm09.html">LSM 2009</a> | |
</div> | |
<div class="navBarItem"> <a href="./lrec08.html">LREC 2008</a> | |
</div> | |
<div class="navBarItem"> <a href="./gldv07.html">GLDV 2007</a> | |
</div> | |
</div> | |
<br/> | |
<div class="navBarItem"> <div class="navPartHeading">ASF</div> | |
</div> | |
<div class="navBar"> | |
<div class="navBarItem"> <a href="https://www.apache.org/licenses/" target="_blank" rel="noopener">License <img src="images/offsitelink.png"/></a> | |
</div> | |
<div class="navBarItem"> <a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener">ASF Sponsors <img src="images/offsitelink.png"/></a> | |
</div> | |
<div class="navBarItem"> <a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener">ASF Sponsorship <img src="images/offsitelink.png"/></a> | |
</div> | |
<div class="navBarItem"> <a href="./security_report">Security</a> | |
</div> | |
</div> | |
</div> | |
</td> | |
<td width="80%" align="left" valign="top"> | |
<div class="sectionTable"> | |
<table class="sectionTable"> | |
<tr><td> | |
<a name="Suggested basic release flow"><h1><img src="images/UIMA_4sq50tightCropSolid.png"/> Suggested basic release flow</h1></a> | |
</td></tr> | |
<tr><td> | |
<blockquote class="sectionBody"> | |
<ol><li><p>Update the master in preparation for the release, including things like the Readme, release-notes, | |
the Jira release pointer for ISSUES Fixed, API compatibility: previous version. | |
See <a target="_blank" rel="nofollow noopener" href="checklist-release.html">checklist-release</a> | |
</p></li> | |
<li><p>(optional, but recommended) Make a release branch, and do all the work | |
on that branch. Once the release is out, merge the branch back into the master (should have | |
very little change, other than new pom SNAPSHOT version levels).</p></li> | |
<li><p>Checkout the release branch, and run the normal maven release prepare / perform cycles.</p></li> | |
<li><p>Once the vote passes, retag the last rc with the rel/tag-name (see below).</p></li> | |
<li><p>If branched, merge the release branch back into the master (updating the pom SNAPSHOT version numbers).</p></li> | |
</ol> | |
<h2>Git Commands to use</h2> | |
<h3>Make new Release branch</h3> | |
<p>On github.com/apache/uima-xxx, use the website to create a new branch, suggested name rc/uimaxxx.x.y.z. | |
Don't use a name starting with rel/ because those branches are "protected".</p> | |
<p>First switch to the particular "master" (e.g. master or master-v2 or ... ). Then create the new branch, | |
which will start by being a copy of whatever branch github was on.</p> | |
<h3>Check out the new release branch</h3> | |
<p>Checkout a new release branch to a specific spot. </p> | |
<p>cd to your build spot; mkdir build-directory-rcX</p> | |
<p><code>git clone -b rc/uimaxxx.x.y.z https://github.com/apache/uima-uimaj build-directory-rcX</code></p> | |
</blockquote> | |
</p> | |
</td></tr> | |
</table> | |
<div class="sectionTable"> | |
<table class="sectionTable"> | |
<tr><td> | |
<a name="Tags"><h1><img src="images/UIMA_4sq50tightCropSolid.png"/> Tags</h1></a> | |
</td></tr> | |
<tr><td> | |
<blockquote class="sectionBody"> | |
<p>Tags are stored in the .git folder in the subfolder /refs/tags.</p> | |
<p>When Apache Infra sets up a writable git project, they set | |
<a target="_blank" rel="nofollow noopener" href="https://help.github.com/en/github/administering-a-repository/about-protected-branches"> | |
github protection</a>. The protection is set on | |
<ul><li>refs/heads/trunk</li> | |
<li>refs/heads/master</li> | |
<li>refs/heads/rel/</li> | |
<li>refs/tags/rel/</li> | |
</ul> | |
</p> | |
<p>After a release passes, make a new tag for the release with the name rel/...tag-name... Here's how:</p> | |
<ul><li><code>git tag -m "proj-name-1.2.3 rcXXX released" rel/proj-name-x.y.z proj-name-x.y.z^{}</code> | |
The strange notation ^{} peels the annotated tag and returns a ref to the actual commit.</li> | |
<li><code>git push origin rel/proj-name-x.y.z</code> This updates the new tag to the remote repo</li> | |
</ul> | |
</blockquote> | |
</p> | |
</td></tr> | |
</table> | |
<div class="sectionTable"> | |
<table class="sectionTable"> | |
<tr><td> | |
<a name="What the maven release plugin does with GIT"><h1><img src="images/UIMA_4sq50tightCropSolid.png"/> What the maven release plugin does with GIT</h1></a> | |
</td></tr> | |
<tr><td> | |
<blockquote class="sectionBody"> | |
<h2>release:prepare</h2> | |
<p> | |
<ul> | |
<li>Take all the poms in the project which start out at some x.y.z-SNAPSHOT version, and | |
update the versions to x.y.z (without the -SNAPSHOT).</li> | |
<li>Build the project.</li> | |
</ul> | |
</p> | |
<p> | |
<ul> | |
<li>Create a commit with all the updated POMs, and commit that to whatever branch was checked out at the start.</li> | |
<li>git push</li> | |
<li>Create a tag</li> | |
<li>git push</li> | |
</ul> | |
</p> | |
<p> | |
<ul> | |
<li>Update all the poms to x.y.z + 0.0.1 -SNAPSHOT, and commit them</li> | |
<li>git push</li> | |
</ul> | |
</p> | |
<h2>release:perform</h2> | |
<p>This does a build using the "tag" checkout, and uploads the artifacts to the maven staging repository.</p> | |
<p>The tag is cloned into the target/checkout directory</p> | |
<p>A build is done from the target/checkout spot, with maven artifacts uploaded to repository.apache.com staging area.</p> | |
</blockquote> | |
</p> | |
</td></tr> | |
</table> | |
<div class="sectionTable"> | |
<table class="sectionTable"> | |
<tr><td> | |
<a name="How to roll back a release attempt"><h1><img src="images/UIMA_4sq50tightCropSolid.png"/> How to roll back a release attempt</h1></a> | |
</td></tr> | |
<tr><td> | |
<blockquote class="sectionBody"> | |
<h2>(Optional) Reset the branch to last commit before release:prepare</h2> | |
<p>If you don't do this, when you do the release:prepare again, it will increment the SNAPSHOT and release numbers, | |
and you'll need to override those. It's fine to work this way, as long as you remember to override the release | |
and SNAPSHOT numbers. | |
</p> | |
<p>The idea is to reset the branch being used to build, back to the commit just before the maven release:prepare | |
commit, which is identified with the message <code>[maven-release-plugin] prepare for next development iteration</code>.</p> | |
<p>Do this by working in a checkout of the branch being used to build, typing <code>git log ...</code> and finding the hash | |
for the commit right before the prepare commit.</p> | |
<p>Don't do this next step unless you know no one has fetched the previously pushed maven release changes. | |
This is typically true, because only you are working on the release, and you typically will be working in | |
a branch made just for this, which others are unlikely to access.</p> | |
<ul><li><code>git log -5 --oneline</code> # shows the last 5 commits. Find the last commit before the maven prepare one.</li> | |
<li><code>git reset --hard hash-of-commit</code> where hash-of-commit is from the log </li> | |
<li><code>git push -f origin branch-name # force needed because removing history</code></li> | |
</ul> | |
<h2>Remove the previously created tag</h2> | |
<p>Next, because the release:prepare created a tag, you need to remove it. Do this:</p> | |
<ul><li><code>git tag</code> to list the tags</li> | |
<li><code>git tag -d name-of-tag</code> to delete, e.g. uimaj-3.1.1. This deletes it locally only.</li> | |
<li><code>git push origin :refs/tags/name-of-tag</code> to remove the tag in the remote.</li> | |
</ul> | |
<h2>Do any fixes, updates and then rerun the release</h2> | |
</blockquote> | |
</p> | |
</td></tr> | |
</table> | |
</td> | |
</tr> | |
<!-- FOOTER --> | |
<tr><td colspan="2"> | |
<hr noshade="" size="1"/> | |
</td></tr> | |
<tr><td colspan="2"> | |
<table class="pageFooter"> | |
<tr> | |
<td><a href="index.html">Home</a></td> | |
<td><a href="privacy-policy.html">Privacy Policy</a></td> | |
<td style="font-size:75%"> | |
Copyright © 2006-2013, The Apache Software Foundation.<br/> | |
Apache UIMA, UIMA, the Apache UIMA logo and the Apache Feather logo are trademarks of The Apache Software Foundation.<br/> | |
All other marks mentioned may be trademarks or registered trademarks of their respective owners. | |
</td> | |
<td><a href="mailto:dev@uima.apache.org">Contact us</a></td> | |
</tr> | |
</table> | |
</td></tr> | |
</table> | |
</body> | |
</html> | |