阅读互联网上的所有教程和文章。作为一个简单的工作流程,我了解到我们可以在我们的实时服务器上创建一个裸push
存储库,并从本地存储库等对其进行更新。
我的问题和担忧是,由于实时服务器也将是一个 Git 存储库并且它会有.git
文件夹,这不是安全问题吗?如何防止访问它?
更新
假设我在服务器上的活动文件夹是/www,我可以从浏览器http://myserver.com访问它,所以我也可以访问http://myserver.com/.git/HEAD ??? 如何预防?
阅读互联网上的所有教程和文章。作为一个简单的工作流程,我了解到我们可以在我们的实时服务器上创建一个裸push
存储库,并从本地存储库等对其进行更新。
我的问题和担忧是,由于实时服务器也将是一个 Git 存储库并且它会有.git
文件夹,这不是安全问题吗?如何防止访问它?
更新
假设我在服务器上的活动文件夹是/www,我可以从浏览器http://myserver.com访问它,所以我也可以访问http://myserver.com/.git/HEAD ??? 如何预防?
您可能需要考虑分离存储库和工作树。
例如,在 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
现在,每当您推送到存储库时,文件都会被签出到正确的位置,您永远不必担心存储库被意外提供。
Git 不关心访问您的 .git 文件夹的安全性 - 这是您的责任和操作系统强制访问它们。
基本上,如果您可以 ssh 进入您的服务器并访问 .git 文件夹 - 您可以做任何您想做的事情,git 也是如此。
处理用户、密码、ssh 密钥管理等很方便的方法就是安装Gerrit。Gerrit 是用 Java 实现的 Git 服务器,但它也恰好是很棒的代码审查引擎。代码审查部分非常有用,但是如果您不想使用,则不必使用它。您可以稍后使用代码审查,但提供 git 服务器、web ui 和用户/密钥管理、控制对不同 git 存储库的访问权限的 UI 非常好。
喜欢公认的答案,这是使用 git hooks 的好例子。
我是如何解决这个问题的(我很久以前也发过一个问题,网站是否应该是存储库)是,经过思考,我决定创建git发布,zip-em-up,并解压缩成“live”文件夹。
当然,使用帮助脚本和 git 别名。
我有几个脚本,例如 rgitpropup(它将分支从地面合并到 master,并推送到 origin)和 rgitrelease,它创建 GPG 签名版本,使用 dir 前缀作为参数,并将其压缩。
我给 propup 脚本加上了别名(当别名脚本时,你在它们前面加上“!”,顺便说一句。)
我想用钩子你也可以管理安装/解压缩到“live”目录......
编辑:archive
是一个 git 命令,它内置了对压缩为存档格式的支持。通常它与命令结合使用,该tag
命令具有对 pgp/gpg 签名的内置支持(gpg 通常是在 git 中进行数字签名的方式,不要与签名混淆)