2016-06-30 2 views
2

При использовании установить имя ветви с недопустимыми символами (обведенный here) следующим образом:JGit поддержки, чтобы избежать имен ветвей

git.checkout().setName("......my:bad:branch:name") 

он генерирует ошибку GIT низкого уровня.

В идеале я мог бы избежать кодирования этих недопустимых символов в моем коде напрямую. Имеет ли JGit какие-либо функциональные возможности, чтобы избежать/заменить/стянуть недопустимые символы?

+0

@ RüdigerHerrmann я в конечном итоге подать запрос на функцию с jgit [# 497123] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=497123), в котором указан ваш ответ. –

ответ

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; 
} 
Смежные вопросы