При wo update WordOps иногда падает с traceback Python. Одна из частых причин – файл /root/.gitconfig, который читает configparser, а в секции [safe] ключ directory указан дважды:
configparser.DuplicateOptionError: While reading from '/root/.gitconfig' [line 6]: option 'directory' in section 'safe' already exists
Для самого Git несколько safe.directory – нормальная практика. Для стандартного configparser в Python повтор одного и того же option name в секции – ошибка. WordOps (или его зависимости) спотыкается об этот файл, и обновление обрывается.
Что сломано
DuplicateOptionError значит: при разборе INI-подобного конфига встретился дубликат опции. В сообщении прямо указаны файл, секция и имя ключа – /root/.gitconfig, [safe], directory. Пока парсер не сможет прочитать файл, команда, которая его трогает, не пойдёт дальше.
Исправление
1. Откройте .gitconfig
nano /root/.gitconfig
2. Найдите дубликаты directory
Типичный фрагмент:
[safe]
directory = /some/path
directory = /another/path
Именно второй (и последующие) directory = ... в одной секции ломают configparser.
3. Оставьте совместимый вариант
Минимальный фикс – одна строка directory (та, которая реально нужна root-у):
[safe]
directory = /some/path
Сохранение в nano: Ctrl+O, Enter, выход – Ctrl+X.
Если безопасных каталогов много, для Git их можно вести иначе (отдельные include-файлы, или не класть multi-value в тот .gitconfig, который читает Python). Главное для wo update: файл, который парсит configparser, не должен содержать повторяющихся имён опций в одной секции.
4. Повторите обновление
wo update
Если traceback исчез – причина была в .gitconfig. Если ошибка другая, смотрите уже следующий кадр стека (сеть, pip, права, lock).
Запасной путь: временно убрать конфиг
Если править лень и в .gitconfig нет критичных настроек (user, credential, url.*), можно отложить файл в сторону:
mv /root/.gitconfig /root/.gitconfig.bak
После успешного wo update верните нужные директивы из бэкапа без дубликатов option names. Не удаляйте файл вслепую на машине, где root-git ходит в private repos по token/ssh из этого конфига.
Как не словить снова
- не копировать куски
[safe]с несколькимиdirectoryв .gitconfig, если этот файл читают скрипты на configparser; - перед массовыми правками конфигов – копия (
cp .gitconfig .gitconfig.bak); - после ручных правок git-конфигов прогонять
wo/wo updateна staging или хотя бы сразу после изменения, пока контекст свежий.
Кратко
DuplicateOptionError при обновлении WordOps почти всегда = дубликат ключа в INI, который читает Python. В кейсе из traceback – directory в [safe] внутри /root/.gitconfig. Убрать повторы (или временно отложить файл), снова wo update.


