Обновление 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;
}
@ RüdigerHerrmann я в конечном итоге подать запрос на функцию с jgit [# 497123] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=497123), в котором указан ваш ответ. –