使用git smudge / clean来替换文件内容

时间:2013-01-11 16:10:39

标签: php git githooks

我正在尝试使用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 hook和shell脚本来替换内容,但理想情况下我希望在运行git checkout -f之前更改repo中的内容

之后的实时副本没有改变

2 个答案:

答案 0 :(得分:6)

  

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

之后未在实时副本中更改

最接近的是过滤器内容驱动程序,它将替换 {/ 1}}的值

smudge

(来自Scott SchaconPro Git bookGit Attributes:“关键字扩展”部分

所以在你的情况下:一个涂抹过滤器,在git checkout文件中声明。

请参阅“Can git automatically switch between spaces and tabs?”,除非您使用sed将本地替换为live(如this example所示)

答案 1 :(得分:0)

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

注意:因为你必须有不同的清理过滤器输出(对于本地和实时),你可能在普通文件名下的本地和实时WorkingDir上有两个略有不同(内容中)的干净脚本(在本书的样本中,清除结果对所有位置都相同 - 使用单个脚本。