建立一个 Git 代码共享仓库服务器。
1. 服务器
通常用 SSH 协议即可,我们应该为 Git 创建一个专用账号。
$ sudo useradd git
$ sudo passwd git
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
创建一个用来保存代码仓库的目录,注意赋予 git 账号读写权限。
$ sudo mkdir -p /var/git.server/project1
$ cd /var/git.server
$ sudo chown git project1
$ sudo chgrp git project1
$ ls -l
total 4
drwxr-xr-x 2 git git 4096 2010-05-17 00:55 project1
初始化 project1,注意在服务器上我们无需保留工作目录,因此创建一个纯粹(bare)的代码仓库。
$ cd project1/
$ sudo su git
$ pwd
/var/git.server/project1
$ git --bare init
Initialized empty Git repository in /var/git.server/project1/
$ ls -l
total 32
drwxr-xr-x 2 git git 4096 2010-05-17 00:59 branches
-rw-r--r-- 1 git git 66 2010-05-17 00:59 config
-rw-r--r-- 1 git git 73 2010-05-17 00:59 description
-rw-r--r-- 1 git git 23 2010-05-17 00:59 HEAD
drwxr-xr-x 2 git git 4096 2010-05-17 00:59 hooks
drwxr-xr-x 2 git git 4096 2010-05-17 00:59 info
drwxr-xr-x 4 git git 4096 2010-05-17 00:59 objects
drwxr-xr-x 4 git git 4096 2010-05-17 00:59 refs
$ exit
我们在服务器上克隆一份用于管理和测试(应该禁止直接操作服务器仓库目录)。
$ git clone /var/git.server/project1/
Initialized empty Git repository in /home/yuhen/project1/.git/
warning: You appear to have cloned an empty repository.
$ ls -al project1
total 12
drwxr-xr-x 3 yuhen yuhen 4096 2010-05-17 01:02 .
drwxr-xr-x 10 yuhen yuhen 4096 2010-05-17 01:02 ..
drwxr-xr-x 7 yuhen yuhen 4096 2010-05-17 01:02 .git
我们添加点项目初始化文件。
$ cd project1
$ cat > .gitingore << end
> *~
> *.swp
> end
$ touch README
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# .gitingore
# README
nothing added to commit but untracked files present (use "git add" to track)
$ git add .
$ git commit -am "Start"
[master (root-commit) 723471e] Start
1 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 .gitingore
create mode 100644 README
我们向服务器提交第一个版本。
$ git push git@localhost:/var/git.server/project1/ master
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 258 bytes, done.
Total 4 (delta 0), reused 0 (delta 0)
To git@localhost:/var/git.server/project1/
* [new branch] master -> master
通常情况下,我们可以用 origin 来代替服务器地址,不过当前测试账号没有写 git.server/project1 的权限,因此用 ssh 路径。同时需要指定 branch。