我知道如何使用gitattributes完全忽略git中的特定行(请参阅How to tell git to ignore individual lines, i.e. gitignore for specific lines of code,但是我将如何忽略changes到特定行?
我假设我们可以非常类似地使用过滤器,但是我不知道我的sed脚本应该怎么做才能忽略对行的更改。
对于一个实际示例,我正在编写一个C#库,该库需要一个特定的生成输出路径,具体取决于它用作子模块的项目。因此,无论在何处使用它,都必须手动对其进行配置,但不得将更改提交给库本身。
原始Library.csproj:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
...
<OutputPath>bin\Debug\</OutputPath>
...
</PropertyGroup>
子模块Library.csproj:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
...
<OutputPath>..\Target\</OutputPath>
...
</PropertyGroup>
我如何让git忽略对此行的更改?
使用git,无法忽略一行代码。跟踪文件后,将对整个文件建立索引。
而不是更改构建位置的输出,调用您的项目的周围代码应将构建的输出复制到正确的位置。这样,您就不会弄乱子模块的完整性。
如果需要动态更改构建的输出位置,则可以使用在构建之前设置的环境变量。这样,您可以通过更改环境变量的值来更改位置。
对于这种非常特殊的情况,您可以将干净的过滤器设置为使用标准默认值行替换行。也就是说,您将读取传入的XML数据流,找到一个数据项,将其替换,然后生成新的流(可以作为全新XML生成,也可以随时进行)。
整个想法虽然不好。这意味着用户的私有配置存储在他们现有的工作树中,位于Git will覆盖的文件中。换句话说,在某些情况下会告诉Git 无法挽回地破坏用户的配置,并且Git将服从,并且配置将被破坏。要放回去,您不仅需要清洁过滤器,而且还需要污迹过滤器。污迹过滤器必须从某处获取正确的配置数据-该cannot是正在被销毁并立即重新创建的文件,并将其放入数据流中。
因此,该配置必须存储在某些other文件中,该文件会被Git 不会覆盖,要么完全在工作树之外,要么永远不会提交。在这种情况下,您最好只从另一个文件中读取值。因此,只需使用该文件。请参见Ben W's answer以了解此替代方法。另外,请考虑读取主要的XML数据:
<OutputPath type="indirect">/etc/oursoftware.d/config.output</OutputPath>
例如,指示此处的输出“路径”是另一个文件的名称(在本例中为/etc/oursofware.d/config.output
),用户将配置该文件包含输出路径。或者,如果环境变量可用:
<OutputPath type="envvar">$OURSOFTWARE_OUTPUT_PATH</OutputPath>
表明该软件将以以下方式运行:
OURSOFTWARE_OUTPUT_PATH=/path/to/file.ext program
例如。请注意,您必须更改C#程序,以便它可以理解这些新的XML控件。