为什么 Git post-receive hooks 通常在裸回购中?
Why are Git post-receive hooks typically in bare repos?
我看到的大多数 post-receive 挂钩都是在裸仓库中设置的。这是为什么?
如果我只想推送到 master
分支以部署到我的 public_html
文件夹,并且我所有的推送都将转到带有 post-receive 的裸仓库钩子,这是否意味着我所有的非 master
推送都没有在服务器上任何地方备份?
例如,假设我有上面提到的设置,我在我的服务器上设置了一个裸仓库,带有一个部署到我的实时站点文件夹的挂钩。我花了一个月的时间开发一项新功能,不断推动功能分支。然后有一天(还没有推送到 master)我的本地机器 crashes/burns。我在该功能分支中的所有工作似乎都丢失了。人们在这种情况下会做什么?有另一个钩子将所有推送发送到的回购协议吗?
假设你的服务器不是你的本地机器,你的服务器没有崩溃,并且你确实将你的开发分支推送到你的服务器,你的开发分支将仍然在你的服务器。它不会采用人类可读的格式,但您可以简单地从服务器上的存储库再次克隆,并检索所有分支,甚至是那些没有自动部署的分支。
这与裸或非裸回购没有真正的关系。 post-receive hook 通常在 bare repos 中设置的原因很简单,因为通常只有 bare repos 从客户端接收内容。可以设置一个非裸存储库来接收来自客户端的内容,但这比通常值得的麻烦更多,因为如果当前签出的分支收到更新,它会导致问题。
我看到的大多数 post-receive 挂钩都是在裸仓库中设置的。这是为什么?
如果我只想推送到 master
分支以部署到我的 public_html
文件夹,并且我所有的推送都将转到带有 post-receive 的裸仓库钩子,这是否意味着我所有的非 master
推送都没有在服务器上任何地方备份?
例如,假设我有上面提到的设置,我在我的服务器上设置了一个裸仓库,带有一个部署到我的实时站点文件夹的挂钩。我花了一个月的时间开发一项新功能,不断推动功能分支。然后有一天(还没有推送到 master)我的本地机器 crashes/burns。我在该功能分支中的所有工作似乎都丢失了。人们在这种情况下会做什么?有另一个钩子将所有推送发送到的回购协议吗?
假设你的服务器不是你的本地机器,你的服务器没有崩溃,并且你确实将你的开发分支推送到你的服务器,你的开发分支将仍然在你的服务器。它不会采用人类可读的格式,但您可以简单地从服务器上的存储库再次克隆,并检索所有分支,甚至是那些没有自动部署的分支。
这与裸或非裸回购没有真正的关系。 post-receive hook 通常在 bare repos 中设置的原因很简单,因为通常只有 bare repos 从客户端接收内容。可以设置一个非裸存储库来接收来自客户端的内容,但这比通常值得的麻烦更多,因为如果当前签出的分支收到更新,它会导致问题。