You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

git-commit-id-plugin为何扫描.git外目录?非ASCII文件名报错

git-commit-id-plugin扫描非.git目录的原因及编码报错解决

问题场景

使用git-commit-id-plugin 2.2.6,配置如下:

<plugin>
    <groupId>pl.project13.maven</groupId>
    <artifactId>git-commit-id-plugin</artifactId>
    <version>2.2.6</version>
    <executions>
        <execution>
            <id>get-the-git-infos</id>
            <goals>
                <goal>revision</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
        <prefix>git</prefix>
        <verbose>false</verbose>
        <generateGitPropertiesFile>true</generateGitPropertiesFile>
        <generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties
        </generateGitPropertiesFilename>
        <gitDescribe>
            <skip>false</skip>
            <always>false</always>
            <dirty>-dirty</dirty>
        </gitDescribe>
    </configuration>
</plugin>

执行命令 mvn pl.project13.maven:git-commit-id-plugin:2.2.6:revision 时触发报错:

[INFO] --- git-commit-id-plugin:2.2.6:revision (get-the-git-infos) 
Malformed input or input contains unmappable characters: myProject/documentation/������.odt.

原文件名为俄文「Дискуссия_ТЗ_2.odt」,改为英文「Discussion_TZ_2.odt」后问题解决,疑问是插件为何会扫描非.git目录。

原因说明

git-commit-id-plugin在启用脏状态检测时,会遍历整个Git工作区的文件(而非仅.git目录):

  • 你配置了<gitDescribe><dirty>-dirty</dirty></gitDescribe>,这会让插件检测仓库是否处于脏状态(存在未提交的文件变更)
  • 为了判断脏状态,插件需要扫描工作区所有文件,包括documentation目录下的文件
  • 当系统默认编码不支持文件名中的非ASCII字符(如俄文)时,就会触发编码转换异常,抛出「Malformed input...」错误

解决方法

1. 临时快速解决

将包含非ASCII字符的文件名改为英文或ASCII兼容名称,如你已操作的那样。

2. 配置层面优化(无需修改文件名)

方法A:关闭脏状态检测

如果不需要在版本信息中标记脏状态,可在插件配置中添加以下参数,避免扫描工作区文件:

<configuration>
    <!-- 保留原有其他配置 -->
    <checkDirty>false</checkDirty>
</configuration>

或修改gitDescribe配置,跳过脏标记:

<gitDescribe>
    <!-- 保留原有其他配置 -->
    <dirty></dirty>
</gitDescribe>

方法B:指定编码支持非ASCII字符

在执行Maven命令时添加编码参数,确保插件能正确解析非ASCII文件名:

mvn pl.project13.maven:git-commit-id-plugin:2.2.6:revision -Dfile.encoding=UTF-8

也可在项目pom.xml中全局配置编码:

<properties>
    <file.encoding>UTF-8</file.encoding>
</properties>

内容的提问来源于stack exchange,提问作者IlHam13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 08:52:13