diff options
| author | Silvio Rhatto <rhatto@riseup.net> | 2017-05-17 17:15:26 -0300 | 
|---|---|---|
| committer | Silvio Rhatto <rhatto@riseup.net> | 2017-05-17 17:15:26 -0300 | 
| commit | 75d138c981292ce1ee4735a0fc5777ac7cefeefa (patch) | |
| tree | fc6518b89032029ea2dec0aca8f987dd2f80acd0 /research | |
| parent | c723a564f047bec24c0a618a2ed8190ff1343c26 (diff) | |
| download | blog-75d138c981292ce1ee4735a0fc5777ac7cefeefa.tar.gz blog-75d138c981292ce1ee4735a0fc5777ac7cefeefa.tar.bz2  | |
Barebones shared git repositories
Diffstat (limited to 'research')
| -rw-r--r-- | research/git.mdwn | 98 | 
1 files changed, 98 insertions, 0 deletions
diff --git a/research/git.mdwn b/research/git.mdwn index 8bb4953..d9a62ec 100644 --- a/research/git.mdwn +++ b/research/git.mdwn @@ -2,6 +2,104 @@  Git research and development. +Barebones shared git repositories +--------------------------------- + +No gitolite, gitosis, gitlab or whatever involded. Only OpenSSH and git is needed. + +### Basic config + +If needed, create a host instance for your git server at your `~/.ssh/config`: + +    Host git.project.org gitserver +      HostName git.project.org + +Now make sure you can log into the server using key-based auth. + +### Server config + +    sudo apt install git +    sudo adduser git --home /var/git +    sudo mkdir              /var/git/repositories +    sudo chown git.         /var/git/repositories +    sudo chmod 775          /var/git/repositories +    sudo usermod -a -G git `whoami` # add yourself into the git group + +### Creating a repository + +At your computer: + +    repo="name-your-project-here" +    mkdir $repo +    cd $repo +    git init +    git remote add origin ssh://gitserver/var/git/repositories/$repo.git + +Then do your regular stuff: create files, commit stuff, etc: + +    touch test +    git add . +    git commit -m "Initial import" + +### Copy a bare git repo to the server + +    cd .. +    git clone --bare $repo $repo.git +    scp -r $repo.git gitserver:/var/git/repositories/$repo.git + +### Making the repository shareable + +In the server: + +    sudo chgrp -R git /var/git/repositories/$repo.git +    sudo chmod 775    /var/git/repositories/$repo.git + +    find /var/git/repositories/$repo.git/ -type f -exec sudo chmod 664 {} \; +    find /var/git/repositories/$repo.git/ -type d -exec sudo chmod 775 {} \; + +Now make sure that the repository configuration has the following option at the `core` section: + +    sharedRepository = group + +You can edit `/var/git/repositories/$repo.git/config` to add this config or just run +the following commands: + +    git -C /var/git/repositories/$repo.git config core.sharedRepository group + +### Daily workflow + +From now on, you can work at your computer's local `$repo` as usual: + +    cd $repo +    git pull +    touch another-test +    git add . +    git commit -m "Adds another-test" +    git push # this sends changes back to your git server + +### Adding more users into the game + +You can add existing users to edit the repository given that: + +* They have accounts in the system. +* They are added into the `git` group. + +If they also use key-based auth they can seamlessly contribute to your repository +as if you were using a more complex repository manager like gitolite or a service +like gitlab. + +You can even try to implement some more complex access control by using different +groups for each project so you're not bound to the `git` group. + +### References + +- [How to make bare git repository group-writable after pushing?](http://stackoverflow.com/questions/15881104/how-to-make-bare-git-repository-group-writable-after-pushing). +- [Create Git bare / shared remote repository](http://pietervogelaar.nl/create-git-bare-shared-remote-repository/). +- [How to clone and share a Git repository over SSH](http://linuxaria.com/pills/how-to-clone-and-share-a-git-repository-over-ssh?lang=en) + +Further development +------------------- +  * [gitly self-hosted](https://gitly.io).  * [Git Large File Storage - Git Large File Storage (LFS) replaces large files such as audio samples, videos, datasets, and graphics with text pointers inside Git, while storing the file contents on a remote server like GitHub.com or GitHub Enterprise.](https://git-lfs.github.com/)  / [#792075 - ITP: git-lfs -- Git Large File Support. An open source Git extension for versioning large files - Debian Bug report logs](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=792075).  * signed commits:  | 
