我正在尝试使用这个接收后钩子来更新我的实时服务器
GIT_WORK_TREE=/var/www/www.example.org git checkout -f
这个钩子在远程裸存储库上,我希望实时工作树在不同的服务器上。
我如何设置它,以便当钩子触发时,它将文件签出到实时服务器,它是否从远程服务器ssh到实时服务器?我该在哪里定义它呢?
下面是我正在尝试设置的内容
http://www.dejaaugustine.com/2011/05/leveraging-git-as-a-full-fledged-web-development-tool/
但是,实时和测试都位于不同的服务器上,而不是使用git pull,而是使用git checkout -f。
发布于 2015-05-12 20:42:50
以下解决方案使用来自另一台服务器上的裸代码库的代码更新实时服务器代码库。此解决方案不使用scp或复制文件来覆盖实时服务器上的内容,因为我们希望避免覆盖整个目录(使用git,我们可以选择要更新的内容)。
假设
位于不同的服务器上
实时服务器上的:
集中设置托管实时文件的非裸git存储库:cd /var/www/www.yoursite.com && git init
git remote add origin git@testserverip:/path/to/repo.git
git fetch origin,然后运行git merge由于这是一台实时服务器,您通常不希望任何合并冲突造成麻烦。如果您不关心丢失实时服务器上的更改(因为您可能从未更改过实时服务器上的任何重要内容),则可以使用git merge -m 'Overwriting live server' -s recursive -X theirs origin/active-branch-on-live-server
一个典型的场景是,您在实时服务器上有其他不想覆盖的文件(临时文件、用户更改的文件等)。确保将所有这些文件/目录添加到.gitignore-file中,并确保它们不是由git add添加的。这样,当从您的集中代码库中提取代码时,它们不会受到影响。
如果您希望此设置更加自动化,请在实时服务器上创建一个bash脚本:
git fetch origin
git merge -m 'Overwriting live server' -s recursive -X theirs origin/active-branch-on-live-server将此脚本作为可执行的bash脚本(这里不会介绍)。现在,您可以从“集中式”服务器上的钩子脚本调用此脚本,以便每次推送代码时实时服务器都会更新。
“集中式”repo/test/staging服务器上的:
(您应该已经在这里设置了一个空的repo,如果没有创建它的话)。
在bare-repo.git/hooks/创建/编辑post-receive文件,以便在将代码推送到bare repo时实时服务器运行上面创建的脚本:
#!/bin/bash
while read oldrev newrev refname
do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
# Use this if-sentence to only update live server if branch is the wanted branch, e.g. master or stable
if [[ "stable" == "$branch" ]]; then
# Fetch this branch from live-server
ssh root@ip-to-live-server '/path/to/script-created-above'
fi
done确保您的服务器上的git用户可以通过ssh -key访问您的实时服务器,以便上面脚本中的ssh正常工作。
这是一个示意性概述。详细信息可以在其他地方找到:
gitignore关于覆盖实时服务器上的文件:https://stackoverflow.com/a/10113231/1030104
发布于 2011-11-15 00:54:32
您必须更新您的post-receive钩子,以便从git服务器的签出文件夹中获取文件,并将其scp到您的实时服务器。
GIT_WORK_TREE=/home/temp git checkout -f
scp -r /home/temp user@liveserver:/var/www/www.example.org发布于 2013-05-26 03:36:59
您可以在实时/测试服务器上设置一个裸存储库,并通过主源存储库的post-receive挂钩推送到它们。然后再次使用post-receive钩子签出到web目录。
或者对主源存储库使用rsync来实时/测试服务器。(请注意时间延迟。)
https://stackoverflow.com/questions/8122543
复制相似问题