Git
Hosting private or shared git repositories without dependencies
Tools like Gitea/GitLab/cgit exist to be able to manage and browse
code repositories in a simple way. However, I prefer to have as few
dependencies as possible. For hosting my own private or shared git
repositories it would be sufficient to set up some bare
repositores on a target machine. The main hassle is to create new
repositories there or assign permissions. But is it really a
problem?
Putting an existing repository from a local machine into the remote
git clone --bare my_project my_project.git
scp -r my_project.git user@git.example.com:/srv/git
Making a remote repository shared by a group of users
Access the folder via SSH:
ssh user@git.example.com
cd /srv/git
Running the following command will allow any user on the machine
within the group name_of_group to access and push to this
repository. Additionally, the default branch name is main
instead of master.
git init --bare --shared=name_of_group
git symbolic-ref HEAD refs/heads/main
Remove a branch in Git
Delete a local branch:
git branch -d branch-name
Delete a remote branch:
git push origin --delete branch-name-on-remote
Send and receive patches
There are 2 ways of generating patches with git. The first one is to generate a git diff with:
# Send the last commit
git diff HEAD~1 > name.of.patch
# Send the patch since a given commit with hash: 01020304
git diff 01020304 > name.of.patch
If git-send-email is correctly configured we can send a mail directly with our patch:
git send-email --to="bd@badd10de.dev" HEAD^
To apply patches from git diff or if the message was
downloaded as an attachment use:
# Check if there are any issues with the patch.
git apply --check <patchname>
# Apply the patch.
git apply <patchname>
This will only apply the patch, meaning we need to commit the changed
files afterwards. If the patch was sent with
git send-email, we can send the entire email to
git am which will update the index list with all the
authors. If using mutt you can pipe the email directly to
the index. If not, download the full mail and save it somewhere in your
path and then:
git am pathname.mail