问题1:他们指的是远程服务器上的用户。
问题2:这取决于两种情况:1. 您需要将本地用户的公钥添加到推送到远程服务器的公钥列表中。2. 如果需要使用ssh部署到另一台服务器,则需要向运行post-receive挂钩的本地用户添加公钥。最有可能只涉及到第一种情况,而不是第二种情况,因为远程服务器将容纳远程git存储库和www服务器。
这意味着您需要将公钥添加到Linux/Unix环境中的authorized_keys文件中。该文件通常位于/home/$USER/.ssh/authorized_keys。authorized_keys文件与用户的known_hosts文件位于同一目录中。
问题3:他们正在解释如何设置远程git存储库。它不需要与您的本地存储库在相同的路径上。
现在来澄清实际发生了什么。教程正在教你如何设置一个远程存储库,每次推送时都会部署jekyll安装。
这意味着如果您有一个github存储库,则不能在那里设置服务器端挂钩。而是在远程服务器上设置一个新的远程。因此,假设您登录到您的服务器(通常使用ssh),运行pwd
以了解您的完整路径或在环境变量中设置它:
$DIR=`pwd`
现在您可以在此服务器上创建裸仓库:
git init --bare $DIR/<SOMEDIRNAME>.git
现在你在服务器上有一个远程裸的git仓库。接下来,您需要添加钩子,以允许其在收到推送时部署Jekyll站点。您列出的网站有一个相当简单的部署,但基本上它所做的就是使_site目录成为提供的HTML页面,您可以使用多种方法来实现此目的,我建议您尽可能少地干扰用户,以下是可能完成此操作的示例脚本:
#!/bin/bash
unset GIT_DIR
WWW_ROOT=/PATH/TO/WWW
REPO_PATH=/PATH/TO/REPO
REPO_BRANCH=master
SITE_DIR=/PATH/TO/_SITE/DIR/IN/REPO
DATE=$(date +"%Y%m%d%H%M")
if [ ! -d $WWW_ROOT/shared/git_maint ]; then
mkdir -p $WWW_ROOT/shared/git_maint
cd $WWW_ROOT/shared/git_maint
git clone $REPO_PATH $WWW_ROOT/shared/git_maint
git checkout master
else
cd $WWW_ROOT/shared/git_maint
git pull
git checkout master
fi
if [ ! -d $WWW_ROOT/releases/$DATE ]; then mkdir $WWW_ROOT/releases/$DATE; fi
cp -ar $WWW_ROOT/shared/git_maint/$SITE_DIR $WWW_ROOT/releases/$DATE
ln -snf $WWW_ROOT/releases/$DATE $WWW_ROOT/current
exit 0
类似这样的部署方式非常好。如果将此脚本保存在裸仓库的hooks/post-receive文件中,它将在每次推送到仓库时运行。只需记得将其设置为可执行:chmod 755 hooks/post-receive
。因此,如果您使用以下命令将此新远程添加到 git 仓库:
git remote add DEPLOY_PROD user@remote.server.com:/path/to/bare/repo
然后输入
git push DEPLOY_PROD
- 它会推送到你的远程仓库,然后你的远程仓库将触发它的post-receive挂钩(hook),然后将裸仓库复制到几乎任何时候都可以删除的维护目录(maintenance directory)中。然后,该目录用于将站点目录(cp the site dir)复制到一个发布目录(releases dir),然后将其链接到主目录。
当然,所有这些最有可能是过度的,你可以只创建一个部署脚本(deploy script),在本地主机上运行以执行所有这些操作。
问题是你无法直接从github运行服务器端挂钩(hooks),因此你必须想办法解决它。我建议你查看capistrano作为部署策略 - 当前/releases/shared dirs和git_maint dir取自他们的方案,效果很好。
如果你需要帮助,请告诉我,我在开发部署和自动部署策略方面拥有丰富的经验,因此根据你的情况,事情会有所不同。
applypatch-msg.sample post-update.sample pre-commit.sample pre-rebase.sample commit-msg.sample pre-applypatch.sample prepare-commit-msg.sample update.sample
这些文件。 - Leahcim