我在Git服务器/网站(https://github.com/cMaheshwari09/testing.git)上创建了一个测试存储库,我已经将其克隆到我的localhost。现在我可以从本地机器到Git服务器完美地 PUSH 和 PULL 。 但现在我想在我的实时服务器上部署代码,但不使用FTP或任何其他文件传输方法/工具。但我想使用Git push方法上传我的文件。这意味着我想要同步。我的localhost存储库直接使用Git实时服务器。
因此,当我对本地进行任何更改时,我可以将更改提交给git服务器以及实时服务器。
我已经阅读了很多不同的文档和教程,但我找不到任何简单的方法或直接的方法来实现这一目标。
任何人都可以帮助我解决这个问题。非常感谢!
答案 0 :(得分:1)
你可以使用post-receive Git钩子 http://git-scm.com/book/en/Customizing-Git-Git-Hooks
钩子看起来像这样
cd [LIVE SITE DIR] && git pull origin master
我将介绍如何设置部署。我使用与实时服务器相同的服务器,以及存储我的存储库的地方。
/var/git directory
中。应用程序存储在/var/www
使用git init --bare
cd /var/git
mkdir project.git
cd project.git
git init --bare
将存储库克隆到/var/www/project
文件夹
创建post-receive hook
cd /var/git/project.git/hooks
touch post-receive
chmod +x post-receive
post-receive hook看起来像这样:
#!/bin/sh
unset GIT_DIR
cd /var/www/project && git pull origin master
如果您没有取消设置GIT_DIR,那么在执行git push时会出现以下错误:
remote: fatal: Not a git repository: '.'
这是因为Git使用变量GIT_DIR而不是PWD。在这里查看更多相关信息: getting "fatal: not a git repository: '.'" when using post-update hook to execute 'git pull' on another repo
当您在本地计算机上进行更改,提交并推送它们时,这些更改将自动拉入/ var / www / project目录。
如果您有一台服务器作为实时服务器,并且您的存储库存储在另一台服务器上。你将不得不改变你的post-receive钩子,这样你就可以ssh到实时服务器并在那里执行git pull origin master。