我越来越多地进入Git并且必须将这一点拉直,
我在某处读到了一个不好的安全做法,就是将.git repo放在可以通过网络访问的文件夹中(听起来很合理!)。
我的问题是,除了它是否正确之外,最好的解决办法是什么?当然,如果你在网络开发时在远程主机上工作,那么问题就出现了。
例如,如果我在domain.com/project上工作" project"是存储库,我该怎么办?
是否可以将.git文件夹移到htdocs之外的某个地方并链接到它?或者我可以为它添加一些保护层吗?
我主要是在共享主机上开发,因此我可以安装和设置的内容有限。
我读取的内容比您可以将整个存储库/文件夹隐藏在服务器上的某个地方,然后设置脚本以在推送时复制内容。
但是当开发一个" live"服务器,我希望能够在提交之间实时测试我的代码。
我清楚了吗?
帮助表示赞赏!
答案 0 :(得分:3)
过去,我做过这个:
project/
.git/
README,etc
public/
index.html
然后,您可以看到public /子目录世界,但隐藏父项目/目录。您可以使用符号链接或使用正确的.htaccess咒语来执行此操作。
答案 1 :(得分:2)
是的,您可以移动.git
目录并使用GIT_DIR
环境变量指向它。
GIT_DIR
If the GIT_DIR environment variable is set then it specifies a path to use instead of the
default .git for the base of the repository.
答案 2 :(得分:0)
我看到你的问题的两个主要解决方案仍然很简单(与复制脚本相反)。
首先,将您的可访问目录http://example.com/
放在/var/www/example-com/
之类,并将您的git目录放在/var/www/.git
中。这仅适用于主机在example-com
目录中只有/var/www/
的情况(或者至少没有其他v服务器需要git存储库。如果可以告诉管理员,可以解决此问题。将根目录移至/var/www/example-com/site
,以便直接在/var/www/example-com
中的文件无法访问。
另一种方法是拒绝通过.git
访问.htaccess
目录,或者如果不可用,则通过不同的用户访问www-data
目录。如果服务器以www-data
与主要组me
和运行,您的用户名为me:www-data
,则可以让您的根目录属于r-S
并且将组权限设置为www-data
意味着.git
组的成员可以读取所有内容,可以执行目录(并且只有目录),并设置组粘性位。然后将rwx------
目录设为{{1}}或将其分配给您自己的群组。
答案 3 :(得分:0)
我的回答是假设您在debian上使用apache,但它可以轻松适应其他发行版和服务器。
您有两种可能性:
1:创建指向您的存储库的符号链接
您现在可以创建从public_html文件夹到工作副本的符号链接。例如。假设您的vhost配置将DocumentRoot放在“/ var / www / site / public_html”中,您可以将其符号链接到您的git工作副本:
ln -s /var/git/site/html /var/www/site/public_html
或者,如果您只想让子文件夹可访问:
ln -s /var/git/site/feature/ /var/www/site/public_html/feature
这仍然会使一些.git文件可访问,因此您必须修改.htaccess或vhost文件才能使它们不可用
2:导出存储库
在我看来,最优秀的选择是创建一个(裸)存储库并导出(存档)你想要的版本和版本:你通常不希望在每次推送后更新你的网站,而是导出一个特定的标记,分支或提交。
git archive master | tar -x -C /var/www/site/public_html
在这里,您可以用任何可接受的树形结构(例如分支,提交或标记)替换master