我找到了一个解决方案,但我觉得必须有一个更简单的部署方式,使用Git。解决方案是
这不是一个简单的解决方案,可能有更好的方法来使用Git进行部署。我试图在服务器上单独使用裸存储库,并将git配置文件中的工作树变量设置到另一个目录,但它没有工作:在第一次检出后,我更新了裸仓库和试图查看更改,似乎一切正常,但工作目录中没有任何反应。然后我决定克隆裸存储库,因此克隆的repo有一个工作目录,它可以通过git pull更新(这可以将来自裸存储库的更改作为其原始远程存储库)。
此解决方案的一大优势是您可以修复服务器上的代码,提交这些更改,更新裸存储库,然后您只需更新本地存储库。另一个优点是您可以从裸仓库中克隆项目,如果他们有权访问服务器,则更多参与者可以参与开发。
您是否了解具有上述优势的简单方法?
答案 0 :(得分:3)
我要向你描述我要做的是什么,所以它可能对你有用。我还将提供一些细节,以便将来可以帮助新的企业。
我有一个服务器,我喜欢运行一些个人实验,我用git以我发现的最简单的方式进行部署。它是使用git附带的钩子和很少的shell脚本完成的。
我们走了:
首先:初始化服务器中的裸存储库。与普通git存储库的不同之处在于缺少工作树(项目文件和常见的东西)。您只需要存储库树。
git init --bare
如果你看一下裸露的结构,你会看到这样的东西:
› git init --bare
Initialized empty Git repository in /home/git/mysite/
› ls
branches config description HEAD hooks info objects refs
如果仔细查看 hooks 文件夹,可以找到一些有趣的内容:
daniel at heavens-empire into /home/git/mysite/hooks
› ls
applypatch-msg.sample post-update.sample pre-commit.sample
pre-push.sample update.sample commit-msg.sample
pre-applypatch.sample prepare-commit-msg.sample pre-rebase.sample
每个文件都是可以在某些事件后触发的脚本示例。今天我们正在观看收到后的活动(它没有出现在这个版本中......我不知道为什么)。它发生在我们推送到裸存储库时。你可以创造它并在其中加入一些贝壳之美:
#shows file content
daniel at heavens-empire into /home/git/mysite/hooks$ cat post-receive
#!/bin/sh
GIT_WORK_TREE=/home/www/site git checkout -f
GIT_WORK_TREE将确定我推送的工作树的文件的位置。这就像你在一个文件夹中有repo并说树在另一个。
我已经从我的玩具服务器复制了这些脚本,所以我可能会说他们应该和你一起工作,改变适当的工作树变量。
在我的本地存储库中,我只是将该裸文件夹添加为远程仓库。我会用ssh来简单化。在这种情况下,请确保您用于访问的用户对工作树文件夹具有适当的权限:
git remote add mygitserver daniel@heavensempire.com:/home/git/mysite
每次推送时,您的本地git都会发送提交。当服务器git repo接收并接受它们时,它将触发该接收后脚本。设置工作树并给出权限后,它将在应用程序运行的文件夹上进行简单检查。
我希望这对你有用,也可能对别人有用。 Personaly我避免在服务器上编辑东西。如果您发现在服务器中反映完整的repo很有用,您还可以使用post-receive进行克隆/推送,并在另一个repo中为您结账。 类似的东西:
cd /home/mysite
git pull repo/folder masterOrOther