diff options
| author | Luke Smith <Luke Smith> | 2022-06-25 10:56:36 -0400 |
|---|---|---|
| committer | Luke Smith <Luke Smith> | 2022-06-25 10:56:36 -0400 |
| commit | 7e74a039122aef922d1619e636de3497ffcf7c60 (patch) | |
| tree | 6029d4f3bd5496acd15e81ad5babb367f8836d60 /content/git.md | |
| parent | 967594150f011456cde5965d48cbf0e64f39d31e (diff) | |
convert to hugo
Diffstat (limited to 'content/git.md')
| -rw-r--r-- | content/git.md | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/content/git.md b/content/git.md new file mode 100644 index 0000000..f7cb6b5 --- /dev/null +++ b/content/git.md @@ -0,0 +1,143 @@ +--- +title: "Git Server" +date: 2020-07-01 +icon: 'git.svg' +tags: ['service'] +short_desc: "Hosting your own basic git server." +--- + +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 + +```sh +git clone github.com/... +``` + +to + +```sh +git clone YourLandChadDomainName.xyz/... +``` + +so you can cultivate your own homegrown, grass-fed code, rather than +relying on a centralized proprietary service like GitHub. + +## Installing git + +You most likely already have it installed on your server, but if not, +run: + +```sh +apt install git +``` + +We don\'t need any additional software, `git` itself ships with +everything needed to host a remote repository! + +## Creating bare repositories + +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. + +These repositories need to be owned by the `git` user, and you should +probably pick a directory where you will store them all. One sane choice +is under `/srv/git/`, and we will use this as the example directory for +the rest of the tutorial, but any other path will do as well. + +### Become the git user and create the directory + +If you\'re logged in to your server as root and have `git` installed, +you can become the `git` user by executing + +```sh +su git +``` + +Now navigate to/create your desired directory, for example + +```sh +cd /srv +mkdir git +``` + +### Create the repo + +Now you can create the bare repository with + +```sh +git init --bare my-repo.git +``` + +By convention, bare repository names end with \".git\". + +Repeat the above command for any other repositories you want to host. + +## Syncing local repositories with your server + +### Set up SSH login for the git user + +You will need to be able to login remotely via `ssh` as the `git` user +we\'ve used before. To do this, you will either need to set up a +password for the `git` user by running `passwd git`, or copy your public +SSH key from your local machine to `/home/git/.ssh/authorized_keys`. See +the [SSH keys instructional](/sshkeys) for details (just log in as +`git` instead of `root`). + +### Syncing a new repository with your server + +If you\'ve just created a new repository on your local machine, you will +need to tell `git` where the remote repository is to be able to sync +with it (using commands like `git push` or `git pull`). We do this by +defining a \"remote\" for your repository. + +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 `user@host:path`, where: + +- `user` is `git`, the `git` user we\'ve already worked with before. +- `host` is your domain name. Alternatively you could even use your + server\'s raw IP address. +- `path` is the absolute path to the repository on the server, in our + example `/srv/git/my-repo.git` + +So, to create a new remote, run: + +```sh +git remote add origin git@yourdomain.xyz:/srv/git/my-repo.git +``` + +Now you\'ll be able to run `git push origin master` to push your commits +or `git pull origin` to pull from the remote. + +### Syncing an existing repository + +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: + +```sh +git remote -v +``` + +You can follow the above instructions, substituting an arbitrary other +name other than \"origin\" to create a differently named remote, e.g. + +```sh +git remote add vps git@... +``` + +Now you\'ll be able to push/pull with `git push vps master` and +`git pull vps`, respectively. + +Or, to completely sever ties with your centralized git provider, first +remove the original origin with: `git remote remove origin` and then +follow the instructions as above. + +## Contribution + +- Martin Chrzanowski \-- [website](https://m-chrzan.xyz), + [donate](https://m-chrzan.xyz/donate.html) |
