Откатываемся к нужной версии StableDiffusion
Последнее время реализация веб-интерфейса от AUTOMATIC1111 была слишком не стабильной
(сказался глобальный переход фреймворка gradio на версию 3.23 ), в связи с этим рассмотрим один из вариантов(в этом посте) как сохранить нервы и работоспособный инструмент.
Предполагаем переустановка с нуля не решила ваши проблемы. И рассматриваем мы это все с позиции "без опыта", Тех, кто не работает с git/github/cmd/python на постоянке.
Приступаем консоль+git:
• На сайте AUTOMATIC1111 мы можем посмотреть и почитать описание обновлений :
• Теперь выбираем необходимый коммит, нигде не будет указано что этот рабочий, а этот нет :
Описание коммита (кратко в чем изменения)
Непосредственно (hash) уникальный номер (он больше чем виден)
кнопка скопировать hash
• Просто перебираем, спрашиваем у сообществ или знакомых - у кого есть рабочий "номер"(Внизу сайта SD запущенный hash, лучше просите ссылку)
• Предполагается вы уже запускали свою версию SD и вопросы установки с нуля в этом посте не разбираем - и смогли попасть на главую страницу webui.
• Из проводника запускаем командную строку(SD конечно выключили) :
Делать это удобнее всего из папки <путь_к_вашему_SD>
В проводнике пишем CMD и нажимаем enter
Теперь самая магия :
• Вводим команду git log -1 она покажет информацию о текущем коммите, можно узнать с каким коммитом мы сейчас работаем :
• Затем, имея нужный коммит, вводим команду git checkout <hash>:
• Переключились на желаемое состояние, теперь можем снова запустить SD и посмотреть насколько все хорошо работает.
• Всегда можно вернуться на самый свежий коммит(локально у вас) : git checkout master
• А так же команда проверить обновления на сайте github : git pull
Эта информация как раз говорит что у нас все свежее (но не факт что рабочее)
PS длинна поста расчитана на не опытных пользователей git/cmd , уточнения и вопросы можно задать в комментариях.
PS Спасибо тем кто смог до конца, рекомендую 2 сообщества для обмена информацией о SD и других нейронках :
Discord
GitLab: склонировать список репозиториев
Решил слегка “причесать” и обобщить свой опыт по этому вопросу. Чтобы удобней было пользоваться, как этакой краткой инструкцией, а не искать разрозненные ответы на SO и т.п.
Задача проста – сделать удобно.
Взять GitLab (много где используется, как self-hosted) и выкачать с него все репозитории проекта. Чтобы можно было локально работать с ними, не загружая каждый отдельно.
Обновлять эти репозитории одной командой
Загрузка списка репозиториев с GitLab
Тут всё несложно – надо получить сам список и по нему всё скачать. Удобнее это делать с использованием ssh ключа (добавляется в GitLab через веб-интерфейс). Но можно и git credentials включить. Сам список достаточно просто в браузере открыть и сохранить projects.json (название по умолчанию).
Список репозиториев: https://your-gitlab-host/api/v4/projects?per_page=1000
Или список для группы проектов: https://your-gitlab-host/api/v4/groups/{group-id}/projects?per_page=1000
group-id можно тоже через веб-интерфейс посмотреть, примерно так:
Выкачать (в текущий каталог) репозитории по списку из файла: jq -r '.[].ssh_url_to_repo' < /path/to/projects.json | xargs -n1 git clone. Можно аналоги утилиты jq использовать, мне она привычней.
Если авторизация по ssh-ключу не настроена – придется из json вместо поля ssh_url_to_repo извлекать поле http_url_to_repo. Можно хранить логин/пароль для GitLab в ~/.git-credentials (там они лежат в открытом виде!).
Первая часть на этом закончена. На очереди – обновление репозиториев.
Обновление списка репозиториев
Здесь всё ещё проще – достаточно одной команды. Перейти в каталог со склонированными репозиториями и выполнить:
find . -type d -name '.git' \
| xargs -n1 -- sh -c \
'cd "${0}/.." && echo \
&& basename -sa $(git rev-parse --show-toplevel) \
&& git pull --all'
Найдёт все каталоги с директорией .git внутри (а это и есть репозитории) и обновит их через git pull --all. Соответственно, каталоги, не являющиеся репозиториями, будут проигнорированы.
Git config с разделением по проектам
Возникла потребность настраивать по-разному конфиги гита для разных проектов (email контактный поменять, хотя бы, или хук на прогон тестов повесить).
Ну и понятно, что как-то эти конфиги подкладывать туда-сюда – не слишком увлекательно. К счастью, в свежих версиях гита – есть инклюды. В том числе – по условию – includeIf. Вот ими и стоит воспользоваться.
Основной конфиг git
Общая концепция такова – в основном конфиге ~/.gitconfig – перечислить (под условиями) конфиги “зависимые”, а все специфичные настройки прописать уже в них. Ничего экстраординарного, в общем.
Примерно вот так у меня это выглядит, по условию включается конфиг из файла gitconfig-project-1:
[user]
name = Dmitry
email = dimio@dimio.org
[includeIf "gitdir:~/project-1/repos/"]
path = ~/.config/git/gitconfig-project-1
Важный момент – директорию после gitdir: нужно указывать без отделения пробелом.
Вложенный конфиг git
А вот так – выглядит сам файл ~/.config/git/gitconfig-project-1
[user]
email = dmitry@dimio.org
[core]
hooksPath = ~/.config/git/hooks/
autocrlf = input
sshCommand = "ssh -F ${HOME}/.ssh/config-project-1"
Тут уже как раз и переопределены email, хуки (для этого проекта активирован автопрогон тестов в pre-push хуке) и конфиг ssh (там специфические настройки для доступа к репозиторию по ключу).
Разделение credentials
Раз уж зашла речь о разделении конфигов и о доступе – можно сразу настройки доступа по http(s) разбить немного.
Включаются они так: git config --global credential.helper store. И после этого лежат в ~/.git-credentials в открытом виде!
Разделить их для разных репозиториев внутри одного хоста – можно так (на примере github): git config --global credential.github.com.useHttpPath true
И тогда в .git-credentials будут отдельные записи лежать:
https://<USERNAME>:<PASSWORD>@github.com/path/to/repo1.git
https://<USERNAME>:<PASSWORD>@github.com/path/to/repo2.git
Но, безусловно, удобней (да и безопасней, пожалуй) – пользоваться доступом с ssh ключами.
Поиграем в бизнесменов?
Одна вакансия, два кандидата. Сможете выбрать лучшего? И так пять раз.