是否可以忽略GitHub文件仅用于同步?

时间:2012-12-27 13:58:24

标签: git github

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

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

4 个答案:

答案 0 :(得分:2)

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

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

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

在服务器上,创建文件/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”;使用例如自动服务器登录详细信息你的数据库。

答案 1 :(得分:1)

在省略某些内容的同时推送提交是不可能的。这样做会导致SHA1标识符发生更改,从而导致不同的提交。

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

但是,当推送到仅推送您的公共分支而不是私有分支时,您需要小心。一般来说,将一个你不想推送的信息保存在一个小的单独文件中是一个更好的想法,这个文件可以完全忽略完全跟踪。

答案 2 :(得分:0)

您可以忽略git存储库中正在跟踪的文件。对于类似案件而言非常普遍。

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

请在https://help.github.com/articles/ignoring-files

找到有关如何使用的完整说明

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

答案 3 :(得分:0)

不,这是不可能的,但我确实认为你做得不对。将凭据存储在PHP文件中是一种不好的做法。您应该有一个不同的文件包含设置,但是再次,根据您放置该设置文件的位置以及在存储库中存储存根设置文件的重要性,您可能会遇到同样的问题,但是在另一个文件中