diff options
| -rw-r--r-- | git.html | 189 | ||||
| -rw-r--r-- | index.html | 3 |
2 files changed, 191 insertions, 1 deletions
diff --git a/git.html b/git.html new file mode 100644 index 0000000..ad0fbae --- /dev/null +++ b/git.html @@ -0,0 +1,189 @@ +<!DOCTYPE html> +<html lang=en> + <head> + <title>Hosting Your Own Git Repositories – 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><img src="pix/git.svg">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</p> + + <pre><code>git clone github.com/...</code></pre> + + <p>to</p> + + <pre><code>git clone YourLandChadDomainName.xyz/...</code></pre> + + <p> + so you can cultivate your own homegrown, grass-fed code, rather than + relying on a centralized proprietary service like GitHub. + </p> + + <h2>Installing git</h2> + + <p> + You most likely already have it installed on your server, but if not, + run:</p> + + <pre><code>apt install git</code></pre> + + <p> + 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 + </p> + + <pre><code>su git</code></pre> + + <p> + Now navigate to/create your desired directory, for example + </p> + + <pre><code>cd /srv +mkdir git</code></pre> + + <h3>Create the repo</h3> + + <p> + Now you can create the bare repository with + </p> + + + <pre><code>git init --bare my-repo.git</code></pre> + + <p> + 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 by running + <code>passwd git</code>, + or copy your public SSH key from your local machine to + <code>/home/git/.ssh/authorized_keys</code>. + See the <a href="sshkeys.html">SSH keys instructional</a> for details + (just log in as <code>git</code> instead of <code>root</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: + </p> + + <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 your domain name. + 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: + </p> + + <pre><code>git remote add origin git@yourdomain.xyz:/srv/git/my-repo.git</code></pre> + + <p> + 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: + </p> + + <pre><code>git remote -v</code></pre> + + <p> + You can follow the above instructions, substituting an arbitrary other + name other than "origin" to create a differently named remote, e.g. + </p> + + <pre><code>git remote add vps git@...</code></pre> + + <p> + 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: + <code>git remote remove origin</code> + and then follow the instructions as above. + </p> + + <h2>Contribution</h2> + <ul> + <li>Martin Chrzanowski -- <a + href="https://m-chrzan.xyz">website</a>, <a href="https://m-chrzan.xyz/crypto.html">donate</a></li> + </ul> + </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> @@ -58,7 +58,8 @@ <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="nextcloud.html">Setting up a Nextcloud Instance (file hosting and more)</a></li> + <li><a href="git.html">Host your own <img src="pix/git.svg"><code>git</code> repositories</a></li> + <li><a href="nextcloud.html">Setting up a <img src="pix/nextcloud.svg">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> </ul> |
