187 lines
6.1 KiB
HTML
187 lines
6.1 KiB
HTML
<!DOCTYPE html>
|
|
<html lang=en>
|
|
<head>
|
|
<title>Hosting Your Own Git Repositories – diyhosting.bhh.sh</title>
|
|
<!--# include file=".nav.html" -->
|
|
</head>
|
|
<body>
|
|
<header><h1>Hosting Your Own Git Repositories</h1></header>
|
|
<nav></nav>
|
|
<main>
|
|
<img class=titleimg src="pix/git.svg">
|
|
<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/donate.html">donate</a></li>
|
|
</ul>
|
|
</main>
|
|
<!--# include file=".footer.html" -->
|
|
</body>
|
|
</html>
|