共计 4920 个字符,预计需要花费 13 分钟才能阅读完成。
前言:当我们想要实现几个小伙伴合作开发同一个项目,或者建立一个资源分享平台的时候,Git 就是一个很好的选择。当然,既然是一个共有平台,那么把这个平台放到个人计算机上明显是不合适的,因此就要在服务器上搭建 GIT 了。另一个需求是,我们在本地开发,然后推送到服务器上,并且自动同步到 Web 站点目录,这样就可以直接看到网页效果了,这就要实现自动同步。下面我带领大家实现这么一个功能。
如果条件允许的话,大家可以跟着做的(注:我的服务器是 CentOS 7,LAMP 环境)。
一、在服务器上安装 git:
//yum 安装 | |
yum install -y git |
在安装完之后你可以运行 git 进行测试,看看是否安装成功。
二、在服务器上创建裸版本库:
ps:远程仓库通常只是一个裸仓库(bare repository)— 即一个没有当前工作目录的仓库。因为该仓库只是一个合作媒介,所以不需要从硬盘上取出最新版本的快照;仓库里存放的仅仅是 Git 的数据。简单地说,裸仓库就是你工作目录中 .git 子目录内的内容
我们就在 /home/testgit/ 下创建一个叫 sample.git 的裸仓库吧:
mkdir /home/testgit | |
cd /home/testgit | |
git init --bare sample.git | |
// 这里 git init 是初始化空仓库的意思,而参数 --bare 是代表创建裸仓库,这个参数一定记得带上 |
当运行完上面的最后一句命令时,会有提示:Initialized empty Git repository in /home/testgit/sample.git/
如果你得不到该结果,可能就要回头检查哪一步出问题了
三、创建 web 站点目录 www
如果你已经拥有 lamp 环境,那么相信你已经了解该目录,搭建 LAMP 环境详情可以参考:CentOS 7 下搭建 LAMP 平台环境 http://www.linuxidc.com/Linux/2015-06/118818.htm、CentOS 7 下如何更改 Apache 默认网站目录 http://www.linuxidc.com/Linux/2017-05/143314.htm
Git 推送到服务器自动同步到站点目录 http://www.linuxidc.com/Linux/2017-05/143313.htm
现在我的 web 站点目录在 /home/www
四、在本地克隆服务器上的裸仓库:
前提:本地已安装 git
打开 git bash,我打算在我的 D 盘下创建一个名为 lsgogit 的版本库
cd /d | |
git clone git@115.159.146.94:/home/testgit/sample.git lsgogit |
在这里如果没有配置公钥的话,会提示输入密码,但是我们可能并不知道密码,那就配置公钥咯:
1、查看自己计算机的公钥:
// 查看是否有了 ssh 密钥,如果没有密钥则不会有此文件夹 | |
cd ~/.ssh | |
ls -al | |
// 如果列出了 authorized_keys2 id_dsa known_hosts config id_dsa.pub 则证明你拥有公钥。 |
我们需要寻找一对以 id_dsa 或 id_rsa 命名的文件,其中一个带有 .pub 扩展名。.pub 文件是你的公钥,另一个则是私钥。如果找不到这样的文件(或者根本没有 .ssh 目录),你可以通过运行 ssh-keygen 程序来创建它们。在 Linux/Mac 系统中,ssh-keygen 随 SSH 软件包提供;在 Windows 上,该程序包含于 MSysGit 软件包中。
首先 ssh-keygen 会确认密钥的存储位置(默认是 .ssh/id_rsa),然后它会要求你输入两次密钥口令。如果你不想在使用密钥时输入口令,将其留空即可。
现在,进行了上述操作的用户需要将各自的公钥发送给任意一个 Git 服务器管理员(假设服务器正在使用基于公钥的 SSH 验证设置)。他们所要做的就是复制各自的 .pub 文件内容,并将其通过邮件发送。公钥看起来是这样的:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAcnTC3A++ginnxr2dvtQa881abjGIzk99KQVg/sPpqvtT3espFKBs/wqrJ9naIPtCswKDMg2tBVgJzg5FimDjI44O072qAftRcjU2EEySlGDDetREOvcDxqcXzf6cAdhnKlYcPk8s46oC+SxhK0zAFZCZNc7z9GcEPOC+ESIettycDw/Bo11WfxAWS0hky2F3rYh5CRr8j7BKRsAvEaAyKwzmM9X0XCRniC2pD0ObX0/SjPwq9Q5/Vjg03muiSo5Bm/xmuHkwb4/uQglBwnaSqEr6YkL9xLMoNsQaJ1TAvTrEaZLNhWzN8iaPyKZMJEzPLX1NgeEx9AEae39N+NsJ LSGO@zhongjin
现在我们回到服务器管理员的身份
由于前面安装 git 的时候,centos 会默认创建一个 git 用户(其他系统貌似需要手动创建),我们进入 /home/git/.ssh,里面有一个名为 authorized_keys 的文件,我们分别将其他开发者的公钥(全选、复制、不能更改!)添加到该文件去,一个开发者的公钥分一行。
现在我们看看有两个开发者 (个人电脑分别是 zhongjin 和 jinjinzhong) 的 authorized_keys 文件:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAcnTC3A++ginnxr2dvtQa881abjGIzk99KQVg/sPpqvtT3espFKBs/wqrJ9naIPtCswKDMg2tBVgJzg5FimDjI44O072qAftRcjU2EEySlGDDetREOvcDxqcXzf6cAdhnKlYcPk8s46oC+SxhK0zAFZCZNc7z9GcEPOC+ESIettycDw/Bo11WfxAWS0hky2F3rYh5CRr8j7BKRsAvEaAyKwzmM9X0XCRniC2pD0ObX0/SjPwq9Q5/Vjg03muiSo5Bm/xmuHkwb4/uQglBwnaSqEr6YkL9xLMoNsQaJ1TAvTrEaZLNhWzN8iaPyKZMJEzPLX1NgeEx9AEae39N+NsJ LSGO | |
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAcnTC3A++ginnxr2dvtQa881abjGIzk99KQVg/sPpqvtT3espFKBs/wqrJ9naIPtCswKDMg2tBVgJzg5FimDjI44O072qAftRcjU2EEySlGDDetREOvcDxqcXzf6cAdhnKlYcPk8s46oC+SxhK0zAFZCZNc7z9GcEPOC+ESIettycDw/Bo11WfxAWS0hky2F3rYh5CRr8j7BKRsAvEaAyKwzmM9X0XCRniC2pD0ObX0/SjPwq9Q5/Vjg03muiSo5Bm/xmuHkwb4/uQglBwnaSqEr6YkL9xLMoNsQaJ1TAvTrEaZLNhWzN8iaPyKZMJEzPLX1NgeEx9AEae39N+NsJ LSGO |
至此,我们就可以实现不用输密码克隆远程仓库了:
cd /d | |
git clone git@115.159.146.94:/home/testgit/sample.git lsgogit |
命令运行完后,lsgogit 现在就是一个空的仓库了,现在我们可以在该仓库下添加文件,然后 push 到远程仓库了。
cd lsgogit | |
touch index.php | |
git add index.php | |
git commit -m "test commit" | |
git push origin master |
如果在这里推送失败了,极有可能是因为服务器的权限问题,就比如之前我们建的 testgit 文件夹,在这里我的解决方法是:
chown -R git:git testgit
将 testgit 文件夹以及下面的子文件夹都赋给了 git, 这样就保证了推送成功。
第一次 push 可能会有一些提示,因为裸版本库还什么都没有,你可能需要 git push origin master 写全命令,之后就没必要了,直接 git push 就可以了。
到目前为止,我们完成了第一个任务,实现了一个共享平台,既可拉取数据,又可以推送数据。
四、实现自动同步到站点目录(www)
就比如刚才我们往远程仓库推送了 index.PHP 文件,虽然提示推送成功,但是我们现在在服务器端还看不到效果,心理总是不爽。又比如我写了个 html 页面,我想在站点中马上看到,那自动同步就派上用场了。
自动同步功能用到的是 git 的钩子功能,
服务器端:进入裸仓库:/home/testgit/sample.git
cd /home/testgit/sample.git | |
cd hooks | |
// 这里我们创建 post-receive 文件 | |
vim post-receive | |
// 在该文件里输入以下内容 | |
git --work-tree=/home/www checkout -f | |
// 保存退出后,将该文件用户及用户组都设置成 git | |
chown git:git post-receive | |
// 由于该文件其实就是一个 shell 文件,我们还应该为其设置可执行权限 | |
chmod +x post-receive |
现在我们可以在本地计算机中修改 index.php 文件,或者添加一个新文件,提交到远程仓库,然后到 /home/www 下面,看看有���有我们刚才提交的文件。
如果你在 Git 推送的工程中发现推送成功 但是在 www 目录下并没有自己的代码,这时候你可要注意了:这是由于文件夹的权限的原因造成的!假设你的 www 目录的所属的用户组为 root,你可以将你的 git 用户加入这个组; 并给 git 添加写入权限,或者其他解决方法,反正你要服务器上的 git 用户有权限进入 www 文件夹。
现在终于掌握了,有点小高兴。
更多 Git 教程系列文章:
GitHub 使用教程图文详解 http://www.linuxidc.com/Linux/2014-09/106230.htm
Git 使用图文详细教程 http://www.linuxidc.com/Linux/2016-11/136781.htm
Ubuntu Git 安装与使用 http://www.linuxidc.com/Linux/2016-11/136769.htm
Git 标签管理详解 http://www.linuxidc.com/Linux/2014-09/106231.htm
Git 分支管理详解 http://www.linuxidc.com/Linux/2014-09/106232.htm
Git 远程仓库详解 http://www.linuxidc.com/Linux/2014-09/106233.htm
Git 本地仓库(Repository)详解 http://www.linuxidc.com/Linux/2014-09/106234.htm
Git 服务器搭建与客户端安装 http://www.linuxidc.com/Linux/2014-05/101830.htm
Git 概述 http://www.linuxidc.com/Linux/2014-05/101829.htm
分享实用的GitHub 使用教程 http://www.linuxidc.com/Linux/2014-04/100556.htm
Git 从入门到学会 http://www.linuxidc.com/Linux/2016-10/135872.htm
Git 基本操作详解 http://www.linuxidc.com/Linux/2016-10/135691.htm
Git 的详细介绍:请点这里
Git 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-05/143315.htm