Git忽略对单行的更改

问题描述 投票:1回答:3

我知道如何使用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忽略对此行的更改?

c# git gitignore gitattributes
3个回答
3
投票

使用git,无法忽略一行代码。跟踪文件后,将对整个文件建立索引。

而不是更改构建位置的输出,调用您的项目的周围代码应将构建的输出复制到正确的位置。这样,您就不会弄乱子模块的完整性。

如果需要动态更改构建的输出位置,则可以使用在构建之前设置的环境变量。这样,您可以通过更改环境变量的值来更改位置。


2
投票

对于这种非常特殊的情况,您可以将干净的过滤器设置为使用标准默认值替换行。也就是说,您将读取传入的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控件。


0
投票
经过几个小时,这是我到达的地方,结合了我目前的两个答案和一些针对我的解决方案的补充研究:
© www.soinside.com 2019 - 2024. All rights reserved.