mirror of
https://github.com/evennia/evennia.git
synced 2026-03-16 21:06:30 +01:00
521 lines
No EOL
41 KiB
HTML
521 lines
No EOL
41 KiB
HTML
<!DOCTYPE html>
|
||
|
||
<html lang="en" data-content_root="../">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
|
||
<title>Coding using Version Control — Evennia latest documentation</title>
|
||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d75fae25" />
|
||
<link rel="stylesheet" type="text/css" href="../_static/nature.css?v=279e0f84" />
|
||
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=e4a91a55" />
|
||
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
|
||
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
||
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||
<link rel="icon" href="../_static/favicon.ico"/>
|
||
<link rel="index" title="Index" href="../genindex.html" />
|
||
<link rel="search" title="Search" href="../search.html" />
|
||
<link rel="next" title="Debugging" href="Debugging.html" />
|
||
<link rel="prev" title="Soft Code" href="Soft-Code.html" />
|
||
</head><body>
|
||
<div class="related" role="navigation" aria-label="Related">
|
||
<h3>Navigation</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="General Index"
|
||
accesskey="I">index</a></li>
|
||
<li class="right" >
|
||
<a href="../py-modindex.html" title="Python Module Index"
|
||
>modules</a> |</li>
|
||
<li class="right" >
|
||
<a href="Debugging.html" title="Debugging"
|
||
accesskey="N">next</a> |</li>
|
||
<li class="right" >
|
||
<a href="Soft-Code.html" title="Soft Code"
|
||
accesskey="P">previous</a> |</li>
|
||
<li class="nav-item nav-item-0"><a href="../index.html">Evennia</a> »</li>
|
||
<li class="nav-item nav-item-1"><a href="Coding-Overview.html" accesskey="U">Coding and development help</a> »</li>
|
||
<li class="nav-item nav-item-this"><a href="">Coding using Version Control</a></li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="document">
|
||
<div class="documentwrapper">
|
||
<div class="bodywrapper">
|
||
<div class="body" role="main">
|
||
|
||
<section class="tex2jax_ignore mathjax_ignore" id="coding-using-version-control">
|
||
<h1>Coding using Version Control<a class="headerlink" href="#coding-using-version-control" title="Link to this heading">¶</a></h1>
|
||
<p><a class="reference external" href="https://en.wikipedia.org/wiki/Version_control">Version control</a> allows you to track changes to your code. You can save ‘snapshots’ of your progress which means you can roll back undo things easily. Version control also allows you to easily back up your code to an online <em>repository</em> such as Github. It also allows you to collaborate with others on the same code without clashing or worry about who changed what.</p>
|
||
<aside class="sidebar">
|
||
<p class="sidebar-title">Do it!</p>
|
||
<p>It’s <em>strongly</em> recommended that you <a class="reference internal" href="#putting-your-game-dir-under-version-control">put your game folder under version control</a>. Using git is is also the way to contribue to Evennia itself.</p>
|
||
</aside>
|
||
<p>Evennia uses the most commonly used version control system, <a class="reference external" href="https://git-scm.com/">Git</a> . For additional help on using Git, please refer to the <a class="reference external" href="https://help.github.com/articles/set-up-git#platform-all">Official GitHub documentation</a>.</p>
|
||
<section id="setting-up-git">
|
||
<h2>Setting up Git<a class="headerlink" href="#setting-up-git" title="Link to this heading">¶</a></h2>
|
||
<ul>
|
||
<li><p><strong>Fedora Linux</strong></p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> yum install git-core
|
||
</pre></div>
|
||
</div>
|
||
</li>
|
||
<li><p><strong>Debian Linux</strong> <em>(Ubuntu, Linux Mint, etc.)</em></p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> apt-get install git
|
||
</pre></div>
|
||
</div>
|
||
</li>
|
||
<li><p><strong>Windows</strong>: It is recommended to use <a class="reference external" href="https://gitforwindows.org/">Git for Windows</a>.</p></li>
|
||
<li><p><strong>Mac</strong>: Mac platforms offer two methods for installation, one via MacPorts, which you can find out about <a class="reference external" href="https://git-scm.com/book/en/Getting-Started-Installing-Git#Installing-on-Mac">here</a>, or you can use the <a class="reference external" href="https://sourceforge.net/projects/git-osx-installer/">Git OSX Installer</a>.</p></li>
|
||
</ul>
|
||
<blockquote>
|
||
<div><p>You can find expanded instructions for installation <a class="reference external" href="https://git-scm.com/book/en/Getting-Started-Installing-Git">here</a>.</p>
|
||
</div></blockquote>
|
||
<aside class="sidebar">
|
||
<p class="sidebar-title">Git user nickname</p>
|
||
<p>If you ever make your code available online (or contribute to Evennia), your name will be visible to those reading the code-commit history. So if you are not comfortable with using your real, full name online, put a nickname (or your github handler) here.</p>
|
||
</aside>
|
||
<p>To avoid a common issue later, you will need to set a couple of settings; first you will need to tell Git your username, followed by your e-mail address, so that when you commit code later you will be properly credited.</p>
|
||
<ol class="arabic">
|
||
<li><p>Set the default name for git to use when you commit:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> git config --global user.name "Your Name Here"
|
||
</pre></div>
|
||
</div>
|
||
</li>
|
||
<li><p>Set the default email for git to use when you commit:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> git config --global user.email "your_email@example.com"
|
||
</pre></div>
|
||
</div>
|
||
</li>
|
||
</ol>
|
||
<blockquote>
|
||
<div><p>To get a running start with Git, here’s <a class="reference external" href="https://www.youtube.com/watch?v=1ffBJ4sVUb4#t=1m58s">a good YouTube talk about it</a>. It’s a bit long but it will help you understand the underlying ideas behind GIT (which in turn makes it a lot more intuitive to use).</p>
|
||
</div></blockquote>
|
||
</section>
|
||
<section id="common-git-commands">
|
||
<h2>Common Git commands<a class="headerlink" href="#common-git-commands" title="Link to this heading">¶</a></h2>
|
||
<aside class="sidebar">
|
||
<p class="sidebar-title">Git repository</p>
|
||
<p>This is just a fancy name for the folder you have designated to be under version control. We will make your <code class="docutils literal notranslate"><span class="pre">mygame</span></code> game folder into such a repository. The Evennia code is also in a (separate) git repository.</p>
|
||
</aside>
|
||
<p>Git can be controlled via a GUI. But it’s often easier to use the base terminal/console commands, since it makes it clear if something goes wrong.</p>
|
||
<p>All these actions need to be done from inside the <em>git repository</em> .</p>
|
||
<p>Git may seem daunting at first. But when working with git, you’ll be using the same 2-3 commands 99% of the time. And you can make git <em>aliases</em> to have them be even easier to remember.</p>
|
||
<section id="git-init">
|
||
<h3><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">init</span></code><a class="headerlink" href="#git-init" title="Link to this heading">¶</a></h3>
|
||
<p>This initializes a folder/directory on your drive as a ‘git repository’</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git init .
|
||
</pre></div>
|
||
</div>
|
||
<p>The <code class="docutils literal notranslate"><span class="pre">.</span></code> means to apply to the current directory. If you are inside <code class="docutils literal notranslate"><span class="pre">mygame</span></code>, this makes your game dir into a git repository. That’s all there is to it, really. You only need to do this once.</p>
|
||
</section>
|
||
<section id="git-add">
|
||
<h3><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">add</span></code><a class="headerlink" href="#git-add" title="Link to this heading">¶</a></h3>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git add <file>
|
||
</pre></div>
|
||
</div>
|
||
<p>This tells Git to start to <em>track</em> the file under version control. You need to do this when you create a new file. You can also add all files in your current directory:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git add .
|
||
</pre></div>
|
||
</div>
|
||
<p>Or</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git add *
|
||
</pre></div>
|
||
</div>
|
||
<p>All files in the current directory are now tracked by Git. You only need to do this once for every file you want to track.</p>
|
||
</section>
|
||
<section id="git-commit">
|
||
<h3><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">commit</span></code><a class="headerlink" href="#git-commit" title="Link to this heading">¶</a></h3>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git commit -a -m "This is the initial commit"
|
||
</pre></div>
|
||
</div>
|
||
<p>This <em>commits</em> your changes. It stores a snapshot of all (<code class="docutils literal notranslate"><span class="pre">-a</span></code>) your code at the current time, adding a message <code class="docutils literal notranslate"><span class="pre">-m</span></code> so you know what you did. Later you can <em>check out</em> your code the way it was at a given time. The message is mandatory and you will thank yourself later if write clear and descriptive log messages. If you don’t add <code class="docutils literal notranslate"><span class="pre">-m</span></code>, a text editor opens for you to write the message instead.</p>
|
||
<p>The <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">commit</span></code> is something you’ll be using all the time, so it can be useful to make a <em>git alias</em> for it:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git config --global alias.cma 'commit -a -m'
|
||
</pre></div>
|
||
</div>
|
||
<p>After you’ve run this, you can commit much simpler, like this:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git cma "This is the initial commit"
|
||
</pre></div>
|
||
</div>
|
||
<p>Much easier to remember!</p>
|
||
</section>
|
||
<section id="git-status-git-diff-and-git-log">
|
||
<h3><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">status</span></code>, <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">diff</span></code> and <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">log</span></code><a class="headerlink" href="#git-status-git-diff-and-git-log" title="Link to this heading">¶</a></h3>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git status -s
|
||
</pre></div>
|
||
</div>
|
||
<p>This gives a short (<code class="docutils literal notranslate"><span class="pre">-s</span></code>) of the files that changes since your last <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">commit</span></code>.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git diff --word-diff`
|
||
</pre></div>
|
||
</div>
|
||
<p>This shows exactly what changed in each file since you last made a <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">commit</span></code>. The <code class="docutils literal notranslate"><span class="pre">--word-diff</span></code> option means it will mark if a single word changed on a line.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git log
|
||
</pre></div>
|
||
</div>
|
||
<p>This shows the log of all <code class="docutils literal notranslate"><span class="pre">commits</span></code> done. Each log will show you who made the change, the commit-message and a unique <em>hash</em> (like <code class="docutils literal notranslate"><span class="pre">ba214f12ab12e123...</span></code>) that uniquely describes that commit.</p>
|
||
<p>You can make the <code class="docutils literal notranslate"><span class="pre">log</span></code> command more succinct with some more options:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>ls=log --pretty=format:%C(green)%h\ %C(yellow)[%ad]%Cred%d\ %Creset%s%Cblue\ [%an] --decorate --date=relative
|
||
</pre></div>
|
||
</div>
|
||
<p>This adds coloration and another fancy effects (use <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">help</span> <span class="pre">log</span></code> to see what they mean).</p>
|
||
<p>Let’s add aliases:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git config --global alias.st 'status -s'
|
||
git config --global alias.df 'diff --word-diff'
|
||
git config --global alias.ls 'log --pretty=format:%C(green)%h\ %C(yellow)[%ad]%Cred%d\ %Creset%s%Cblue\ [%an] --decorate --date=relative'
|
||
</pre></div>
|
||
</div>
|
||
<p>You can now use the much shorter</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git st # short status
|
||
git dif # diff with word-marking
|
||
git ls # log with pretty formatting
|
||
</pre></div>
|
||
</div>
|
||
<p>for these useful functions.</p>
|
||
</section>
|
||
<section id="git-branch-checkout-and-merge">
|
||
<h3><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">branch</span></code>, <code class="docutils literal notranslate"><span class="pre">checkout</span></code> and <code class="docutils literal notranslate"><span class="pre">merge</span></code><a class="headerlink" href="#git-branch-checkout-and-merge" title="Link to this heading">¶</a></h3>
|
||
<p>Git allows you to work with <em>branches</em>. These are separate development paths your code may take, completely separate from each other. You can later <em>merge</em> the code from a branch back into another branch. Evennia’s <code class="docutils literal notranslate"><span class="pre">main</span></code> and <code class="docutils literal notranslate"><span class="pre">develop</span></code> branches are examples of this.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git branch -b branchaname
|
||
</pre></div>
|
||
</div>
|
||
<p>This creates a new branch, exactly identical to the branch you were on. It also moves you to that branch.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git branch -D branchname
|
||
</pre></div>
|
||
</div>
|
||
<p>Deletes a branch.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git branch
|
||
</pre></div>
|
||
</div>
|
||
<p>Shows all your branches, marking which one you are currently on.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git checkout branchname
|
||
</pre></div>
|
||
</div>
|
||
<p>This checks out another branch. As long as you are in a branch all <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">commit</span></code>s will commit the code to that branch only.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git checkout .
|
||
</pre></div>
|
||
</div>
|
||
<p>This checks out your <em>current branch</em> and has the effect of throwing away all your changes since your last commit. This is like undoing what you did since the last save point.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git checkout b2342bc21c124
|
||
</pre></div>
|
||
</div>
|
||
<p>This checks out a particular <em>commit</em>, identified by the hash you find with <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">log</span></code>. This open a ‘temporary branch’ where the code is as it was when you made this commit. As an example, you can use this to check where a bug was introduced. Check out an existing branch to go back to your normal timeline, or use <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">branch</span> <span class="pre">-b</span> <span class="pre">newbranch</span></code> to break this code off into a new branch you can continue working from.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git merge branchname
|
||
</pre></div>
|
||
</div>
|
||
<p>This <em>merges</em> the code from <code class="docutils literal notranslate"><span class="pre">branchname</span></code> into the branch you are currently in. Doing so may lead to <em>merge conflicts</em> if the same code changed in different ways in the two branches. See <a class="reference external" href="https://phoenixnap.com/kb/how-to-resolve-merge-conflicts-in-git">how to resolve merge conflicts in git</a> for more help.</p>
|
||
</section>
|
||
<section id="git-glone-git-push-and-git-pull">
|
||
<h3><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">glone</span></code>, <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">push</span></code> and <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">pull</span></code><a class="headerlink" href="#git-glone-git-push-and-git-pull" title="Link to this heading">¶</a></h3>
|
||
<p>All of these other commands have dealt with code only sitting in your local repository-folder. These commands instead allows you to exchange code with a <em>remote</em> repository - usually one that is online (like on github).</p>
|
||
<blockquote>
|
||
<div><p>How you actually set up a remote repository is described <a class="reference internal" href="#pushing-your-code-online">in the next section</a>.</p>
|
||
</div></blockquote>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git clone repository/path
|
||
</pre></div>
|
||
</div>
|
||
<p>This copies the remote repository to your current location. If you used the <a class="reference internal" href="../Setup/Installation-Git.html"><span class="std std-doc">Git installation instructions</span></a> to install Evennia, this is what you used to get your local copy of the Evennia repository.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git pull
|
||
</pre></div>
|
||
</div>
|
||
<p>Once you cloned or otherwise set up a remote repository, using <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">pull</span></code> will re-sync the remote with what you have locally. If what you download clashes with local changes, git will force you to <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">commit</span></code> your changes before you can continue with <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">pull</span></code>.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git push
|
||
</pre></div>
|
||
</div>
|
||
<p>This uploads your local changes <em>of your current branch</em> to the same-named branch on the remote repository. To be able to do this you must have write-permissions to the remote repository.</p>
|
||
</section>
|
||
<section id="other-git-commands">
|
||
<h3>Other git commands<a class="headerlink" href="#other-git-commands" title="Link to this heading">¶</a></h3>
|
||
<p>There are <em>many</em> other git commands. Read up on them online:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git reflog
|
||
</pre></div>
|
||
</div>
|
||
<p>Shows hashes of individual git actions. This allows you to go back in the git event history itself.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git reset
|
||
</pre></div>
|
||
</div>
|
||
<p>Force reset a branch to an earlier commit. This could throw away some history, so be careful.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git grep -n -I -i <query>
|
||
</pre></div>
|
||
</div>
|
||
<p>Quickly search for a phrase/text in all files tracked by git. Very useful to quickly find where things are. Set up an alias <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">gr</span></code> with</p>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">git</span> <span class="n">config</span> <span class="o">--</span><span class="k">global</span> <span class="n">alias</span><span class="o">.</span><span class="n">gr</span> <span class="s1">'grep -n -I -i'</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
</section>
|
||
<section id="putting-your-game-dir-under-version-control">
|
||
<h2>Putting your game dir under version control<a class="headerlink" href="#putting-your-game-dir-under-version-control" title="Link to this heading">¶</a></h2>
|
||
<p>This makes use of the git commands listed in the previous section.</p>
|
||
<aside class="sidebar">
|
||
<p class="sidebar-title">git aliases</p>
|
||
<p>If you set up the git aliases for commands suggested in the previous section, you can use them instead!</p>
|
||
</aside>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>cd mygame
|
||
git init .
|
||
git add *
|
||
git commit -a -m "Initial commit"
|
||
</pre></div>
|
||
</div>
|
||
<p>Your game-dir is now tracked by git.</p>
|
||
<p>You will notice that some files are not covered by your git version control, notably your secret-settings file (<code class="docutils literal notranslate"><span class="pre">mygame/server/conf/secret_settings.py</span></code>) and your sqlite3 database file <code class="docutils literal notranslate"><span class="pre">mygame/server/evennia.db3</span></code>. This is intentional and controlled from the file <code class="docutils literal notranslate"><span class="pre">mygame/.gitignore</span></code>.</p>
|
||
<div class="admonition warning">
|
||
<p class="admonition-title">Warning</p>
|
||
<p>You should <em>never</em> put your sqlite3 database file into git by removing its entry
|
||
in <code class="docutils literal notranslate"><span class="pre">.gitignore</span></code>. GIT is for backing up your code, not your database. That way
|
||
lies madness and a good chance you’ll confuse yourself. Make one mistake or local change and after a few commits and reverts you will have lost track of what is in your database or not. If you want to backup your SQlite3 database, do so by simply copying the database file to a safe location.</p>
|
||
</div>
|
||
<section id="pushing-your-code-online">
|
||
<h3>Pushing your code online<a class="headerlink" href="#pushing-your-code-online" title="Link to this heading">¶</a></h3>
|
||
<p>So far your code is only located on your private machine. A good idea is to back it up online. The easiest way to do this is to <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">push</span></code> it to your own remote repository on GitHub. So for this you need a (free) Github account.</p>
|
||
<p>If you don’t want your code to be publicly visible, Github also allows you set up a <em>private</em> repository, only visible to you.</p>
|
||
<p>Create a new, empty repository on Github. <a class="reference external" href="https://help.github.com/articles/create-a-repo/">Github explains how here</a> . <em>Don’t</em> allow it to add a README, license etc, that will just clash with what we upload later.</p>
|
||
<aside class="sidebar">
|
||
<p class="sidebar-title">Origin</p>
|
||
<p>We label the remote repository ‘origin’. This is the git default and means we won’t need to specify it explicitly later.</p>
|
||
</aside>
|
||
<p>Make sure you are in your local game dir (previously initialized as a git repo).</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git remote add origin <github URL>
|
||
</pre></div>
|
||
</div>
|
||
<p>This tells Git that there is a remote repository at <code class="docutils literal notranslate"><span class="pre"><github</span> <span class="pre">URL></span></code>. See the github docs as to which URL to use. Verify that the remote works with <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">remote</span> <span class="pre">-v</span></code></p>
|
||
<p>Now we push to the remote (labeled ‘origin’ which is the default):</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git push
|
||
</pre></div>
|
||
</div>
|
||
<p>Depending on how you set up your authentication with github, you may be asked to enter your github username and password. If you set up SSH authentication, this command will just work.</p>
|
||
<p>You use <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">push</span></code> to upload your local changes so the remote repository is in sync with your local one. If you edited a file online using the Github editor (or a collaborator pushed code), you use <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">pull</span></code> to sync in the other direction.</p>
|
||
</section>
|
||
</section>
|
||
<section id="contributing-to-evennia">
|
||
<h2>Contributing to Evennia<a class="headerlink" href="#contributing-to-evennia" title="Link to this heading">¶</a></h2>
|
||
<p>If you want to help contributing to Evennia you must do so by <em>forking</em> - making your own remote copy of the Evennia repository on Github. So for this, you need a (free) Github account. Doing so is a completely separate process from <a class="reference internal" href="#putting-your-game-dir-under-version-control">putting your game dir under version control</a> (which you should also do!).</p>
|
||
<p>At the top right of <a class="reference external" href="https://github.com/evennia/evennia">the evennia github page</a>, click the “Fork” button:</p>
|
||
<p><img alt="fork button" src="../_images/fork_button.png" /></p>
|
||
<p>This will create a new online fork Evennia under your github account.</p>
|
||
<p>The fork only exists online as of yet. In a terminal, <code class="docutils literal notranslate"><span class="pre">cd</span></code> to the folder you wish to develop in. This folder should <em>not</em> be your game dir, nor the place you cloned Evennia into if you used the <a class="reference internal" href="../Setup/Installation-Git.html"><span class="std std-doc">Git installation</span></a>.</p>
|
||
<p>From this directory run the following command:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git clone https://github.com/yourusername/evennia.git evennia
|
||
</pre></div>
|
||
</div>
|
||
<p>This will download your fork to your computer. It creates a new folder <code class="docutils literal notranslate"><span class="pre">evennia/</span></code> at your current location. If you installed Evennia using the <a class="reference internal" href="../Setup/Installation-Git.html"><span class="std std-doc">Git installation</span></a>, this folder will be identical in content to the <code class="docutils literal notranslate"><span class="pre">evennia</span></code> folder you cloned during that installation. The difference is that this repo is connected to your remote fork and not to the ‘original’ <em>upstream</em> Evennia.</p>
|
||
<p>When we cloned our fork, git automatically set up a ‘remote repository’ labeled <code class="docutils literal notranslate"><span class="pre">origin</span></code> pointing to it. So if we do <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">pull</span></code> and <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">push</span></code>, we’ll push to our fork.</p>
|
||
<p>We now want to add a second remote repository linked to the original Evennia repo. We will label this remote repository <code class="docutils literal notranslate"><span class="pre">upstream</span></code>:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>cd evennia
|
||
git remote add upstream https://github.com/evennia/evennia.git
|
||
</pre></div>
|
||
</div>
|
||
<p>If you also want to access Evennia’s <code class="docutils literal notranslate"><span class="pre">develop</span></code> branch (the bleeding edge development) do the following:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git fetch upstream develop
|
||
git checkout develop
|
||
</pre></div>
|
||
</div>
|
||
<p>Use</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git checkout main
|
||
git checkout develop
|
||
</pre></div>
|
||
</div>
|
||
<p>to switch between the branches.</p>
|
||
<p>To pull the latest from upstream Evennia, just checkout the branch you want and do</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git pull upstream
|
||
</pre></div>
|
||
</div>
|
||
<aside class="sidebar">
|
||
<p class="sidebar-title">Pushing to upstream</p>
|
||
<p>You can’t do <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">push</span> <span class="pre">upstream</span></code> unless you have write-access to the upstream Evennia repository. So there is no risk of you accidentally pushing your own code into the main, public repository.</p>
|
||
</aside>
|
||
<section id="fixing-an-evennia-bug-or-feature">
|
||
<h3>Fixing an Evennia bug or feature<a class="headerlink" href="#fixing-an-evennia-bug-or-feature" title="Link to this heading">¶</a></h3>
|
||
<p>This should be done in your fork of Evennia. You should <em>always</em> do this in a <em>separate git branch</em> based off the Evennia branch you want to improve.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git checkout main (or develop)
|
||
git branch -b myfixbranch
|
||
</pre></div>
|
||
</div>
|
||
<p>Now fix whatever needs fixing. Abide by the <a class="reference internal" href="Evennia-Code-Style.html"><span class="std std-doc">Evennia code style</span></a>. You can <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">commit</span></code> commit your changes along the way as normal.</p>
|
||
<p>Upstream Evennia is not standing still, so you want to make sure that your work is up-to-date with upstream changes. Make sure to first commit your <code class="docutils literal notranslate"><span class="pre">myfixbranch</span></code> changes, then</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git checkout main (or develop)
|
||
git pull upstream
|
||
git checkout myfixbranch
|
||
git merge main (or develop)
|
||
</pre></div>
|
||
</div>
|
||
<p>Up to this point your <code class="docutils literal notranslate"><span class="pre">myfixbranch</span></code> branch only exists on your local computer. No
|
||
one else can see it.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git push
|
||
</pre></div>
|
||
</div>
|
||
<p>This will automatically create a matching <code class="docutils literal notranslate"><span class="pre">myfixbranch</span></code> in your forked version of Evennia and push to it. On github you will be able to see appear it in the <code class="docutils literal notranslate"><span class="pre">branches</span></code> dropdown. You can keep pushing to your remote <code class="docutils literal notranslate"><span class="pre">myfixbranch</span></code> as much as you like.</p>
|
||
<p>Once you feel you have something to share, you need to <a class="reference external" href="https://github.com/evennia/evennia/pulls">create a pull request</a> (PR):
|
||
This is a formal request for upstream Evennia to adopt and pull your code into the main repository.</p>
|
||
<ol class="arabic simple">
|
||
<li><p>Click <code class="docutils literal notranslate"><span class="pre">New</span> <span class="pre">pull</span> <span class="pre">request</span></code></p></li>
|
||
<li><p>Choose <code class="docutils literal notranslate"><span class="pre">compare</span> <span class="pre">across</span> <span class="pre">forks</span></code></p></li>
|
||
<li><p>Select your fork from dropdown list of <code class="docutils literal notranslate"><span class="pre">head</span> <span class="pre">repository</span></code> repos. Pick the right branch to <code class="docutils literal notranslate"><span class="pre">compare</span></code>.</p></li>
|
||
<li><p>On the Evennia side (to the left) make sure to pick the right <code class="docutils literal notranslate"><span class="pre">base</span></code> branch: If you want to contribute a change to the <code class="docutils literal notranslate"><span class="pre">develop</span></code> branch, you must pick <code class="docutils literal notranslate"><span class="pre">develop</span></code> as the <code class="docutils literal notranslate"><span class="pre">base</span></code>.</p></li>
|
||
<li><p>Then click <code class="docutils literal notranslate"><span class="pre">Create</span> <span class="pre">pull</span> <span class="pre">request</span></code> and fill in as much information as you can in the form.</p></li>
|
||
<li><p>Optional: Once you saved your PR, you can go into your code (on github) and add some per-line comments; this can help reviewers by explaining complex code or decisions you made.</p></li>
|
||
</ol>
|
||
<p>Now you just need to wait for your code to be reviewed. Expect to get feedback and be asked to make changes, add more documentation etc. Getting as PR merged can take a few iterations.</p>
|
||
<aside class="sidebar">
|
||
<p class="sidebar-title">Not all PRs can merge</p>
|
||
<p>While most PRs get merged, Evennia can’t <strong>guarantee</strong> that your PR code will be deemed suitable to merge into upstream Evennia. For this reason it’s a good idea to check in with the community <em>before</em> you spend a lot of time on a large piece of code (fixing bugs is always a safe bet though!)</p>
|
||
</aside>
|
||
</section>
|
||
</section>
|
||
<section id="troubleshooting">
|
||
<h2>Troubleshooting<a class="headerlink" href="#troubleshooting" title="Link to this heading">¶</a></h2>
|
||
<section id="getting-403-forbidden-access">
|
||
<h3>Getting 403: Forbidden access<a class="headerlink" href="#getting-403-forbidden-access" title="Link to this heading">¶</a></h3>
|
||
<p>Some users have experienced this on <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">push</span></code> to their remote repository. They are not asked for username/password (and don’t have a ssh key set up).</p>
|
||
<p>Some users have reported that the workaround is to create a file <code class="docutils literal notranslate"><span class="pre">.netrc</span></code> under your home directory and add your github credentials there:</p>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>machine<span class="w"> </span>github.com
|
||
login<span class="w"> </span><my_github_username>
|
||
password<span class="w"> </span><my_github_password>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
</section>
|
||
</section>
|
||
|
||
|
||
<div class="clearer"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sphinxsidebar" role="navigation" aria-label="Main">
|
||
<div class="sphinxsidebarwrapper">
|
||
<p class="logo"><a href="../index.html">
|
||
<img class="logo" src="../_static/evennia_logo.png" alt="Logo of Evennia"/>
|
||
</a></p>
|
||
<search id="searchbox" style="display: none" role="search">
|
||
<h3 id="searchlabel">Quick search</h3>
|
||
<div class="searchformwrapper">
|
||
<form class="search" action="../search.html" method="get">
|
||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||
<input type="submit" value="Go" />
|
||
</form>
|
||
</div>
|
||
</search>
|
||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||
<h3><a href="../index.html">Table of Contents</a></h3>
|
||
<ul>
|
||
<li><a class="reference internal" href="#">Coding using Version Control</a><ul>
|
||
<li><a class="reference internal" href="#setting-up-git">Setting up Git</a></li>
|
||
<li><a class="reference internal" href="#common-git-commands">Common Git commands</a><ul>
|
||
<li><a class="reference internal" href="#git-init"><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">init</span></code></a></li>
|
||
<li><a class="reference internal" href="#git-add"><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">add</span></code></a></li>
|
||
<li><a class="reference internal" href="#git-commit"><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">commit</span></code></a></li>
|
||
<li><a class="reference internal" href="#git-status-git-diff-and-git-log"><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">status</span></code>, <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">diff</span></code> and <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">log</span></code></a></li>
|
||
<li><a class="reference internal" href="#git-branch-checkout-and-merge"><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">branch</span></code>, <code class="docutils literal notranslate"><span class="pre">checkout</span></code> and <code class="docutils literal notranslate"><span class="pre">merge</span></code></a></li>
|
||
<li><a class="reference internal" href="#git-glone-git-push-and-git-pull"><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">glone</span></code>, <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">push</span></code> and <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">pull</span></code></a></li>
|
||
<li><a class="reference internal" href="#other-git-commands">Other git commands</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#putting-your-game-dir-under-version-control">Putting your game dir under version control</a><ul>
|
||
<li><a class="reference internal" href="#pushing-your-code-online">Pushing your code online</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#contributing-to-evennia">Contributing to Evennia</a><ul>
|
||
<li><a class="reference internal" href="#fixing-an-evennia-bug-or-feature">Fixing an Evennia bug or feature</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#troubleshooting">Troubleshooting</a><ul>
|
||
<li><a class="reference internal" href="#getting-403-forbidden-access">Getting 403: Forbidden access</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<div>
|
||
<h4>Previous topic</h4>
|
||
<p class="topless"><a href="Soft-Code.html"
|
||
title="previous chapter">Soft Code</a></p>
|
||
</div>
|
||
<div>
|
||
<h4>Next topic</h4>
|
||
<p class="topless"><a href="Debugging.html"
|
||
title="next chapter">Debugging</a></p>
|
||
</div>
|
||
<div role="note" aria-label="source link">
|
||
<!--h3>This Page</h3-->
|
||
<ul class="this-page-menu">
|
||
<li><a href="../_sources/Coding/Version-Control.md.txt"
|
||
rel="nofollow">Show Page Source</a></li>
|
||
</ul>
|
||
</div><h3>Links</h3>
|
||
<ul>
|
||
<li><a href="https://www.evennia.com/docs/latest/index.html">Documentation Top</a> </li>
|
||
<li><a href="https://www.evennia.com">Evennia Home</a> </li>
|
||
<li><a href="https://github.com/evennia/evennia">Github</a> </li>
|
||
<li><a href="http://games.evennia.com">Game Index</a> </li>
|
||
<li>
|
||
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
|
||
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
|
||
<a href="https://evennia.blogspot.com/">Blog</a>
|
||
</li>
|
||
</ul>
|
||
<h3>Doc Versions</h3>
|
||
<ul>
|
||
|
||
<li>
|
||
<a href="https://www.evennia.com/docs/latest/index.html">latest (main branch)</a>
|
||
</li>
|
||
|
||
|
||
<li>
|
||
<a href="https://www.evennia.com/docs/5.x/index.html">v5.0.0 branch (outdated)</a>
|
||
</li>
|
||
|
||
<li>
|
||
<a href="https://www.evennia.com/docs/4.x/index.html">v4.0.0 branch (outdated)</a>
|
||
</li>
|
||
|
||
<li>
|
||
<a href="https://www.evennia.com/docs/3.x/index.html">v3.0.0 branch (outdated)</a>
|
||
</li>
|
||
|
||
<li>
|
||
<a href="https://www.evennia.com/docs/2.x/index.html">v2.0.0 branch (outdated)</a>
|
||
</li>
|
||
|
||
<li>
|
||
<a href="https://www.evennia.com/docs/1.x/index.html">v1.0.0 branch (outdated)</a>
|
||
</li>
|
||
|
||
<li>
|
||
<a href="https://www.evennia.com/docs/0.x/index.html">v0.9.5 branch (outdated)</a>
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</div>
|
||
</div>
|
||
<div class="clearer"></div>
|
||
</div>
|
||
<div class="related" role="navigation" aria-label="Related">
|
||
<h3>Navigation</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="General Index"
|
||
>index</a></li>
|
||
<li class="right" >
|
||
<a href="../py-modindex.html" title="Python Module Index"
|
||
>modules</a> |</li>
|
||
<li class="right" >
|
||
<a href="Debugging.html" title="Debugging"
|
||
>next</a> |</li>
|
||
<li class="right" >
|
||
<a href="Soft-Code.html" title="Soft Code"
|
||
>previous</a> |</li>
|
||
<li class="nav-item nav-item-0"><a href="../index.html">Evennia</a> »</li>
|
||
<li class="nav-item nav-item-1"><a href="Coding-Overview.html" >Coding and development help</a> »</li>
|
||
<li class="nav-item nav-item-this"><a href="">Coding using Version Control</a></li>
|
||
</ul>
|
||
</div>
|
||
<div class="footer" role="contentinfo">
|
||
© Copyright 2024, The Evennia developer community.
|
||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
|
||
</div>
|
||
</body>
|
||
</html> |