Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。这里主要说一下如何用 Git 替代 FTP 来管理 WordPress 的文件。
Git 的服务架设简单,其分布式的特性也很适合用来做部署项目和备份。比如项目用 Git 部署后,项目在本地和服务器上面也有完整的相同的文件了,而且就算服务器上面的被干掉了,你可以用自己本地文件直接重新同步上去后就服务器上面的文件就恢复原本的状态了。
我们先来看看如何架设 Git 的服务,前提是你的服务器上面要有 root 权限来安装 Git 或者是已经装好了Git ,然后你的电脑上面也装好了 Git 这个软件了的。
用 ssh 登录到你的服务器上面,先假设你的服务器上面还没有安装 git 那么需要用下面的命令来安装 git 了,命令如下:
Ubuntu / Debian 的命令是:
apt-get install git
Centos 的是:
yum install git
这样 Git 就入住你的空间里面了。为了安全来说最好建立一个用户来专门管理 Git 仓库,命令如下:
useradd -m -d /home/git git
这样就建立了一个用户名为 git ,然后用户目录在 /home/git 的系统用户了,不过建议自己改一下名字和目录路径。
用 su git 命令切换把当前登录的 root 用户切换到 git 用户。然后再 git 用户的目录里面生成一个4096位加密的 SSH 公钥,命令如下:
su git
cd ~
ssh-keygen -t rsa -b 4096 -C “your_email@example.com”
没有注明的提示一律默认回车。相信的可以看这个
现在来建立一个文件夹来作为 Git 的仓库使用:
mkdir repo
cd repo
git –bare init
然后当前的库里面添加一个 hook (hook 也叫钩子)脚本处理提交后的库文件的 post-receive
脚本文件,把下面两行代码保存为 git 库目录里面的 hooks/post-receive
文件。post-receive
文件的内容如下:
#!/bin/sh
GIT_WORK_TREE=/home/git/repo git checkout -f
然后赋予这个文件执行权限:
chmod +x post-receive
到此。服务器端的配置就搞定了。注意一下输入 git --bare init
回车后会提示当前建立的仓库的路径,这个路径也就是这个 post-receive 文件里面的 GIT_WORK_TREE
所需的位置。
然后我们在本地硬盘上面建立个空的文件夹,比如“source”然后敲入以下命令:
mkdir source
cd source
git init
git remote add origin git@servername:/home/git/repo
这样本地的库就建立好了,并且和你的服务器上面的库关联起来了。git remote add
就是添加远程库地址的命令,当然远程库也不一定都叫 “origin ”。
如果远程库的位置就在用户的根目录下那么可以省去 /home/git/
直接 git@servername:repo
也是可以的。
现在来在本地库进行第一次提交。
echo readme.md > readme.md
git add .
git commit -m ‘init’
git push origin master
这样就建立了一个 readme.md 文件,并且已经推送到服务器上面了。这个时候你可以去看看服务器上面是否已经有了这个文件了。
以后本地库每次提交了,用 git push
推送完成了后,服务器上面也很立即更新到最新的文件的。
post-receive 这个脚本里面还可以添加一些其他的命令,比如重启服务什么的。
如果直接这样连接推送的时候会让你输入密码。那么你也要在本地生成一个 ssh 的公钥。并且把这个公钥的 .pub 文件上传到 git 用户的 .ssh 目录的 authorized_keys里面。具体路径是 :~/.ssh/authorized_keys
。这个文件里面可以存放多个公钥,一行一个。而且文件权限必须是 600,.ssh 目录的权限也一样的是 600。这样才行,否则还是会提示你输入密码。
以上的还只是用 git 来做服务器部署的方法,下面来个自动备份的。
如果你有github 这种公共的git 服务。那么你就可以直接把服务器的文件自动备份到 github 上面了。提醒一下。重要文件不建议这样做。
在服务器上面建立库的时候直接 git init
就行了,如下:
cd /home/
mkdir gitbackup
git init
git remote add origin your@github:xxx.git
然后写个定时任务的脚本来自动提交和推送到 github 这类服务上面去。比如定时脚本名字叫 gitbk.sh,内容如下:
git add .
git commit -m ‘backup for ‘.`date +%s`
git push origin master
然后再用 crontab -e 命令添加一个定时任务执行就行了。比如这样
59 23 * * * /home/gitbackup/gitbk.sh
就可以在每天的晚上 23点 59分自动备份并且提交到你的 github这些服务上面去了。
不过请记得把上面你在服务器上生成的 ssh 的公钥添加到你的 github 这类的服务里面去哦,这样才能上传成功。
PS:git 也可以在本地不同的磁盘上面建立仓库的。比如U盘和网络共享的文件夹。
相关阅读:
生成 SSH 公钥的指南:GitHub 的 SSH 密钥指南
Git hook 脚本相关的注解:Git 钩子