5

我越来越喜欢 Git 并且必须理顺这一点,

我在某处读到,将 .git 存储库放在可以通过网络访问的文件夹中是不好的安全做法(听起来很合理!)。

我的问题是,除了它是否正确之外,最好的解决方案是什么?当然,如果您在 Web 开发时在远程主机上工作,则会出现此问题。

例如,如果我在 domain.com/project 上工作,其中“项目”是存储库,我能做什么?

是否可以将 .git 文件夹移动到 htdocs 之外的某个位置并链接到它?或者我可以为其添加一些保护层吗?

我主要在共享主机上开发,所以我可以安装和设置的内容有限。

我读过你可以将整个存储库/文件夹隐藏在服务器上的某个地方,然后设置一个脚本以在推送到它时复制内容。

但是在“实时”服务器上开发时,我希望能够在两次提交之间实时测试我的代码。

我清楚了吗?

帮助表示赞赏!

4

4 回答 4

3

在过去,我这样做过:

project/
  .git/
  README,etc
  public/
    index.html

然后让 public/ 子目录世界可见,但隐藏父项目/ 目录。您可以使用符号链接或正确的 .htaccess 咒语来做到这一点。

于 2012-05-08T11:36:44.233 回答
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.
于 2012-05-08T11:44:50.497 回答
1

我的回答假设您在 debian 上使用 apache,但它适用于其他发行版和服务器。

你有两种可能:

1:创建一个符号链接到您的存储库

您现在可以创建一个从您的 public_html 文件夹到您的工作副本的符号链接。例如,假设您的虚拟主机配置将 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

于 2012-05-08T11:46:02.837 回答
0

我看到您的问题的两个主要解决方案仍然足够简单(与复制脚本相反)。

首先是将您的可访问目录http://example.com/放在类似/var/www/example-com/的位置,并将您的 git 目录放在/var/www/.git. 仅当您的主机仅example-com/var/www/目录中时才有效(或者至少其他 v-server 都不需要 git 存储库。如果您可以告诉管理员将根目录移动到 ,那么您可以解决这个问题,/var/www/example-com/site这样文件就可以直接在/var/www/example-com是无法访问的。

另一种是通过 拒绝访问.git目录,.htaccess或者如果不可用,则通过不同的用户。如果服务器www-data以主组运行www-data并且您的用户名是me,您可以让您的根目录属于me:www-data并将组权限设置为r-S意味着组成员可以读取所有内容www-data,可以执行目录(并且只有目录),并且设置了 group-sticky 位。然后让您的.git目录简单地成为rwx------或分配给您自己的组。

于 2012-05-08T11:43:38.503 回答