我计划使用GitHub来管理我的下一个网站的代码。虽然我过去使用过GitHub,但我从未用它来部署网站。我相当简单的计划如下:
但是,我对这个模型有几个担忧:
如果我在远程服务器上使用git pull
,这是否意味着我的网站目录本身将成为git存储库?如果是这样,有没有办法可以避免这种情况?例如,我可以创建一个/var/repo
目录来包含git存储库,然后" copy"代码到实际的网站目录(/var/www
)?有没有一种有效的方法来设置它?
我们假设我是第一次运行git pull
并在我的服务器上部署网站。接下来,让我们假设我编辑现有文件,并通过FTP直接在服务器上添加文件。当我第二次运行git pull
时,git将如何处理这两个文件?我的编辑文件会被替换,我的新文件会被删除吗?我的编辑文件会被替换,我的新文件是否会被取消?我根本不能运行git pull吗?
假设我的计算机上有一个名为config.php
的文件,其中包含可以访问我的数据库的各种用户的用户名/密码。由于我的计算机上的config.php
是为我的localhost环境配置的,所以当我第一次在服务器上使用git pull
时,我将不得不编辑变量。因此,当我第二次运行git pull
时,我的服务器上的文件是否又被localhost版本替换了?
作为最后一个问题的后续问题:处理包含用户名和密码等数据的配置文件的最佳方法是什么?我不仅想要从公共GitHub存储库中隐藏这些敏感数据,而且我还想确保在运行git pull
时,我服务器上已修改的配置文件保持不变。
答案 0 :(得分:1)
如果没有使用git repo,则无法运行git pull
,因此第一次必须执行git clone repo_url
才能将代码提供给远程服务器。如果您不想将.git
保留在var/www
即您的git repo中,那么您可以将代码提取到其他目录,然后使用rsync
或mv
移动代码。
直接在远程服务器上编辑文件被认为是一种不好的做法,它可能会给你的回购带来冲突。无论如何,如果你直接在远程服务器上编辑,你将无法从github中提取,因为git会抛出错误your local changes will be overwritten with this merge
。因此,您必须隐藏更改或完全删除它们。
对于包含密码和其他内容的文件,我建议为本地和远程服务器使用环境变量。使用config.php中的环境变量从系统中获取敏感信息。您只需在远程服务器中设置一次这些环境变量
如果您有任何敏感数据,请将这些文件放在.gitignore
中。当您从github中提取代码时,gitignore中的任何文件都将保持不变,因为git将忽略这些文件。
答案 1 :(得分:1)
是的,它会的。但是,如果您在.htaccess
(或等效文件)中指定不提供.git
文件夹,则不应对最终用户造成太大影响。
如果您要使用服务器git pull
,那么您不想直接修改服务器上的内容。如果这样做,则必须在服务器上提交更改,然后将其与本地更改合并。这将变得凌乱。因此,只需在本地计算机上进行修改,然后相应地推拉。
您应该从不以纯文本格式存储密码,尤其是在公共GitHub存储库中。拥有一个完全独立的服务器部分(不在git下),用于存储用户名/密码哈希和盐渍。您可以单独FTP到这个位置。您还可以拥有2个单独的文件,一个用于本地开发,另一个用于服务器。
我已经回答了这个问题,请确保将用户名/密码存储在其他地方。