blob: ba576802a491103bff25e545fb08784370cd70eb [file] [log] [blame]
---
layout: docpage
title: "Documentation"
is_homepage: false
is_sphinx_doc: true
doc-parent: "Contributing to Cassandra"
doc-title: "How-to Commit"
doc-header-links: '
<link rel="top" title="Apache Cassandra Documentation v4.0-alpha3" href="../index.html"/>
<link rel="up" title="Contributing to Cassandra" href="index.html"/>
<link rel="next" title="Working on Documentation" href="documentation.html"/>
<link rel="prev" title="Review Checklist" href="how_to_review.html"/>
'
doc-search-path: "../search.html"
extra-footer: '
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: "",
VERSION: "",
COLLAPSE_INDEX: false,
FILE_SUFFIX: ".html",
HAS_SOURCE: false,
SOURCELINK_SUFFIX: ".txt"
};
</script>
'
---
<div class="container-fluid">
<div class="row">
<div class="col-md-3">
<div class="doc-navigation">
<div class="doc-menu" role="navigation">
<div class="navbar-header">
<button type="button" class="pull-left navbar-toggle" data-toggle="collapse" data-target=".sidebar-navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="navbar-collapse collapse sidebar-navbar-collapse">
<form id="doc-search-form" class="navbar-form" action="../search.html" method="get" role="search">
<div class="form-group">
<input type="text" size="30" class="form-control input-sm" name="q" placeholder="Search docs">
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</div>
</form>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../getting_started/index.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../architecture/index.html">Architecture</a></li>
<li class="toctree-l1"><a class="reference internal" href="../data_modeling/index.html">Data Modeling</a></li>
<li class="toctree-l1"><a class="reference internal" href="../cql/index.html">The Cassandra Query Language (CQL)</a></li>
<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuring Cassandra</a></li>
<li class="toctree-l1"><a class="reference internal" href="../operating/index.html">Operating Cassandra</a></li>
<li class="toctree-l1"><a class="reference internal" href="../tools/index.html">Cassandra Tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="../troubleshooting/index.html">Troubleshooting</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Contributing to Cassandra</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="gettingstarted.html">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="ide.html">Building and IDE Integration</a></li>
<li class="toctree-l2"><a class="reference internal" href="testing.html">Testing</a></li>
<li class="toctree-l2"><a class="reference internal" href="patches.html">Contributing Code Changes</a></li>
<li class="toctree-l2"><a class="reference internal" href="code_style.html">Code Style</a></li>
<li class="toctree-l2"><a class="reference internal" href="how_to_review.html">Review Checklist</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">How-to Commit</a></li>
<li class="toctree-l2"><a class="reference internal" href="documentation.html">Working on Documentation</a></li>
<li class="toctree-l2"><a class="reference internal" href="ci.html">Jenkins CI Environment</a></li>
<li class="toctree-l2"><a class="reference internal" href="dependencies.html">Dependency Management</a></li>
<li class="toctree-l2"><a class="reference internal" href="release_process.html">Release Process</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">Frequently Asked Questions</a></li>
<li class="toctree-l1"><a class="reference internal" href="../plugins/index.html">Third-Party Plugins</a></li>
<li class="toctree-l1"><a class="reference internal" href="../bugs.html">Reporting Bugs</a></li>
<li class="toctree-l1"><a class="reference internal" href="../contactus.html">Contact us</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>
</div>
<div class="col-md-8">
<div class="content doc-content">
<div class="content-container">
<div class="section" id="how-to-commit">
<h1>How-to Commit<a class="headerlink" href="#how-to-commit" title="Permalink to this headline"></a></h1>
<p>If you are a committer, feel free to pick any process that works for you - so long as you are planning to commit the work yourself.</p>
<p>Here is how committing and merging will usually look for merging and pushing for tickets that follow the convention (if patch-based):</p>
<p>Hypothetical CASSANDRA-12345 ticket is a cassandra-3.0 based bug fix that requires different code for cassandra-3.3, and trunk. Contributor Jackie supplied a patch for the root branch (12345-3.0.patch), and patches for the remaining branches (12345-3.3.patch, 12345-trunk.patch).</p>
<dl class="docutils">
<dt>On cassandra-3.0:</dt>
<dd><ol class="first last arabic simple">
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">am</span> <span class="pre">-3</span> <span class="pre">12345-3.0.patch</span></code> (if we have a problem b/c of CHANGES.txt not merging anymore, we fix it ourselves, in place)</li>
</ol>
</dd>
<dt>On cassandra-3.3:</dt>
<dd><ol class="first last arabic simple">
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">merge</span> <span class="pre">cassandra-3.0</span> <span class="pre">-s</span> <span class="pre">ours</span></code></li>
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">apply</span> <span class="pre">-3</span> <span class="pre">12345-3.3.patch</span></code> (likely to have an issue with CHANGES.txt here: fix it ourselves, then git add CHANGES.txt)</li>
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">commit</span> <span class="pre">-amend</span></code></li>
</ol>
</dd>
<dt>On trunk:</dt>
<dd><ol class="first last arabic simple">
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">merge</span> <span class="pre">cassandra-3.3</span> <span class="pre">-s</span> <span class="pre">ours</span></code></li>
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">apply</span> <span class="pre">-3</span> <span class="pre">12345-trunk.patch</span></code> (likely to have an issue with CHANGES.txt here: fix it ourselves, then git add CHANGES.txt)</li>
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">commit</span> <span class="pre">-amend</span></code></li>
</ol>
</dd>
<dt>On any branch:</dt>
<dd><ol class="first last arabic simple">
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">push</span> <span class="pre">origin</span> <span class="pre">cassandra-3.0</span> <span class="pre">cassandra-3.3</span> <span class="pre">trunk</span> <span class="pre">-atomic</span></code></li>
</ol>
</dd>
</dl>
<p>Same scenario, but a branch-based contribution:</p>
<dl class="docutils">
<dt>On cassandra-3.0:</dt>
<dd><ol class="first last arabic simple">
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">cherry-pick</span> <span class="pre">&lt;sha-of-3.0-commit&gt;</span></code> (if we have a problem b/c of CHANGES.txt not merging anymore, we fix it ourselves, in place)</li>
</ol>
</dd>
<dt>On cassandra-3.3:</dt>
<dd><ol class="first last arabic simple">
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">merge</span> <span class="pre">cassandra-3.0</span> <span class="pre">-s</span> <span class="pre">ours</span></code></li>
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">format-patch</span> <span class="pre">-1</span> <span class="pre">&lt;sha-of-3.3-commit&gt;</span></code></li>
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">apply</span> <span class="pre">-3</span> <span class="pre">&lt;sha-of-3.3-commit&gt;.patch</span></code> (likely to have an issue with CHANGES.txt here: fix it ourselves, then git add CHANGES.txt)</li>
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">commit</span> <span class="pre">-amend</span></code></li>
</ol>
</dd>
<dt>On trunk:</dt>
<dd><ol class="first last arabic simple">
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">merge</span> <span class="pre">cassandra-3.3</span> <span class="pre">-s</span> <span class="pre">ours</span></code></li>
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">format-patch</span> <span class="pre">-1</span> <span class="pre">&lt;sha-of-trunk-commit&gt;</span></code></li>
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">apply</span> <span class="pre">-3</span> <span class="pre">&lt;sha-of-trunk-commit&gt;.patch</span></code> (likely to have an issue with CHANGES.txt here: fix it ourselves, then git add CHANGES.txt)</li>
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">commit</span> <span class="pre">-amend</span></code></li>
</ol>
</dd>
<dt>On any branch:</dt>
<dd><ol class="first last arabic simple">
<li><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">push</span> <span class="pre">origin</span> <span class="pre">cassandra-3.0</span> <span class="pre">cassandra-3.3</span> <span class="pre">trunk</span> <span class="pre">-atomic</span></code></li>
</ol>
</dd>
</dl>
<div class="admonition tip">
<p class="first admonition-title">Tip</p>
<p>Notes on git flags:
<code class="docutils literal notranslate"><span class="pre">-3</span></code> flag to am and apply will instruct git to perform a 3-way merge for you. If a conflict is detected, you can either resolve it manually or invoke git mergetool - for both am and apply.</p>
<p class="last"><code class="docutils literal notranslate"><span class="pre">-atomic</span></code> flag to git push does the obvious thing: pushes all or nothing. Without the flag, the command is equivalent to running git push once per each branch. This is nifty in case a race condition happens - you won’t push half the branches, blocking other committers’ progress while you are resolving the issue.</p>
</div>
<div class="admonition tip">
<p class="first admonition-title">Tip</p>
<p class="last">The fastest way to get a patch from someone’s commit in a branch on GH - if you don’t have their repo in remotes - is to append .patch to the commit url, e.g.
curl -O <a class="reference external" href="https://github.com/apache/cassandra/commit/7374e9b5ab08c1f1e612bf72293ea14c959b0c3c.patch">https://github.com/apache/cassandra/commit/7374e9b5ab08c1f1e612bf72293ea14c959b0c3c.patch</a></p>
</div>
</div>
<div class="doc-prev-next-links" role="navigation" aria-label="footer navigation">
<a href="documentation.html" class="btn btn-default pull-right " role="button" title="Working on Documentation" accesskey="n">Next <span class="glyphicon glyphicon-circle-arrow-right" aria-hidden="true"></span></a>
<a href="how_to_review.html" class="btn btn-default" role="button" title="Review Checklist" accesskey="p"><span class="glyphicon glyphicon-circle-arrow-left" aria-hidden="true"></span> Previous</a>
</div>
</div>
</div>
</div>
</div>
</div>