summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--git.html186
-rw-r--r--index.html1
2 files changed, 187 insertions, 0 deletions
diff --git a/git.html b/git.html
new file mode 100644
index 0000000..ca9ba75
--- /dev/null
+++ b/git.html
@@ -0,0 +1,186 @@
+<!DOCTYPE html>
+<html lang=en>
+ <head>
+ <title>Hosting Your Own Git Repositories &ndash; LandChad.net</title>
+ <meta charset="utf-8"/>
+ <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
+ <link rel='stylesheet' type='text/css' href='style.css'>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel='alternate' type='application/rss+xml' title='Land Chad RSS' href='/rss.xml'>
+ </head>
+<body>
+ <header><h1>Hosting Your Own Git Repositories</h1></header>
+ <nav></nav>
+ <main>
+ <p>
+ Once you have your own VPS or other Internet-available server, you can
+ start hosting your own git repositories. The goal of this tutorial is
+ for you to go from
+
+ <pre><code>git clone github.com/...</code></pre>
+
+ to
+
+ <pre><code>git clone YourLandChadDomainName.xyz/...</code></pre>
+
+ so you can cultivate your own homegrown, grass fed code, rather than
+ relying on a centralized proprietary service like GitHub.
+ </p>
+
+ <h3>What's not included in this tutorial</h3>
+
+ <ul>
+ <li>
+ We will not set up a web front end. Your only interaction with
+ these repos will be via the <code>git</code> command line tool.
+ </li>
+ <li>
+ We will not support multiple users. It's expected only you, the
+ server owner, have write access to these repos.
+ </li>
+ </ul>
+
+ <h2>Installing git</h2>
+
+ <p>
+ You most likely already have it installed on your server, but if not,
+ run
+
+ <pre><code>apt install git</code></pre>
+
+ We don't need any additional software, <code>git</code> itself ships
+ with everything needed to host a remote repository!
+ </p>
+
+ <h2>Creating bare repositories</h2>
+
+ <p>
+ For each repository you want to host, you will need to manually create
+ what's called a "bare" repository on your server. These hold all the
+ commits and any other git data needed for your repository, but without
+ an expanded "index" in which you can just browse all the files of a
+ certain commit in the file system.
+ </p>
+
+ <p>
+ These repositories need to be owned by the <code>git</code> user, and
+ you should probably pick a directory where you will store them all. One
+ sane choice is under <code>/srv/git/</code>, and we will use this as the
+ example directory for the rest of the tutorial, but any other path will
+ do as well.
+ </p>
+
+ <h3>Become the git user and create the directory</h3>
+
+ <p>
+ If you're logged in to your server as root and have <code>git</code>
+ installed, you can become the <code>git</code> user by executing
+
+ <pre><code>su git</code></pre>
+
+ Now navigate to/create your desired directory, for example
+
+ <pre><code>
+cd /srv
+mkdir git
+ </code></pre>
+
+ <h3>Create the repo</h3>
+
+ <p>
+ Now you can create the bare repository with
+
+
+ <pre><code>git init --bare my-repo.git</code></pre>
+
+ By convention, bare repository names end with ".git".
+ </p>
+
+ <p>
+ Repeat the above command for any other repositories you want to host.
+ </p>
+
+ <h2>Syncing local repositories with your server</h2>
+
+ <h3>Set up SSH login for the git user</h3>
+
+ <p>
+ You will need to be able to login remotely via <code>ssh</code> as the
+ <code>git</code> user we've used before. To do this, you will either
+ need to set up a password for the <code>git</code> user with
+
+ <pre><code>passwd git</pre></code>
+
+ or copy your public SSH key from your local machine to
+ <code>/home/git/.ssh/authorized_keys</code>.
+ </p>
+
+ <h3>Syncing a new repository with your server</h3>
+ <p>
+ If you've just created a new repository on your local machine, you will
+ need to tell <code>git</code> where the remote repository is to be able
+ to sync with it (using commands like <code>git push</code> or
+ <code>git pull</code>). We do this by defining a "remote" for your
+ repository.
+ </p>
+
+ <p>
+ A remote is just a named URL remembered in your repo's configuration. So
+ we need a name and a URL. By convention, the "main" remote is called
+ "origin". The URL has the format <code>user@host:path</code>, where
+
+ <ul>
+ <li>
+ <code>user</code> is <code>git</code>, the <code>git</code> user
+ we've already worked with before.
+ </li>
+ <li>
+ <code>host</code> is a DNS hostname pointing to your server.
+ Alternatively you could even use your server's raw IP address.
+ </li>
+ <li>
+ <code>path</code> is the absolute path to the repository on the
+ server, in our example <code>/srv/git/my-repo.git</code>
+ </li>
+ </ul>
+ </p>
+
+ <p>
+ So, to create a new remote, run
+
+ <pre><code>git remote add origin git@yourdomain.xyz:/srv/git/my-repo.git</code></pre>
+
+ Now you'll be able to run <code>git push origin master</code> to push
+ your commits or <code>git pull origin</code> to pull from the remote.
+ </p>
+
+ <h3>Syncing an existing repository</h3>
+
+ <p>
+ If you've already set up your local repository to sync with a service
+ like GitHub it probably already has a remote called "origin". You can
+ see your repo's remotes with
+
+ <pre><code>git remote -v</code></pre>
+
+ You can follow the above instructions, substituting an arbitrary other
+ name other than "origin" to create a differently named remote, e.g.
+
+ <pre><code>git remote add vps git@...</code></pre>
+
+ Now you'll be able to push/pull with <code>git push vps master</code>
+ and <code>git pull vps</code>, respectively.
+ </p>
+
+ <p>
+ Or, to completely sever ties with your centralized git provider, first
+ remove the original origin with
+
+ <pre><code>git remote remove origin</code></pre>
+
+ and then follow the instructions as above.
+ </p>
+ </main>
+ <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><li><a href="index.html"><img src="pix/chad.gif" alt="chad"></a></li><li><a href="rss.xml"><img src="pix/rss.svg" alt="RSS"></a></li><li><a href="pix/btc.png"><img src="pix/btc.svg" alt="BTC"></a></li><li><a href="pix/xmr.png"><img src="pix/xmr.svg" alt="XMR"></a></li><li><a href="https://github.com/lukesmithxyz/landchad"><img src="pix/git.svg" alt="Github"></a></footer>
+</body>
+</html>
diff --git a/index.html b/index.html
index a75332e..06286fa 100644
--- a/index.html
+++ b/index.html
@@ -58,6 +58,7 @@
<ul class=ll>
<li><a href="maintenance.html">How to maintain a server.</a></li>
<li><a href="sshkeys.html">Use your SSH keys to prevent hacking.</a></li>
+ <li><a href="git.html">Host your own <code>git</code> repositories</a></li>
<li><a href="nextcloud.html">Setting up a Nextcloud Instance (file hosting and more)</a></li>
<li><a href="cron.html">Schedule tasks with Crontabs/Cronjobs.</a></li>
<li><a href="tor.html">Mirror your site on Tor.</a></li>