1

我对 GitHub 还很陌生,但我现在使用它来跟踪小型 Web 开发项目的本地版本已经有一段时间了。假设我有一个项目,其中包含一堆 HTML、CSS 和 JS 文件,还有一个 PHP 文件来访问 MySQL 数据库。PHP 文件包含我的 MySQL 凭据,包括密码,所以显然我不想公开这个文件。我想在本地跟踪对我的项目所做的所有更改,包括 PHP 文件,但如果我想将项目放到网上,我需要一些方法来将此文件排除在同步之外。

所以我的问题是:我可以忽略与我的 GitHub 帐户同步的文件,同时仍然在我的本地存储库中被跟踪吗?如果我完全走错了路,我会很高兴听到更可靠的解决方案来解决这个问题。谢谢!

4

4 回答 4

2

有很多解决方案可以省略部分文件,但对于刚开始使用git时,这些解决方案太复杂了。大多数技巧都是围绕所谓的过滤器发展而来的,过滤器是在您的生产站点上结帐时解析和创建文件的命令。但你不需要这些。

最简单的技巧为您提供了使应用程序更安全和更便携的额外好处。

它更安全,因为所有秘密数据都保存在一个文件中,该文件可以获得非常严格的权限(因此有权访问例如 FTP 到代码库的人看不到凭据)。它具有更好的可移植性,因为它允许您的团队以他们想要的方式在他们自己的开发机器上运行他们自己的凭证。例如,使用 XAMP 的人可能有不同的数据库名称,然后有人使用虚拟机或自制脚本来管理他们的项目。

在服务器上,创建一个文件/path/only/www-data/has/read-access/secret.inc

<?php
/** Hashing **/
define("SECRET_HASH", "hogwards");

/** Database **/
define("DB_USER", "harry");
define("DB_PASS", "alora");
?>

然后,在您的settings.php或您现在存储这些凭据的位置:

<?php
require("/path/only/www-data/has/read-access/secret.inc");
// Or slightly more portable
// require("../etc/secret.inc");
?>

secret.inc您还可以检查新协作者的示例secret.inc.example,具有定义,但使用空字符串作为值。

现在您可以简单地推送settings.php所有其他提交。它将获取在生产中发现的“secrets.inc”;使用骄傲服务器登录详细信息,例如您的数据库。

于 2012-12-27T17:45:29.790 回答
1

在省略某些内容的同时无法推送提交。这样做会导致 SHA1 标识符发生变化,从而导致不同的提交。

您可以在一个分支上进行公共开发,然后将这些更改合并到另一个分支,您可以在其中跟踪需要保密的配置信息。由于您可以在携带未提交更改的同时切换分支,因此您甚至可以使用已签出的私有分支进行大部分开发和测试,只需切换到公共分支进行提交,然后切换回来并合并这些更改。

但是,在推送时只推送公共分支而不推送私有分支时需要小心。一般来说,将不想推送的信息保存在一个小的单独文件中是一个更好的主意,可以安全地从跟踪中完全忽略该文件。

于 2012-12-27T15:51:26.360 回答
0

您可以忽略 git 存储库中正在跟踪的文件。这在类似情况下很常见。

项目的根目录上有一个名为 .gitignore 的文件。在此文件中,您将不想跟踪的文件的路径放在 git 存储库中。

请在以下位置找到有关如何使用的完整说明:https ://help.github.com/articles/ignoring-files

在您的情况下,您将不得不手动将此“数据库配置”文件发送到您的服务器。

于 2012-12-27T14:06:15.927 回答
0

不,这是不可能的,但我认为你没有正确地做到这一点。将凭据存储在 PHP 文件中是一种不好的做法。您应该有一个带有设置的不同文件,但话又说回来,取决于您放置该设置文件的位置以及在存储库中拥有存根设置文件的重要性,您可能会回到相同的问题,但在不同的文件中.

于 2012-12-27T14:27:58.477 回答