阅读互联网上的所有教程和文章。作为一个简单的工作流程,我了解到我们可以在我们的实时服务器上创建一个裸存储库,并通过本地存储库等对其进行push
更新。
我的问题和担心是,由于实时服务器也将是一个Git仓库并且它有.git
文件夹,这不是一个安全问题吗?如何防止访问它?
更新
假设我的服务器上的实时文件夹是/ www,我可以从浏览器http://myserver.com访问它,这样我也可以访问http://myserver.com/.git/HEAD ???怎么预防呢?
答案 0 :(得分:4)
您可能需要考虑将存储库和工作树分开。
例如,在Web服务器提供的文件夹之外的某个位置,运行git init --bare
。然后使用以下内容替换此目录中的config
文件(其中/path/to/web/root
是应放置文件的路径。)
[core]
repositoryformatversion = 0
filemode = true
bare = false
worktree = /path/to/web/root
[receive]
denycurrentbranch = ignore
最后添加hooks/post-receive
以及以下内容并将其标记为可执行文件
#!/bin/sh
git checkout -f
现在,无论何时推送到存储库,文件都会被检出到正确的位置,您无需担心存储库意外被提供。
答案 1 :(得分:0)
Git不关心访问.git文件夹的安全性 - 您有责任和操作系统强制访问它们。
基本上,如果你可以ssh到你的服务器并访问.git文件夹 - 你可以做任何你想做的事情,git也是如此。
处理用户,密码,ssh密钥管理等非常方便的方法是安装Gerrit。 Gerrit是用Java实现的Git服务器,但它也恰好是很好的代码审查引擎。代码审查部分非常有用,但如果您不想使用它,则不必使用它。您可以稍后使用代码审查,但提供了git服务器,web ui和用户/密钥管理,UI来控制对不同git repos的访问权限是非常好的。
答案 2 :(得分:0)
喜欢公认的答案,这是使用git hooks的绝佳示例。
我如何解决此问题(很久以前我也发布了一个问题,该网站是否应为存储库)是在考虑之后,我决定创建git版本,zip-em-up并解压缩为一个“实时”文件夹。
当然可以使用辅助脚本和git别名。
我有几个脚本,例如rgitpropup(它将分支从头到尾合并到master,然后推送到原点) 和rgitrelease创建一个GPG签名发布,使用dir前缀作为参数,并将其压缩。
我已经对propup脚本进行了别名(别名脚本时,请在它们前面加上“!”前缀)
我想用钩子还可以将安装/解压缩管理到“实时”目录中...
编辑:archive
是一个git命令,它具有对压缩为存档格式的内置支持。通常,它与tag
命令结合使用,该命令对pgp / gpg签名具有bult-in支持(gpg通常是对git进行数字签名的方式,不要与签名混淆)