ошибка: не удается получить linaro-swg / arm-trust-firmware.git

Удивительно, насколько сложно найти идеальное решение этой проблемы. Я еще не нашел ответа на этой странице, который не сработает, по крайней мере, в некоторых ситуациях (особенно если строка содержит символы новой строки или вкладки, или если слово break является чем-то другим, кроме пробела, или если строка имеет UTF- 8 многобайтовых символов).

Вот простое решение, которое работает во всех случаях. Здесь были похожие ответы, но модификатор «s» важен, если вы хотите, чтобы он работал с многострочным вводом, а модификатор «u» позволяет корректно оценивать многобайтовые символы UTF-8.

function wholeWordTruncate($s, $characterCount) 
{
    if (preg_match("/^.{1,$characterCount}\b/su", $s, $match)) return $match[0];
    return $s;
}

Один возможный краевой случай с этим ... если строка не имеет пробелов вообще в первых символах $ characterCount, она вернет всю строку. Если вы предпочитаете, чтобы он задерживал разрыв в $ characterCount, даже если он не является границей слов, вы можете использовать это:

function wholeWordTruncate($s, $characterCount) 
{
    if (preg_match("/^.{1,$characterCount}\b/su", $s, $match)) return $match[0];
    return mb_substr($return, 0, $characterCount);
}

Последний параметр, если вы хотите, чтобы он добавлял многоточие, если он обрезает строка ...

function wholeWordTruncate($s, $characterCount, $addEllipsis = ' …') 
{
    $return = $s;
    if (preg_match("/^.{1,$characterCount}\b/su", $s, $match)) 
        $return = $match[0];
    else
        $return = mb_substr($return, 0, $characterCount);
    if (strlen($s) > strlen($return)) $return .= $addEllipsis;
    return $return;
}
1
задан Xinyao Li 2 March 2019 в 02:39
поделиться

1 ответ

Как сказано в H. Блог Mijail , в repo sync --force-sync перезаписывает ваш существующий репозиторий! :

Похоже, что репозиторий отслеживает репозитории, которые он инициировал.
Поэтому, если вы создали хранилище независимо от репозитория, а затем добавили запись для этого существующего репозитория в манифест репо, синхронизация репозитория захлебнется и представит вам сообщение:

error.GitError: --force-sync not enabled; cannot overwrite a local work tree. If you're comfortable with the possibility of losing the work tree's git metadata, use `repo sync --force-sync mydirectory` to proceed.

Получается, что «метаданные git» "означает весь каталог .git внутри mydirectory.
Таким образом, любая ветка, любой тайник, что-либо в вашем существующем локальном хранилище будет уничтожено. Также не используйте reflog!

Как только вы запустите repo --force-sync, репозиторий будет принят репо на дальнейшие вызовы синхронизации репо.

Альтернативой использованию --force-sync могло бы быть использование --force-break (или просто -f), которое просто происходит, когда какой-либо каталог не синхронизируется.
Но я не пытался, и я не знаю, как это могло бы иметь смысл, если бы мы предположили, что репо не попадает в каталог, который он не создал.

В любом случае ... сначала сделайте резервную копию вашего локального репо!

0
ответ дан VonC 2 March 2019 в 02:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: