【问题标题】:use git smudge/clean to replace file contents使用 git smudge/clean 替换文件内容
【发布时间】:2012-12-26 06:23:51
【问题描述】:

我正在尝试使用 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 中的内容 之后在 Live Copy 中未更改

【问题讨论】:

    标签: php git githooks


    【解决方案1】:

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

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

    (来自Scott SchaconGit Attributes 上的Pro Git book 页面:“关键字扩展”部分)

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

    请参阅“Can git automatically switch between spaces and tabs?”,除非您会使用 sed 来替换 local to live(如 this example

    【讨论】:

    • 感谢您的快速回复,以便澄清是否有任何特定的脚本类型 id 必须使用,或者它会运行我的服务器将运行的任何东西吗?如果是这样的话,这如何与 repo 中的文件交互,我不明白这种关系,因此我必须做什么来更新文件
    • @MattSmokey-watersHolmes 您可以在涂抹声明中直接声明脚本或使用命令。在您的示例中,一个简单的sed 就足够了。
    • @Nicholas 署名已添加。
    • 你速度很快!我取消了否决票 :-) 我可以盗取带有 属性的图片。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 2017-05-25
      • 2017-08-10
      相关资源
      最近更新 更多