使用jgit设置包含非法字符的分支名称(概述为here),如下所示:
git.checkout().setName("......my:bad:branch:name")
它会生成一个低级别的git错误。
理想情况下,我可以避免直接在代码中编码这些无效字符。 JGit是否具有转义/替换/删除无效字符的任何功能?
答案 0 :(得分:1)
更新2017-01-27 :由于this commit有一个静态方法Repository::normalizeBranchName()
,它会转义给定字符串以形成有效的引用名称并返回它。这些更改将通过JGit v4.7发布。
对于早期版本的JGit,必须手动转义名称。
使用Repository::isValidRefName()
,您可以确定给定的字符串是否是有效的Git引用名称。 documentation for git check-ref-format详细描述了有效的引用名称必须符合的规则。
我在一个项目中使用此方法,用一个下划线替换所有可疑字符(可能有一些不准确):
String DOT_LOCK = ".lock";
String REPLACEMENT = "_";
String escapeRefName( String refName ) {
String result = refName;
if( result.endsWith( DOT_LOCK ) ) {
result = result.substring( 0, result.length() - DOT_LOCK.length() );
}
result = result.replace( " ", REPLACEMENT );
result = result.replace( "\\", REPLACEMENT );
result = result.replace( "/", REPLACEMENT );
result = result.replace( "^", REPLACEMENT );
result = result.replace( "@", REPLACEMENT );
result = result.replace( "{", REPLACEMENT );
result = result.replace( "}", REPLACEMENT );
result = result.replace( "~", REPLACEMENT );
result = result.replace( "*", REPLACEMENT );
result = result.replace( "?", REPLACEMENT );
result = result.replace( ":", REPLACEMENT );
result = result.replace( "[", REPLACEMENT );
result = result.replace( ".", REPLACEMENT );
result = result.replace( "\u007F", REPLACEMENT );
return result;
}