Create git server on debian from scratch
On Debian server (address: 10.10.10.10):
daniel@daniel-debian:/etc/ssh# sudo apt-get install gitosis
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
python-setuptools
Suggested packages:
git-daemon-run gitweb
The following NEW packages will be installed:
gitosis python-setuptools
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
daniel@daniel-debian:~$ sudo adduser \
> --system \
> --shell /bin/sh \
> --gecos 'git version control' \
> --group \
> --disabled-password \
> --home /home/git \
> git
[sudo] password for daniel:
Adding system user `git' (UID 114) ...
Adding new group `git' (GID 123) ...
Adding new user `git' (UID 114) with group `git' ...
Creating home directory `/home/git' ...
daniel@daniel-debian:~$ sudo su
root@daniel-debian:/home/daniel# cd ~git
root@daniel-debian:/home/git# sudo -H -u git gitosis-init < /tmp/id_rsa.pub.daniel
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
root@daniel-debian:/home/git# ls
gitosis repositories
On Ubuntu client:
daniel@daniel-ubuntu ~/Git $ git clone [email protected]:gitosis-admin.git
Cloning into gitosis-admin...
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 5 (delta 0)
Receiving objects: 100% (5/5), done.
daniel@daniel-ubuntu ~/Git $ ls
gitosis-admin intel-sdk
daniel@daniel-ubuntu ~/Git $ cd gitosis-admin/
daniel@daniel-ubuntu ~/Git/gitosis-admin $ ls
gitosis.conf keydir
daniel@daniel-ubuntu ~/Git/gitosis-admin $ git status
# On branch master
nothing to commit (working directory clean)
daniel@daniel-ubuntu ~/Git/gitosis-admin $ vi gitosis.conf
daniel@daniel-ubuntu ~/Git/gitosis-admin $ man git-commit
daniel@daniel-ubuntu ~/Git/gitosis-admin $ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: gitosis.conf
#
no changes added to commit (use "git add" and/or "git commit -a")
daniel@daniel-ubuntu ~/Git/gitosis-admin $ git add gitosis.conf
daniel@daniel-ubuntu ~/Git/gitosis-admin $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: gitosis.conf
#
daniel@daniel-ubuntu ~/Git/gitosis-admin $ git diff --cached
diff --git a/gitosis.conf b/gitosis.conf
index 619fe0f..a7457a2 100644
--- a/gitosis.conf
+++ b/gitosis.conf
@@ -4,3 +4,7 @@
writable = gitosis-admin
members = daniel@daniel-ubuntu
+[group personal-web]
+writable = personal-web
+members = daniel@daniel-ubuntu
+
daniel@daniel-ubuntu ~/Git/gitosis-admin $ git commit -m 'Added person-web repository'
[master 298eea2] Added person-web repository
1 files changed, 4 insertions(+), 0 deletions(-)
daniel@daniel-ubuntu ~/Git/gitosis-admin $ git push --dry-run
To [email protected]:gitosis-admin.git
251bca1..298eea2 master -> master
daniel@daniel-ubuntu ~/Git/gitosis-admin $ git push
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 381 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:gitosis-admin.git
251bca1..298eea2 master -> master
daniel@daniel-ubuntu ~/Git/gitosis-admin $ cd ..
daniel@daniel-ubuntu ~/Git $ mkdir personal-web
daniel@daniel-ubuntu ~/Git $ cd personal-web/
daniel@daniel-ubuntu ~/Git/personal-web $ ls
daniel@daniel-ubuntu ~/Git/personal-web $ git init
Initialized empty Git repository in /home/daniel/Git/personal-web/.git/
daniel@daniel-ubuntu ~/Git/personal-web $ git remote add origin [email protected]:personal-web.git
daniel@daniel-ubuntu ~/Git/personal-web $ git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
daniel@daniel-ubuntu ~/Git/personal-web $ git push origin master:refs/heads/master
error: src refspec master does not match any.
error: failed to push some refs to '[email protected]:personal-web.git'
daniel@daniel-ubuntu ~/Git/personal-web $ ls
daniel@daniel-ubuntu ~/Git/personal-web $ touch ok
daniel@daniel-ubuntu ~/Git/personal-web $ ls
ok
daniel@daniel-ubuntu ~/Git/personal-web $ git add ok
daniel@daniel-ubuntu ~/Git/personal-web $ git commit -m 'initialized new repository'
[master (root-commit) f6c45dd] initialized new repository
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 ok
daniel@daniel-ubuntu ~/Git/personal-web $ git push origin master:refs/heads/master
Counting objects: 3, done.
Writing objects: 100% (3/3), 221 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:personal-web.git
* [new branch] master -> master
Now you should be able to clone the repository from anywhere else:
daniel@daniel-ubuntu /tmp $ git clone [email protected]:personal-web.git
Cloning into personal-web...
remote: Counting objects: 3, done.
Receiving objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
That's it!
Now assume another user wants to access this repository, or you yourself want to access it from another machine, say daniel-mint.
First, on daniel-mint, generate the ssh key pair with
daniel@daniel-mint:~/.ssh$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/daniel/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/daniel/.ssh/id_rsa.
Your public key has been saved in /home/daniel/.ssh/id_rsa.pub.
The key fingerprint is:
44:aa:49:11:ce:01:d9:ab:2d:d9:de:f2:c4:11:15:d1 daniel@daniel-mint
The key's randomart image is:
+--[ RSA 2048]----+
| .++. =+ |
| .o.o + E |
| +.o . |
| ..o o |
| =o . S |
| + o. . |
| o .o |
| o.. |
| o. |
+-----------------+
daniel@daniel-mint:~/.ssh$ ls
id_rsa id_rsa.pub
Then on daniel-ubuntu (the one has gitosis-admin repo),
cd ~/Git/gitosis-admin/keydir
scp daniel@daniel-mint:.ssh/id_rsa.pub [email protected]
vi ~/Git/gitosis-admin/gitosis.conf
Add the following line to personal-web section:
[group personal-web]
writable = personal-web
members = dhan@dhan-ubuntu daniel@daniel-mint
Now stage/commit and push the change. You should be able to clone the personal-web repo from daniel-mint.
daniel@daniel-mint:~/git$ git clone [email protected]:personal-web.git
Cloning into personal-web...
remote: Counting objects: 952, done.
remote: Compressing objects: 100% (695/695), done.
remote: Total 952 (delta 233), reused 949 (delta 233)
Receiving objects: 100% (952/952), 2.64 MiB | 2.34 MiB/s, done.
Resolving deltas: 100% (233/233), done.