建立一个远程的Git仓库其实最好的选择就是使用GitHub,国内也有类似的网站GitCafe。但对于某些珍视代码的商业公司,它们不希望在网上公开公司项目的代码,又不愿意在GitHub之类的网站上使用付费功能;那就只有公司内部自己搭建一台Git服务器咯。
一、安装openssh和git
搭建Git服务器,需要所在的Linux电脑上安装了openssh和git:
sudo apt-get install openssh-server openssh-client
sudo apt-get install git
二、创建一个专门的Linux账户
在Linux上使用一个单独的账户来管理git仓库:
sudo adduser git
按照提示输入密码即可,比如说,我设置的git用户的密码是"fucksvn"嘿嘿~
三、创建Git仓库
切换登录到git用户,在git用户的主目录下建立Git仓库:
git init --bare Gitest.git
这样就会建立一个裸仓库——我们自己使用git管理代码是不加--bare选项的,裸仓库没有工作区,因为服务器上的Git仓库只是为了共享,方便项目成员交流代码的。
运行完这个命令,在git用户主目录下就会出现一个叫做"Gitest.git"的目录,里面的内容我并不是太关心。
在名字"Gitest.git"中,"Gitest"是项目名字,之后同志们clone的时候就会获得一个此名字的目录,用于来放代码的;".git"的结尾,是用来在Git服务器上标识它是一个Git仓库,正常使用的用户不会看到自己的git版本库名字有".git"结尾。
注:这一步的操作是以git用户身份,在git用户的主目录下完成的,生成的"Gitest.git"(或是自己随便起的名字)目录,以及此目录下全部内容的所有者和所在用户组都是"git",不是root或别的什么用户!
四、添加Git服务器的用户登录证书
这一步,可以不做,也可以以后做;不添加的话,用户每次使用这个Git仓库(clone之类的操作)都要输入git用户的密码,就是上文我设置的"fucksvn":把git用户的密码告诉项目里的所有用户,似乎并不是一个科学的方法吧。
添加的原理就是把所有用户的ssh公钥写入git用户的ssh授权文件中。
依然登录git用户,将所有用户的id_rsa.pub文件内容写入到git用户主目录下.ssh/authorized_keys中,必须一行只有一个。如果没有.ssh目录与authorized_keys文件,自己建一个就行;但是必须注意用户和用户组都是"git"。
怎么生成id_rsa.pub,好像是用户们运行ssh-keygen –t rsa。这就不多说了。
注:每个id_rsa.pub文件都有一行内容,写入authorized_keys中,也必须是一行只有一个用户的公钥,必须一行一个!我们可以这样操作:
cat id_rsa.pub >> .ssh/authorized_keys
另外,authorized_keys文件的权限是"rw-r--r--",权限必须是这个;如果不是,这个文件会失效:就像它不存在一样。所以,我在前面一直强调使用git用户操作。如果使用别的用户写入,就要修改此文件的权限,一定记得最后再改回原来的权限。
五、禁用git用户的shell登录
这是出于安全的考虑:如果git用户的密码泄露,其他人就可以登录Git服务器,就有可能破坏Git代码库。我们可以禁止git用户的shell登录,来防止这种情况的发生。git不能使用shell登录,不会对用户通过ssh操作代码库产生影响。
sudo vim /etc/passwd
在git对应的那一行将"/home/git:/bin/bash"改为"/home/git:/usr/bin/git-shell"。
六、现在就可以使用了
可以使用如下的命令下载Git仓库:(IP地址换成自己服务器的IP)
git clone git@10.83.34.62:/home/git/Gitest.git
这个命令的意思就是:以10.83.34.62电脑上的git用户身份,克隆路径为/home/git/Gitest.git的代码库。路径要写对。这样就可以下载一个Gitest目录到当前目录下,这时候它还是空的,我们可以在里面添加代码并推送到Git远程库:git add … git commit … git push origin master 就不在这里详细说了。
Aningsk
2015-10-14
(呃,写了日期才想起来,同学今天生日……)