JGit 支持转义分支名称
JGit support to escape branch names
当使用 jgit to set a branch name with illegal characters (outlined here) 像这样:
git.checkout().setName("......my:bad:branch:name")
它会生成低级 git 错误。
理想情况下,我可以避免直接在我的代码中编码那些无效字符。 JGit 是否具有 escape/replace/strip 无效字符的功能?
更新 2017-01-27:因为 this commit 有一个静态方法 Repository::normalizeBranchName()
转义给定的字符串以形成有效的引用名称和returns吧。更改将与 JGit v4.7.
一起发布
对于早期版本的 JGit,必须手动对名称进行转义。
使用 Repository::isValidRefName()
您可以确定给定的字符串是否是有效的 Git 引用名称。 documentation for git check-ref-format 详细描述了有效的 ref 名称必须遵守的规则。
我在一个用下划线替换所有可疑字符的项目中使用这个方法(可能有一些不准确):
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;
}
当使用 jgit to set a branch name with illegal characters (outlined here) 像这样:
git.checkout().setName("......my:bad:branch:name")
它会生成低级 git 错误。
理想情况下,我可以避免直接在我的代码中编码那些无效字符。 JGit 是否具有 escape/replace/strip 无效字符的功能?
更新 2017-01-27:因为 this commit 有一个静态方法 Repository::normalizeBranchName()
转义给定的字符串以形成有效的引用名称和returns吧。更改将与 JGit v4.7.
对于早期版本的 JGit,必须手动对名称进行转义。
使用 Repository::isValidRefName()
您可以确定给定的字符串是否是有效的 Git 引用名称。 documentation for git check-ref-format 详细描述了有效的 ref 名称必须遵守的规则。
我在一个用下划线替换所有可疑字符的项目中使用这个方法(可能有一些不准确):
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;
}