|
|
| (11 intermediate revisions by 2 users not shown) |
| Line 1: |
Line 1: |
| [[Category:Developing_Qt::Instructions]] | | #REDIRECT [[Setting up Gerrit]] |
| | |
| = Setting Up Gerrit =
| |
| | |
| [toc align_right="yes" depth="3"]All projects under the Qt Open Governance umbrella are hosted at "codereview.qt.io":http://codereview.qt.io. These repositories are mirrored on "Gitorious":http://qt.gitorious.org.
| |
| | |
| == How to get started - Gerrit registration ==
| |
| | |
| # Create an account in the "Qt bug tracker":https://bugreports.qt.io/ (also known as JIRA)
| |
| # Go to https://codereview.qt.io and log in with your Qt bug tracker credentials
| |
| #* '''Note''': Gerrit usernames are case-sensitive, but JIRA usernames are not. If you attempt to log into Gerrit with different capitalizations, you will end up with multiple accounts.
| |
| # Go to the Settings page: https://codereview.qt.io/settings/
| |
| # Go to "Settings&quot; <s>> "Contact Information&quot; and register your email address. You will receive a confirmation email; click on the link inside to finalize your registration.<br />'''''' '''Note''': Your username and e-mail address will be visible to the public. Use an alias + a custom e-mail address if you want to stay anonymous (this is discouraged)<br /># Go to "Settings&quot;</s>> "SSH Public Keys&quot; and upload your "public SSH Key&quot;:https://help.github.com/articles/generating-ssh-keys , configure username (under contact information), upload public "SSH key&quot;:https://help.github.com/articles/generating-ssh-keys
| |
| # If you are behind a firewall that blocks SSH access:
| |
| ## Go to "Settings&quot; -> "HTTP Password&quot;
| |
| ## Click "Generate Password&quot;
| |
| ## Add the following line to your <code&gt;<sub>/.netrc&lt;/code&gt; (Windows: <code&gt;%USERPROFILE%netrc&lt;/code&gt;):<br /><code><br />machine codereview.qt.io login <Gerrit username&gt; password <Generated password&gt;<br /></code>
| |
| | |
| <br />h2. Local Setup
| |
| <br />Configure SSH properly (the URLs below rely on this). Add this to your <code&gt;</sub>/.ssh/config&lt;/code&gt; (Windows: <code&gt;C:USERNAME%sh\config&lt;/code&gt;):
| |
| | |
| <code><br /> Host codereview.qt.io<br /> Port 29418<br /> User <Gerrit/Jira username&gt;<br /></code>
| |
| | |
| '''NOTE:''' The following steps need to be applied to every clone:
| |
| | |
| Install the hook generating Commit-Id files into your top level project directory, as well as all sub-repositories (e.g. qtbase.git) either through
| |
| | |
| <code><br /> $ scp <s>p codereview.qt.io:hooks/commit-msg .git/hooks<br /></code>
| |
| <br />or by downloading the file via browser: "commit-msg&quot;:http://codereview.qt.io/tools/hooks/commit-msg and putting it into the <code&gt;.git/hooks&lt;/code&gt; directory (make sure it is executable).
| |
| <br />It is recommended to install the git_post_commit_hook from the "qtrepotools&quot;:https://qt.gitorious.org/qt/qtrepotools repository. This gives you the checks of the [[Early-Warning-System|Sanity Bot]] locally. To do this, save the script<br /><code><br />#! /bin/sh<br />exec "<path to git clone&gt;/qtrepotools/git-hooks/git_post_commit_hook&quot; "$</code>"<br /><code><br />into each <path to git clone&gt;it\hooks\post-commit
| |
| <br />'''NOTE:''' Starting with git 1.7.8, if <code&gt;<module name&gt;/.git&lt;/code&gt; contains <code&gt;gitdir: ../.git/modules/&lt;module name&gt;</code&gt;, you need to put the submodule hooks in <code&gt;.git/modules/&lt;module name&gt;/hooks&lt;/code&gt; instead of <code&gt;<module name&gt;/.git/hooks&lt;/code&gt;.
| |
| <br />h3. Configuring Git
| |
| <br />We are developing in a heterogeneous environment with both Unix and Windows machines. Therefore it is imperative to have all files in the repository in the canonical LF-only format. Therefore, Windows users '''must''' run
| |
| <br /></code><br /> $ git config —global core.autocrlf true<br /><code>
| |
| <br />to automatically get CRLF line endings which are suitable for the native tools, and Unix users ''should'' use
| |
| <br /></code><br /> $ git config —global core.autocrlf input<br /><code>
| |
| <br />(this is a safety measure for the case where files with CRLF line endings get into the file system</s> this can happen when archives are unpacked, attachments saved, etc.).
| |
| | |
| To be able to create commits which can be pushed to the server, you need to set up your committer information correctly:
| |
| | |
| </code><br /> $ git config —global user.name "Your Name&quot;<br /> $ git config —global user.email "me<code>example.com&quot;<br /></code>
| |
| | |
| Please do not use nicknames or pseudonyms instead of the real name unless you have really good reasons.<br />Gerrit will not accept your commits unless the committer information matches the email address(es) you registered.
| |
| | |
| To facilitate following the style guide for commit messages, it is recommended to install the Qt commit message template:
| |
| | |
| <code><br /> $ git config —global commit.template <path to qt5.git or qt.git&gt;/.commit-template<br /></code>
| |
| | |
| A common mistake is forgetting to add new files to a commit. Therefore it is recommended to set up git to always show them in <code&gt;git stat&lt;/code&gt; and <code&gt;git commit&lt;/code&gt;, even if this is somewhat slower (especially on Windows):
| |
| | |
| <code><br /> $ git config —global status.showuntrackedfiles all<br /></code>
| |
| | |
| Git has a somewhat stupid default that <code&gt;git push&lt;/code&gt; will push ''all'' branches to the upstream repository, which is almost never what you want. To fix this, use:
| |
| | |
| <code><br /> $ git config —global push.default tracking<br /></code>
| |
| | |
| This is not relevant for mainline branches under Gerrit control, as all pushing happens with refs anyway, but it may be important for your private clones.
| |
| | |
| Sometimes it is necessary to resolve the same conflicts multiple times. Git has the ability to record and replay conflict resolutions automatically, but - surprise surprise - it is not enabled by default. To fix it, run:
| |
| | |
| <code><br /> $ git config —global rerere.enabled true<br /> $ git config —global rerere.autoupdate true # this saves you the git add, but you should verify the result with git diff —staged<br /></code>
| |
| | |
| <code&gt;git pull&lt;/code&gt; will show a nice diffstat, so you get an overview of the changes from upstream. <code&gt;git pull —rebase&lt;/code&gt; does not do that by default. But you want it:
| |
| | |
| <code><br /> $ git config —global rebase.stat true<br /></code>
| |
| | |
| To get nicely colored patches (from <code&gt;git diff&lt;/code&gt;, <code&gt;git log -p&lt;/code&gt;, <code&gt;git show&lt;/code&gt;, etc.), use this:
| |
| | |
| <code><br /> $ git config —global color.ui auto<br /> $ git config —global core.pager "less -FRSX&quot;<br /></code>
| |
| | |
| Git supports aliases which you can use to save yourself some typing. For example, these (any similarity with subversion command aliases is purely accidental ;)):
| |
| | |
| <code><br /> $ git config —global alias.di diff<br /> $ git config —global alias.ci commit<br /> $ git config —global alias.co checkout<br /> $ git config —global alias.ann blame<br /> $ git config —global alias.st status<br /></code>
| |
| | |
| === Using Existing clones ===
| |
| | |
| Add a <code&gt;gerrit&lt;/code&gt; remote pointing to codereview.
| |
| | |
| <code><br /> $ git remote add gerrit ssh://codereview.qt.io/qt/&lt;qt5 or the submodule name you have checked out&gt;<br /></code>
| |
| | |
| If you are behind a SSH-blocking firewall, use the https protocol:
| |
| | |
| <code><br /> $ git remote add gerrit https://codereview.qt.io/p/qt/&lt;qt5 or the submodule name you have checked out&gt;<br /></code>
| |
| | |
| For Qt 4.8, use
| |
| | |
| <code><br /> $ git remote add gerrit ssh://codereview.qt.io/qt/qt<br /></code>
| |
| | |
| If you are behind a SSH-blocking firewall, use the https protocol:
| |
| | |
| <code><br /> $ git remote add gerrit https://codereview.qt.io/p/qt/qt<br /></code>
| |
| | |
| === Cloning repositories ===
| |
| | |
| You should clone from the repositories hosted at "qt.gitorious.org&quot;:http://qt.gitorious.org/ or "github.com/qtproject&quot;:https://github.com/qtproject/ and track changes from there in order to keep the load on Gerrit down.
| |
| | |
| ==== Cloning Qt4 ====
| |
| | |
| For "qt.gitorious.org&quot;:http://qt.gitorious.org/ :
| |
| | |
| <code><br /> $ git clone git://gitorious.org/qt/qt.git<br /></code>
| |
| | |
| For "github.com/qtproject&quot;:https://github.com/qtproject/ :
| |
| | |
| <code><br /> $ git clone git://github.com/qtproject/qt.git<br /></code>
| |
| | |
| Note that Qt4 does not have a <code&gt;master&lt;/code&gt; branch (since no 4.9 is planned). So, you should push changes to the <code&gt;4.8&lt;/code&gt; branch.
| |
| | |
| ==== Cloning Qt5 ====
| |
| | |
| For "qt.gitorious.org&quot;:http://qt.gitorious.org/ :
| |
| | |
| <code><br /> $ git clone git://gitorious.org/qt/qt5.git<br /></code>
| |
| | |
| For "github.com/qtproject&quot;:https://github.com/qtproject/ :
| |
| | |
| <code><br /> $ git clone git://github.com/qtproject/qt5.git<br /> $ cd qt5<br /> $ ./init-repository -f —no-webkit —mirror git://github.com/qtproject<br /></code>
| |
| | |
| It is recommended that, regardless of the server you use for the initial clone, you use the init-repository script in qt5 to set up the gerrit remote(s) pointing to codereview, and to clone the submodules.
| |
| | |
| Alternatively, individual Qt5 submodules can be manually cloned as well. Follow Using Existing Clones above after cloning.
| |
| | |
| Note that Qt 5 submodules have been changed from absolute to relative URLs (like "../qtbase.git&quot;) in the .gitmodules file.<br />If you make a clone of git://gitorious.org/qt/qt5 in gitorious as git://gitorious.org/~<username&gt;/qt/&lt;cloned-repository-name&gt;.git the init-repository script will not work.
| |
| | |
| A URL rewrite rule has to be added to the .gitconfig file:<br /><code><br />[url "git://gitorious.org/qt/&quot;]<br /> insteadOf = git://gitorious.org/~<username&gt;/qt/<br /></code>
| |
| | |
| ==== Cloning Qt Creator ====
| |
| | |
| For "qt.gitorious.org&quot;:http://qt.gitorious.org/ :
| |
| | |
| <code><br /> $ git clone git://gitorious.org/qt-creator/qt-creator.git<br /></code>
| |
| | |
| For "github.com/qtproject&quot;:https://github.com/qtproject/ :
| |
| | |
| <code><br /> $ git clone git://github.com/qtproject/qt-creator.git<br /></code>
| |
| | |
| === Pushing your local changes to gerrit ===
| |
| | |
| After you have committed your changes locally, you can push them to Gerrit like this (for example, <code&gt;5.4&lt;/code&gt; branch):
| |
| | |
| <code><br /> $ git push gerrit HEAD:refs/for/5.4<br /></code>
| |
| | |
| You can't push directly to a branch. So you need to create a review. "refs/for/5.4&quot; means "please submit this as a review for branch 5.4&quot;.
| |