2

我正在尝试使用 Git 的涂抹/清洁过滤器来创建一个可能因环境而异的文件。

在我的仓库中,我有以下文件:

/root/scripts/data.config.local
/root/scripts/data.config.staging
/root/scripts/data.config.production

当开发人员机器上发生结帐时,我希望将 data.config.local 文件作为“data.config”复制到 /root/scripts 目录。

我的全局 .gitconfig 具有以下过滤器定义:

[filter "copyEnv"]
  clean = "rm -f c:\\code4x\\git\\rgpstage\\scripts\\gg_data.config"
  smudge = "cp c:\\code4x\\git\\rgpstage\\scripts\\gg_data.config.local c:\\code4x\\git\\rgpstage\\scripts\\gg_data.config"

我在这些过滤器上尝试了许多变体,包括将脚本移动到单独的脚本文件中。我用于涂抹的单独脚本文件如下所示:

#! /usr/bin/bash
cp "C:\Code4X\GIT\rgpstage\scripts\gg_data.config.local" "C:\Code4X\GIT\rgpstage\scripts\gg_data.config"

无论我对过滤器操作使用哪种方法(内联或文件),我都会得到以下输出:

error: cannot feed the input to external filter c:\removeGGData
error: external filter c:\removeGGData failed
cp: cannot stat `C:\\Code4X\\GIT\\rgpstage\\scripts\\gg_data.config.local': No such file or directory
error: cannot feed the input to external filter c:\copyGGData
error: external filter c:\copyGGData failed 1
error: external filter c:\copyGGData failed

我使用 Git 1.8 在 Windows 7 上运行它。该文件确实存在并根据权限打开。

4

1 回答 1

1

您似乎对涂抹和清洁过滤器有误解(顺便说一句 - 您的 .gitattributes 是什么样的?)。您正在做的是严重滥用该功能。这些过滤器旨在过滤文件,在 STDIN 上传递给它们,并在 STDOUT 上返回过滤后的版本。这些过滤器绝对不应该有任何副作用。

因此,为了在不同的机器上实现不同的配置,我建议将它们全部放在同一个文件中,并用一个 if 语句包围它们,该语句使用来自污迹过滤器的信息。有关详细信息,请参阅我的回答:https ://stackoverflow.com/a/13616911/758345

于 2013-03-07T07:14:45.747 回答