tom*_*all 4 git deployment version-control
我找到了一个解决方案,但我觉得必须有一种更简单的部署方式,使用 Git。解决办法是
这不是一个简单的解决方案,可能有更好的方法使用Git进行部署。我尝试在服务器上单独使用裸存储库,并将 git 配置文件中的工作树变量设置为其他目录,但它不起作用:第一次签出后,当我更新裸存储库并尝试检查更改,似乎一切正常,但工作目录中没有任何反应。然后我决定克隆裸存储库,因此克隆的存储库有一个工作目录,并且可以通过 git pull 进行更新(这会从裸存储库中提取更改作为其原始远程存储库)。
该解决方案的一大优点是您也可以修复服务器上的代码,提交这些更改,更新裸存储库,然后您可以简单地更新本地存储库。另一个优点是,您可以从裸仓库克隆项目,并且如果更多参与者可以访问服务器,则可以参与开发。
您知道一种具有上述优点的更简单的方法吗?
我将向您描述我为实现这一目标所做的工作,因此它可能对您有用。我还将提供一些细节,以便将来可以为新人提供帮助。
\n\n我有一个服务器,我喜欢在其中运行一些个人实验,并且我使用 git 以我发现的最简单的方式进行部署。这是使用 git 附带的钩子和很少的 shell 脚本完成的。
\n\n我们开始吧:
\n\n首先:在服务器中初始化一个裸存储库。与普通 git 存储库的区别在于缺少工作树(项目文件和常用内容)。您只有存储库树。
\n\ngit init --bare \nRun Code Online (Sandbox Code Playgroud)\n\n如果你看一下裸露的结构,你会看到这样的东西:
\n\n\xe2\x80\xba git init --bare\nInitialized empty Git repository in /home/git/mysite/\n\xe2\x80\xba ls\nbranches config description HEAD hooks info objects refs\nRun Code Online (Sandbox Code Playgroud)\n\n如果你仔细观察hooks文件夹,你会发现一些有趣的东西:
\n\ndaniel at heavens-empire into /home/git/mysite/hooks \n\xe2\x80\xba ls\napplypatch-msg.sample post-update.sample pre-commit.sample \npre-push.sample update.sample commit-msg.sample \npre-applypatch.sample prepare-commit-msg.sample pre-rebase.sample\nRun Code Online (Sandbox Code Playgroud)\n\n每个文件都是一个可以在某些事件发生后触发的脚本示例。今天我们正在研究接收后事件(这个版本中没有。我不知道为什么)。当我们推送到裸存储库时就会发生这种情况。您可以创建它并在其中添加一些贝壳美感:
\n\n#shows file content\ndaniel at heavens-empire into /home/git/mysite/hooks$ cat post-receive \n\n#!/bin/sh\n\nGIT_WORK_TREE=/home/www/site git checkout -f\nRun Code Online (Sandbox Code Playgroud)\n\nGIT_WORK_TREE 将确定我推送的工作树文件的位置。这就像您将存储库放在一个文件夹中并说该树位于另一个文件夹中一样。
\n\n我已经从我的玩具服务器复制了这些脚本,所以我可能会说它们应该与您一起工作,更改适当的工作树变量。
\n\n在我的本地存储库中,我只需将该裸文件夹添加为远程存储库。我将使用 ssh 让事情变得简单。在这种情况下,请确保您用来访问的用户对工作树文件夹具有适当的权限:
\n\ngit remote add mygitserver daniel@heavensempire.com:/home/git/mysite\nRun Code Online (Sandbox Code Playgroud)\n\n每次你进行推送时,你的本地 git 都会发送提交。当服务器 git repo 接收并接受它们时,它将触发该接收后脚本。设置工作树并授予权限后,它将对应该运行应用程序的文件夹进行简单的签出。
\n\n我希望这对您有用,也可能对其他人有用。就我个人而言,我避免在服务器上编辑内容。如果您发现在服务器中反映完整的存储库很有用,您还可以使用 post-receive 进行克隆/推送,并在另一个存储库中为您结帐。\n类似:
\n\ncd /home/mysite\ngit pull repo/folder masterOrOther\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2344 次 |
| 最近记录: |