你的位置:首页 > ASP.net教程

[ASP.net教程]Git学习笔记(10)——搭建Git服务器

本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结。


Git远程仓库服务器

其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器。我们完全可以把自己的某台多余的机器设置成不关机状态。

但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用。

搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装。


Git的安装

现在的Ubuntu已经非常的人性化了,你想要什么,就敲打什么。敲个git,如果安装了,就会显示帮助信息,如果没有,就会把安装命令显示出来。如下

$ sudo apt-get install git

详细的内容,可以参见Git学习笔记开始的部分。


Git服务的搭建

//添加用户git,(注意这里使用的是adduser,而不是useradd。)root@myUbuntu:/# adduser git正在添加用户"git"...正在添加新组"git" (1002)...正在添加新用户"git" (1002) 到组"git"...创建主目录"/home/git"...正在从"/etc/skel"复制文件...输入新的 UNIX 密码:  //为git设置密码 重新输入新的 UNIX 密码: passwd:已成功更新密码正在改变 git 的用户信息请输入新值,或直接敲回车键以使用默认值//以下信息随意填写,也可以不填写  全名 []: gitserver  房间号码 []: 100  工作电话 []: 120  家庭电话 []: 110  其它 []: 000这些信息是否正确? [Y/n] yroot@myUbuntu:/# 
su git
//切换git用户,查看是否成功git@myUbuntu:/$
exit
//退出重新登录,验证密码//git用户创建成功后,会在home目录下自动生成git的用户目录//收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥复制粘贴到/home/git/.ssh/authorized_keys文件里,一行一个。//我的git目录里没有这个文件,所以需要手动创建root@myUbuntu:/home/git# 
mkdir .ssh
root@myUbuntu:/home/git# 
cd .ssh/
root@myUbuntu:/home/git/.ssh# touch authorized_keysroot@myUbuntu:/home/git/.ssh# 
vi authorized_keys
//将公钥添加进去//进入根目录下的srv目录(本目录是Linux为了server而建立的,一般里面是空的)root@myUbuntu:/srv# mkdir sample.gitroot@myUbuntu:/srv# lssample.gitroot@myUbuntu:/srv# 
git init --bare sample.git/
  //注意,在srv目录下进行git的初始化初始化空的 Git 版本库于 /srv/sample.git/
//Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。所以,修改sample.git的用户和用户组的归属root@myUbuntu:/srv# 
chown -R git:git sample.git/
root@myUbuntu:/srv# ll总用量 12drwxr-xr-x 3 root root 4096 5月 13 19:22 ./drwxr-xr-x 22 root root 4096 4月 29 20:40 ../drwxr-xr-x 7 
git git
 4096 5月 13 19:22 sample.git///OK,到此git服务以基本完成了


shell安全设置

出于安全考虑,我们创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。

git:x:1001:1001:,,,:/home/git:/bin/bash改为:git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。(这个我没有测试。)


Windows端实现库的克隆

Windows PowerShellCopyright (C) 2009 Microsoft Corporation. All rights reserved.C:\Users\joe> cd .\workC:\Users\joe\work> 
mkdir ubuntugit
  //新建一个工作区C:\Users\joe\work> cd .\ubuntugitC:\Users\joe\work\ubuntugit> 
git remote
  //此时没有连接fatal: Not a git repository (or any of the parent directories): .gitC:\Users\joe\work\ubuntugit> 
git clone git@10.6.17.30:/srv/sample.git
//直接克隆Cloning into 'sample'...Warning: Permanently added '10.6.17.30' (ECDSA) to the list of known hosts.warning: You appear to have cloned an empty repository.Checking connectivity... done.  //克隆完成C:\Users\joe\work\ubuntugit> ls  Directory: C:\Users\joe\work\ubuntugitMode        LastWriteTime   Length Name----        -------------   ------ ----d----     5/13/2015  7:31 PM      sample  //已经出现了默认的sampleC:\Users\joe\work\ubuntugit> cd .\sampleC:\Users\joe\work\ubuntugit\sample [master]> 
git remote
//查看连接,OK。originC:\Users\joe\work\ubuntugit\sample [master]>


公钥管理

如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,这时,可以用Gitosis来管理公钥。(这里就不详细记录了,我也不会。)


权限管理

有些不但视源代码如生命,而且视员工为窃贼的公司,会在版本控制系统里设置一套完善的权限控制,每个人是否有读写权限会精确到每个分支甚至每个目录下。因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。(这个我也不会,就不记录了。)


小总结

这几天的学习,还算顺利,学习的内容都很基础,Git的学习暂时告一段落,后期有时间了,还会继续深入学习的。

    下面是本人收集的一些Git的网站。
  1. 廖雪峰的官方网站:适合初学者,就像我一样的。
  2. Git的官方网站:可以提高英语水平。
  3. Git中文参考手册:适合查询使用。
  4. Git简明手册:适合回顾使用。
  5. Git图解:适合理解Git的原理。(多种语言)
  6. Git简明指南:一样的简单入门级内容。
  7. 国外网友制作的Git Cheat Sheet:这一个是pdf的内容,你点击,就会跳到我的QQ群,如果需要,请进群。