如何通过 git pull 部署网站?

How to deploy a website via git pull?

我打算使用 GitHub 来管理我下一个网站的代码。虽然以前用过GitHub,但是从来没有用它来部署过网站。我比较简单的计划如下:

但是,我对这个模型有几点担忧:

  1. 如果我在我的远程服务器上使用 git pull,这是否意味着我的网站目录本身将成为一个 git 存储库?如果是这样,有什么办法可以避免这种情况吗?例如,我可以创建一个 /var/repo 目录来包含 git 存储库,然后 "copy" 将代码转移到实际的网站目录 (/var/www) 吗?有没有有效的方法来设置它?

  2. 假设我是第一次 运行 git pull 并在我的服务器上部署网站。接下来,假设我 编辑 一个现有文件并通过 FTP 直接在服务器上 添加 一个文件。当我第二次运行git pull时,git将如何处理这两个文件?我编辑过的文件会被替换而我的新文件会被删除吗?我编辑过的文件会被替换而我的新文件不会被修改吗?我会不会 运行 git 根本无法拉动?

  3. 假设我的计算机上有一个名为 config.php 的文件,其中包含可以访问我的数据库的各种用户的 usernames/passwords。由于我计算机上的 config.php 是为我的本地主机环境配置的,所以当我第一次在我的服务器上使用 git pull 时,我将不得不编辑变量。因此,当我第二次 运行 git pull 时,我服务器上的那个文件是否又被本地主机版本替换了?

  4. 作为最后一个问题的后续问题:处理包含用户名和密码等数据的配置文件的最佳方式是什么?我不仅想从 public GitHub 存储库中隐藏这些敏感数据,而且我还想确保当我 运行 git pull 时,已经修改的配置文件在我的服务器上保持不变。

  1. 你不能 运行 git pull 不在 git 回购所以第一次你必须做 git clone repo_url 来获得代码到远程服务器。如果您不想将 .git 保留在 var/www 中,即您的 git 存储库,那么您可以将代码拉到其他目录,然后使用 rsyncmv.

  2. 直接在远程服务器上编辑文件被认为是一种不好的做法,它会给您的存储库带来冲突。无论如何,如果你直接在远程服务器上编辑,你将无法从 github 中提取,因为 git 会抛出一个错误 your local changes will be overwritten with this merge。因此,您必须隐藏更改或完全删除它们。

  3. 对于包含密码和其他内容的文件,我建议对本地和远程服务器使用环境变量。使用 config.php 中的环境变量从系统中获取敏感信息。您只需在远程服务器中设置这些环境变量一次

  4. 如果您有任何敏感数据,请将这些文件放入 .gitignore。当您从 github 提取代码时,gitignore 中的任何文件都将保持不变,因为 git 将忽略这些文件。

  1. 是的,会的。但是,如果您在 .htaccess(或等效文件)中指定不提供 .git 文件夹,那么它对最终用户应该没有太大影响。

  2. 如果你打算拥有服务器git pull那么你不想直接修改服务器上的内容。如果这样做,您将不得不在服务器上提交更改,然后将它们与本地更改合并。这将变得混乱。所以,总是在你的本地机器上修改,并相应地推拉。

  3. 您应该永远不要 以纯文本形式存储密码,尤其是在 public GitHub 存储库中。有一个完全独立的服务器部分(不在 git 下)存储 usernames/passwords 散列和加盐 。您可以 FTP 单独到此位置。您还可以有 2 个单独的文件,一个用于本地开发,一个用于服务器。

  4. 我已经回答了这个问题,请确保将用户名/密码存储在其他地方。