git是一个非常强大的工具,但不是那么容易使用
例如,我很高兴使用git作为工具从我的git存储库更新我的远程站点。问题是我的网站根目录下有一个.git目录,外部用户只需使用site / .git访问它,这很糟糕,因为他们可以轻松获取我的代码历史记录,基本上是当前的代码,他们甚至可以从配置文件中获取密码和私人信息。
那么使用git哪种方法可以充分利用git,但不引入这些威胁呢?
使用git clone git://repo site_root
初始化网站,git pull
进行更改非常方便,但也带来了巨大的安全问题。
是否有任何方法可以像上面显示的步骤一样方便,但没有安全隐患?
答案 0 :(得分:2)
Apache至少默认其配置禁止对以.
开头的任何文件进行Web访问,这也可以在任何其他网络服务器上完成。
此外,最好将敏感文件保留在Web根目录之外,即:
.git/
config.file
public/
public/index.html
并将该站点的文档根目录为public/
目录。
答案 1 :(得分:1)
请参阅http://www.clientcide.com/best-practices/exporting-files-from-git-similar-to-svn-export/
从上面开始:
这是我的一行命令,用于获取存档并将其发送到 不同的位置:
git archive HEAD | (cd~ / path / where / I / want / it /& amp;& tar -xvf - )
这会将ENTIRE库提取到指定的路径(没有 .git文件和诸如此类的东西。
然而,有时候,我想拉出一部分库。 git存档总是给你整个辣酱玉米饼馅,有点糟透了, 在这种情况下,我使用rsync,如下所示:
rsync path / I / want / to / export / -ri --del -m --exclude“。*” 〜/ path / where / I / want / it / | grep sT
最后一点 - grep sT将限制我所看到的输出 我只看到更新的文件。我只是为了理智而使用它 检查我的出口。如果我看到TON的东西去更新路径 已经有了库,我知道我只更改了一个文件,然后是我 知道我错了路。
答案 2 :(得分:1)
好吧,我真的不喜欢直接使用git来自动部署代码的最后一个版本,但这是另一个问题。
关于您的安全问题,一个非常基本的解决方案是删除对.git文件的访问权限(使用htaccess文件?)。
另一件事是从git存储库中删除你的密码,在你的版本控制系统中可能没有使用它。
答案 3 :(得分:0)
@ JaredPar的评论和@Chris Shain上面的答案(git档案的+1)的组合。
我也使用git archive
,然后使用Chef进行实际部署。不可能更简单。
git archive <tag_name> | gzip > rc.tar.gz
mv rc.tar.gz
到我的食谱在我的服务器上运行的chef-client运行配方,将压缩文件复制到chache位置并将其解压缩到我的Web服务器目录中。
自我注意:在github上发布食谱
答案 4 :(得分:0)
如果要求在生产服务器中拥有完整的仓库,那么就有一个解决方案。
你可以在文件系统中的某个地方拥有整个历史记录,并让git“指向”它。
$ cd /public # go to the public directory
$ git clone git://repo # to initialize the web site
$ mv .git /private/repo.git # move sensible information to a private place
$ export GIT_DIR=/private/repo.git # make git "point" to the history
$ git pull # update changes
如果您这样做,您的历史记录将位于无法通过网络访问的/private/repo.git
中,您的工作目录将位于/ public,仅提供您指定的文件版本。
有关详细信息,请参阅progit。
答案 5 :(得分:0)
我会重新提出这个问题,因为我也在研究安全问题。
您应该使用分离的工作树,如here所述。您可以在Web根目录之外创建git存储库,并让git指向不同目录下的源代码。