Удивительно, насколько сложно найти идеальное решение этой проблемы. Я еще не нашел ответа на этой странице, который не сработает, по крайней мере, в некоторых ситуациях (особенно если строка содержит символы новой строки или вкладки, или если слово 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;
}
Как сказано в 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
, репозиторий будет принят репо на дальнейшие вызовы синхронизации репо.Альтернативой использованию
blockquote>--force-sync
могло бы быть использование--force-break
(или просто-f
), которое просто происходит, когда какой-либо каталог не синхронизируется.
Но я не пытался, и я не знаю, как это могло бы иметь смысл, если бы мы предположили, что репо не попадает в каталог, который он не создал.В любом случае ... сначала сделайте резервную копию вашего локального репо!