1.协议
Git 可以使用四种不同的协议来传输资料:本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 Git 协议。
-
git clone /srv/git/project.git :克隆一个版本库,/srv/git/project.git 为路径。 -
git clone file:///srv/git/project.git :克隆一个版本库,/srv/git/project.git 为路径。
TIP:1,2两条命令的目的相同,行为有些许差异。
git remote add local_proj /srv/git/project.git :增加一个本地版本库到现有的 Git 项目。
git clone https://example.com/gitproject.git :克隆一个版本库。
-
git clone ssh://[user@]server/project.git :克隆一个版本库,与远端仓库建立连接的用户名为user。 -
git clone [user@]server:project.git :克隆一个版本库,与远端仓库建立连接的用户名为user。
2.在服务器上搭建 Git
git clone --bare my_project my_project.git :从my_project(git的工作目录,存放项目代码的目录)克隆一个裸仓库名字为my_project.git,名字通常以**.git**结尾。
裸仓库:即一个没有当前工作目录的仓库, 因为该仓库仅仅作为合作媒介,不需要从磁盘检查快照;存放的只有 Git 的资料。 简单的说,裸仓库就是你工程目录内的 .git 子目录内容,不包含其他资料。
git clone --bare my_project my_project.git 整体上效果大致相当于 cp -Rf my_project/.git my_project.git
scp -r my_project.git user@git.example.com:/srv/git :把裸仓库my_project.git放到服务器上。
scp为linux中为ssh连接提供的复制命令,user为指定连接的用户名。
-
git clone user@git.example.com:/srv/git/my_project.git :ssh的方式以用户名user从远程仓库克隆仓库。 -
到该项目目录中运行 git init 命令,并加上 --shared 选项, 那么 Git 会自动修改该仓库目录的组权限为可写。 注意,运行此命令的工程中不会摧毁任何提交、引用等内容。 $ ssh user@git.example.com (ssh方式建立连接) $ cd /srv/git/my_project.git $ git init --bare --shared
3.生成 SSH 公钥
ssh-keygen :生成一份ssh相关的密钥,对应于 id_dsa 或 id_rsa 命名的文件,其中一个带有 .pub 扩展名。 .pub 文件是你的公钥,另一个则是与之对应的私钥。
TIPS:
- 上述文件默认生成在
~/.ssh 目录中。 - 生成密钥时会提示输入两次密钥口令,可以输入为空,假如输入了密钥,请确保运行的是
ssh-keygen -o 命令。 - 公钥要发送个管理员。
4.配置服务器
本例中,我们将使用 authorized_keys 方法来对用户进行认证。 同时我们假设你使用的操作系统是标准的 Linux 发行版,比如 Ubuntu。 首先,创建一个操作系统用户 git,并为其建立一个 .ssh 目录。
以下操作可通过 ssh-copy-id 命令自动完成,这样就不必手动复制并安装公钥了。
- 首先,创建一个操作系统用户 git,并为其建立一个 .ssh 目录。
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
- 把公钥(*.pub文件)加入系统用户 git 的 .ssh 目录下 authorized_keys 文件的末尾:
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
- 现在我们来为开发者新建一个空仓库。可以借助带 --bare 选项的 git init 命令来做到这一点,该命令在初始化仓库时不会创建工作目录:
$ cd /srv/git (存放git空仓库的目录)
$ mkdir project.git (git空仓库目录)
$ cd project.git
$ git init --bare
Initialized empty Git repository in /srv/git/project.git/
- 接着,John、Josie 或者 Jessica 中的任意一人(拥有公钥对应私钥的人)可以将他们项目的
最初版本 推送到这个仓库中:
$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin git@gitserver:/srv/git/project.git
$ git push origin master
注意:每添加一个新项目,都需要有人登录服务器取得 shell,并创建一个裸仓库。
- 克隆此仓库,并推回各自的改动,步骤:
$ git clone git@gitserver:/srv/git/project.git
$ cd project
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master
通过这种方法,你可以快速搭建一个具有读写权限、面向多个开发者的 Git 服务器。
|