5

我正在尝试使用 git 来管理对我的实时网站的部署。我遇到的问题是我有几个设置文件,我不想在推送到生产环境时更新

我正在寻找的是使用钩子或涂抹/清洁来更改文件内容,例如从

<?php
define('DB_NAME', 'live');
define('DB_HOST', '127.0.0.1');
define('DB_USER', 'live_user');
define('DB_PASS', 'livePass');

<?php
define('DB_NAME', 'local');
define('DB_HOST', '127.0.0.1');
define('DB_USER', 'local_user');
define('DB_PASS', 'localPass');

有没有人可以告诉我整个过程

我确实想知道使用 post-receive 钩子和 shell 脚本来替换内容,但理想情况下,我希望在我运行 git checkout -f 之后在实时副本中更改之前更改 repo 中的内容

4

2 回答 2

6

理想情况下,我希望在运行 git checkout -f 之后更改 repo 中的内容

最接近的是过滤器内容驱动程序,它将替换.git checkout

弄脏

(来自Scott Schacon的关于Git 属性的Pro Git 书籍页面:“关键字扩展”部分)

.gitattributes因此,在您的情况下:在文件中声明的污迹过滤器。

请参阅“可以 git 自动在空格和制表符之间切换吗? ”,除非您会使用 sed 来替换 local to live(如本例所示

于 2013-01-11T16:16:51.923 回答
0

我认为,您必须从头到尾阅读主题自定义 Git - Git Book 中的 Git 属性才能全面了解,但要特别仔细检查“关键字扩展”部分,其中自定义手工脚本用于将存储库中的 KEYWORD 隐藏到工作目录中的最终文本(和后面)。它们是任何代码,可以在带有工作目录的主机上执行,从 .gitattributes 文件中引用

注意:因为您必须有不同的 clean-filter 输出(对于本地和实时),所以您可能在本地和实时 WorkingDir 上有两个稍微不同(内容)的清理脚本,在通用文件名下(在本书的示例清理结果中,所有位置都相同) - 使用单个脚本)。

于 2013-01-11T17:28:19.240 回答