(注:我的服务器是Ubuntu 16.04.3 LTS 64)
一、在服务器上安装git
sudo apt-get install git
安装完成之后,可运行“git --version”查看安装版本,能看到git版本信息则说明已经安装成功。
二、添加git用户
有一些操作系统会在你安装git时会同时帮你创建一个git用户,但Ubuntu的需要我们手动来创建。这也非常简单的,那我们就来手动创建一个git用户:
sudo adduser git #输入密码,然后其它信息默认直接回车就行。
三、在服务器上创建裸仓库
你也可以一条命令完成上面的操作:
git --bare init carcartalk.git
裸仓库里面只保存了一些配置信息和你的版本库文件等,但是看不到我们所上传的文件或代码的,这就是裸仓库的特点。我们只需要能够从裸仓库里clone代码到你的本地就行。
其实裸仓库的内容也就是我们正常git仓库里面的隐藏文件夹.git里面的内容
四、在本地克隆服务器上的裸仓库
我的客户端是windows,我已经安装好git了。windows上的git安装非常简单,上网直接百度一个git的exe文件安装就行。如果没有的话,我这里也可以推荐一个git的下载链接:https://git-scm.com/downloads,点击打开,选择windows版本直接下载安装即可,和所有的windows软件安装一样,这里我就不特别说明了。
严格来说,其实Git并没有所谓的服务器端和客户端,这也是Git和SVN最大的一点不同。不管你在哪里创建了一个git仓库,原理上它都可以充当一个git服务器,这取决于你的配置。深入了解就涉及到很多git的原理知识了,感趣兴的同学可以自行去学习,当然,我也非常推荐你这样去做。
好了,我又扯远了,回到主题
克隆刚刚在服务器创建的裸仓库到本地:
git clone git@服务器ip:/home/git/project/carcartalk.git carcartalk
然后输入你的git用户的密码,你将会看到一个如下的“warning”提示,即说明你已经完成了克隆到本地的任务。
warning: You appear to have cloned an empty repository.
注意:很有可能你会在这个步骤收到一个权限不足的错误,这很有可能是因为git用户对你的服务器端的git仓库目录权限不足的原因,这里你只要把仓库的所属用户及用户组都改为git即可。
chown git:git -R /home/git #正常来说,如果你是在git用户的主目录下创建仓库则不会出现该问题。
这里可能你还有一个疑问,如果我不知道git用户的密码呢?这该怎么办?(因为把git的密码告诉别人,那么他就可能会登录上你的服务器。)
其实有两种办法可以解决这个问题,(1)可以登录你的root用户,设置git用户不可登录服务器,这样你把git密码透露出去也相对没那么危险,但我还是推荐下一种方法;(2)通过验证客户端秘钥来实现不需要密码进行git代码管理(等下我会在文章最后面拿这种方法来讲解,这个方法用起来会相对方便很多,非常适合开发。)
五、测试使用
克隆了远程仓库到本地后,你可以先进行一些简单的测试操作,确保你的git能正常使用,如下:
touch readme.txt
git add readme.txt
git commit -m"first commit"
git push origin master # 在服务器端没有配置秘钥之前,每次push都要输入密码
第一次push可能会有一些提示,因为裸版本库还什么都没有,你可能需要 git push origin master写全命令,之后就没必要了,直接 git push 就可以了。
六、设置git钩子
就比如一个web服务器,当我们在本地把开发好的代码文件push到服务器时,只是把更新提交到了你一开始在服务器创建的裸仓库中。此时你还需要进入你的web目录把更新的代码文件pull到你的指定目录,这样明显非常的不方便。这也不是我们想要的结果,这时候就是到git的钩子发辉作用的时候了。git钩子可以帮你解决你以上提出的问题。
下面开始我们的设置。
进入我们的裸仓库的hooks文件夹,然后新建一个post-receive文件。
cd hooks/
vim post-receive
在post-receive写入以下内容:
#!/bin/bash
git --work-tree=/www/carcartalk checkout -f
其中/www/carcartalk为你实际需要同步的站点目录。
然后修改post-receive为可执行文件(其实这就是一个脚本文件)
chmod +x post-receive
post-receive的原理就是,当远程仓库发现有用户执行了push操作,就会执行一个脚本post-receive(钩子)。其实git还提供了很多其它动作的钩子,这里我们就不深入了解了。
注意:同时你还需要修改你的web站点目录的权限,修改所属用户与用户组为git,否则钩子的权限可能会不足而导致执行失败。(你也可以通过添加git用户到相应的用户组来解决问题)
chown git:git -R /www # 修改所属用户
设置好钩子后,当你本地再次执行push的时候,你会发现你web目录的文件也同步的更新了。
到这一步,我们的“Linux搭建GIT服务器并实现hook同步到指定目录”教程算是已经讲解完了。哈哈,聪明的人肯定还记得前面遗留的一个问题,嗯嗯,就是关于公钥验证的问题。
内容比较多,我下面就单独用一个小节来讲解。
七、配置公钥验证方式
在配置了公钥验证之后,当你再次从本地更新代码到服务器时,将不会再提示输入密码。
1)服务器设置
查看你的git用户目录下是否存在一个文件.shh,如果没有的话则自己手动创建。
mkdir .ssh
然后在.ssh文件夹里面新建一个文件authorized_keys
touch .ssh/authorized_keys
等下会用到这个文件,我们需要分别将其他开发者的公钥(全选、复制、不能更改!)添加到该文件去,一个开发者的公钥分一行。
2)查看客户端的公钥(linux)
cd ~/.ssh
ls -al #如果列出了authorized_keys、id_rsa、id_rsa.pub 则证明你拥有公钥。
如果你的主目录里没有上述的文件,那么你可以通过运行 ssh-keygen 程序来创建它们。
ssh-keygen
首先 ssh-keygen 会确认密钥的存储位置(默认是 .ssh/id_rsa),然后它会要求你输入两次密钥口令。如果你不想在使用密钥时输入口令,将其留空即可。
之后你就会在你的根目录下生成下图所示的文件:
这里我们需要的就是id_rsa.pub文件里面的内容,也就是你的公钥。里面内容如下:
把它复制,然后提交给git服务器的管理员进行相关配置。
如果你的客户端是windows,那么查看公钥的方法如下:
3)查看客户端的公钥(Windows)
在 Windows 上,该程序包含于Git 软件包中。打开你的git命令行,输入
ssh-keygen.exe #创建公钥
由于我的本地之前已经创建过密钥,所以得到如上图的结果。
然后根据你创建时提示的实际路径即可找到你的公钥文件,windows一般都是放在C:\Users\Administrator\.ssh中。接下来就和上面一样,把你的公钥文件id_rsa.pub提供给git管理员。
4)服务器配置
打开在上面第1)步创建的文件authorized_keys,然后把第2)或第3)步提供给你的公钥粘贴到该文件。注意!如果有多个开发者需要受权,则你需要把他们的公钥都拷贝到这个文件,每个公钥需要单独占一行!
5)测试
此时,当你再次向git服务器push的时候,将不会再弹出需要输入密码的提示,如上图。
感谢阅读!
网友评论