【问题标题】:Pull from GitHub remote only copies tracked files, overwrites core Magento files从 GitHub 远程拉取只复制跟踪的文件,覆盖核心 Magento 文件
【发布时间】:2014-01-22 01:29:58
【问题描述】:
我已经非常广泛地使用 Git 来实现从 GitHub 到生产的简单本地工作流程,但我第一次需要设置一个还包括开发服务器的设备。
我目前在我的生产服务器上安装了 Magento。我已向其中添加了一个 .gitignore 文件,并将跟踪的文件成功保存到 GitHub 存储库。我还将跟踪的文件保存到本地存储库。我目前能够在本地进行更改,将它们推送到 GitHub,然后将它们拉到生产服务器。到目前为止,一切顺利。
现在,我想设置另一台服务器(称为“开发”),其中包括自己安装的 Magento,其中包含当前部署在生产服务器上的所有相同插件和代码。
但每次我安装 Magento、设置存储库、添加 GitHub 远程并拉取文件时,它都会覆盖我的核心 Magento 文件并仅复制 Git 跟踪的文件。
【问题讨论】:
标签:
git
magento
github
gitignore
【解决方案1】:
您必须将生产环境直接复制到开发环境。对新的开发环境进行拉取不会检索所有文件(因为 git 不会跟踪所有内容)。
将 Magento 复制到开发服务器:
- 压缩生产服务器上的所有 Magento 文件,然后将它们复制到开发服务器。
- 将生产数据库克隆到开发服务器
- 将文件解压到开发服务器上
- 使用开发数据库详细信息修改
app/etc/local.xml。
- 编辑数据库中的
core_config 表,将base_url 值更改为开发网址。
- 删除
var/cache 和 var/sessions 文件夹中的所有内容。
一旦您确认 Magento 已设置并在新的开发服务器上正确运行,您就可以开始设置 Git 以推送到它。我个人使用位于我从本地环境推送到的实际服务器上的裸存储库。
设置开发服务器:
在您的开发服务器上,执行以下操作(使用 ssh 连接)
- 在 Magento 目录之外创建一个目录,该目录不可公开访问。例如
~/git/development。请记住,~ 指的是进行连接的用户的根目录。
- 使用 shell/ssh,导航到您创建的用于保存裸 git 存储库的文件夹:
cd /home/myuser/git/development
- 使用以下命令创建裸仓库:
git init --bare
- 创建一个 post-receive 文件,当您推送到该文件时,该文件将由 git 执行。这将允许 git 自动将更改应用到您的开发环境。
vi hooks/post-receive
-
粘贴以下内容(将路径更改为绝对Magento目录):
#!/bin/sh
GIT_WORK_TREE=/path/to/magento git checkout -f
-
保存文件。然后在文件上运行以下命令来设置正确的权限:
chmod +x hooks/post-receive
上面的内容是允许你推送到裸仓库,并自动将更改应用到 Magento 文件。
配置本地 git 实例
现在您要配置本地 git 以便能够推送到远程开发服务器。
-
添加远程仓库:
git remote add development ssh://user@serverdomain.com/~/git/development
-
现在测试将您的主分支推送到您的开发服务器:
git push development master
如果您没有将 .ssh 密钥添加到开发服务器,您可能需要输入密码。
如果操作正确,您现在可以简单地将更改推送到您的开发环境,并且在这样做之后网站几乎会立即更新。