Сжатие истории репозитория GIt

Удаленные серверы Git, как правило, накладывают ограничения на размер репозитория. И со временем возникает необходимость очистки истории от коммитов с большими файлами.

По материалам статьи на сервисе Bitbucket

Удобнее воспользоваться скриптом BFG, правда он требует наличия установленной среды исполнения java , которая устанавливается достаточно легко.

Перед манипуляциями рекомендуется сделать копию репозитория

$ git clone --mirror git://example.com/some-big-repo.git

И после установки java-runtime можно начинать

Я переписал скрипт bfg.jar в каталог репозитория и выполнил команду

java -jar bfg.jar --strip-blobs-bigger-than 100M .

Точка сообщает скрипту, что репозиторий находится в текущем каталоге

Кроме всего прочего скрипт выдал следующую информацию о найденных и удаленных из истории файлах:

Deleted files ————- Filename Git id ————————————————— arduino-1.8.10-windows.zip | 645824b8 (198,0 MB) arduino-1.8.8.zip | 2143574c (179,0 MB) arduino-1.8.9-linux32.tar.xz | 36b63692 (118,4 MB)

Однако, скрипт не удаляет эти данные из истории физически, чтобы перестроить индексы git и «собрать мусор», нужно выполнить в консоли git:

$ cd <каталог репозитория>
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive

И затем:

$ git push --all --force

для отправки произведенных изменений на сервис Git

Создание удаленного репозитория из папки проекта с помощью Git

Создание удаленного репозитория из папки проекта с помощью Git

Загрузка и установка клиента Git

Предпочитаю portable версии программ, это касается и клиента Git. Его можно найти на просторах, или взять здесь. Пароль к архиву 12345. Нужно просто скачать и распаковать архив в каталог диска по желанию.

Я держу portable версии программ на d:/admin/prog и при загрузке новых обновляю этот каталог на «покете», так что самое нужное всегда с собой.

Распаковываем, например, в d:/admin/Prog/GitPortable

Смотрите, чтобы не получилось d:/admin/Prog/GitPortable/GitPortable/ 🙂

В итоге, если все сделано аккуратно, версия программы с графическим интерфейсом расположится в каталоге D:\admin\Prog\GitPortable\GitPortable.exe

А лучший в мире вариант с управлением из командной строки — в D:\admin\Prog\GitPortable\App\Git\git-bash.exe и можно просто сделать ярлык на запуск на рабочем столе.

Выделить файл git-bash.exe в проводнике и с нажатой правой кнопкой мыши потащить на рабочий стол и бросить. Появится контекстное меню — выбрать Создать ярлык.

Однако…

Результат выполнения команды dir
Результат выполнения команды dir

То есть, текущим в bash консоли Git оказался каталог самой программы, а для работы нам нужно, чтобы текущим был локальный каталог нашего будущего репозитория  (папка нашего проекта).

Немножечко командной строки

Переходим куда нужно, например, наш проект находится в d:/repo/1sprog, тогда вводим команду

cd d:/repo/1sprog

Если путь содержит пробелы, то его нужно заключить в двойные кавычки, например,

cd «d:/Моя любимая папка/1sprog»

Чтобы не вводить команду выше, а после запуска сразу «оказаться» в нужной папке, можно поправить  параметр Рабочая папка нашего ярлыка для git-bash.

Свойства ярлыка git-bash
Свойства ярлыка git-bash

Посмотрим что есть в этой папке проекта с точки зрения git

Вводим команду dir

dir

У меня тут вот что

Результат команды DIR
Результат команды DIR

И вот какая штука. При создании репозитория в этой папке, если не предпринимать никаких мер, по-умолчанию в него будут включены все имеющиеся в папке проекта подкаталоги и файлы. Соответственно, они все будут затем перенесены в удаленный репозиторий и будут реплицироваться при каждой синхронизации. Если интернет мобильный, то чем меньший объем проходит по каналу связи, тем лучше!?.

Например, мы видим на предыдущем рисунке файлы, которые являются побочным результатом компоновки и компиляции программы — это файлы *.obj, *.map и, по большому счету *.hex (исполняемый файл, в данном случае прошивка для контроллера). И есть только пара файлов, которые действительно ценны —   7segement.asm и 7segement.inc

Более того, на удаленном сервере совершенно нечего делать файлу passwords.txt

Исключение некоторых файлов — файл .gitignore

Точка в имени файла присутствует в самом начале, это не опечатка!

Для моего примера содержимое файла .gitignore может быть таким:

.idea/

*.obj

*.map

*.hex

passwords.txt

Каталог .idea/ исключается весь, такой знак подает клиенту git наклонная черта сразу в конце имени каталога, без пробела. Этого каталога не было в выводе по команде dir, это каталог, к котором среда разработки (в данном случае PhpStorm) хранит свои временные и настроечные файлы для данного проекта. Он совершенно не нужен никому на сервере Git, даже мне — исключаем весь.

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

Каждое исключение должно располагаться на новой строке.

Сделать можно в Блокноте, а потом при «сохранении как…» в нашу папку проекта дать имя .gitignore, при этом не забыв выбрать тип файла «все файлы», иначе блокнот «приклеит» расширение TXT.

Создание .gitignore
Создание .gitignore
Минуточку терпения, почти все готово!

К стати, когда надоедят танцы с проводником Windows, блокнотом и прочими бубнами можно поставить Far manager и жить станет проще, жить станет веселей!

Я брал стабильную сборку, MSI-пакет установки.

Инициализация репозитория

Есть замечательная статья по основным командам git, который автор cyberspacedk назвал шпаргалкой, но, на мой взгляд, там есть все, что нужно. Но все же пробежимся по порядку, поскольку новичку не все так очевидно как бывалому.

Прим. Все команды выполняются в консоли git-bash

1) Инициализация локального репозитория:

git init

Все проходит «молча», но положительный результат виден по появлению скрытого подкаталога .git в текущей папке. Чтобы включить показ скрытых файлов и папок в проводнике Windows, нужно включить следующие опции в пункте меню Вид (скрин из 10 версии Винды). За одно включим и показ расширений, тоже удобная вещь.

show-hidden-files
show-hidden-files

В Far manager переключение видимости скрытых файлов и папок происходит по Ctrl-H

2) Создание абсолютно пустого (без readme, без .gitignore) репозитория на bitbucket.org через веб-сайт
Создание нового репозитория на bitbucket
Создание нового репозитория на bitbucket
АБСОЛЮТНО пустого
АБСОЛЮТНО пустого

у меня последний экран выглядел так

Создан абсолютно пустой репозиторий
Создан абсолютно пустой репозиторий
3) Далее — подключение удаленного репозитория к локальному

Все, что написано далее, не учитывает нюансов, которые добавляются при использовании Линукс и/или стороннего хостинга (мне не удалось подключиться по https). В личном профиле на bitbucket в разделе ssh-ключей имеется ссылка на подробнейшую инструкцию как организовать подключение по ssh.

Строка адреса (https://mickle-iv@bitbucket.org/mickle-iv/1sprog.git) взята из формы, выданной bitbucket в результате создания репозитория.

git remote add origin https://mickle-iv@bitbucket.org/mickle-iv/1sprog.git

4) Добавляем файлы проекта в индекс (между add и точкой —  пробел)

Перед добавлением можно дать git status и посмотреть какие файлы клиент git предложит добавить. Посмотрите, в этом списке не должно быть файлов и папок, указанных в .gitignore

Прим. Между add и точкой есть пробел

git add .

5) Делаем коммит

git commit -m ‘My initial commit’

Дальше нужно сделать первый push и тут возникло 2 варианта, я использовал первый вариант, предложенный bitbucket

1 вариант от bitbucket.org

git push -u origin master

 

2. вариант, предложенный самим клиентом git

git push —set-upstream origin master

И вуаля!

success
success

 

Если постигла неудача при инициализации и увязке локального и удаленного репозиториев — не беда. Просто сносим локальный подкаталог .git в нашей папке проекта на фиг (для уверенности можно снести и создать заново новый пустой репозиторий на bitrbucket.org) и аккуратно повторяем все операции, начиная с пункта 1) раздела «Инициализация репозитория».

Как удалить репозиторий на bitbucket:

Удаление репозитория на bitbucket.org
Удаление репозитория на bitbucket.org

Как именуют потомков старообрядцев в Забайкалье?

Некоторые группы русского народа связаны с историей старообрядчества. В Поволжье – это кержаки и кулугуры, в Ставрополье – некрасовцы. Как именуют потомков старообрядцев в Забайкалье?

А. Духоборы
Б. Семейские
В. Молокане
Г. Субботники

ссылка на ответы

Живу я тут — в Забайкалье. Во мне самом, на одну четверть бежит кровь тех самых старообрядцев Забайкалья. Пришли они на эту землю очень давно, в восемнадцатом веке. И пришли не по своей воле, их сослали из западной части России, и Белоруссии (ныне) Часть из них были раскольниками.

Самыми лучшими старателями были они в Сибирской земле, знали толк в поиске золотых жил, где и как мыть золото. И до сих пор эти знания передаются по наследству.

Многие из них имели знания в магии — заговоры, колдовство, ворожба. Из них выходили знахари и лекари.

Местные жители Забайкальской земли, это на тот момент были в основном буряты, эвенки, монголы (кочевой народ) глядя на этих пришлых отмечали у них особенность отличную от одиноких катаржан-ссыльных, они приходили большими семьями с пожитками, поэтому и дали им название семейские.

Вот и я получился на четверть семейский, колдун и старатель..)

А знаете довольно интересная культура у семейских чистокоровок, это в основном уже старики. По натуре очень добрые, но себе на уме. Вот попросит прохожий у селянина-семейского воды попить — не откажут ни когда, но тару с которой тот пил, обратно в свой дом не занесут — выбросят…)

«Правильный старт» и стоп: шаговый двигатель 28BYJ-48 + ULN2003 (видео)

Ссылка: Шаговый двигатель 28BYJ

Читать описание «Правильный старт и стоп: шаговый двигатель 28BYJ-48 + ULN2003» на efe.su

 

NanoShield1 — простенькая самодельная плата для удобства работы с контроллером Arduino Nano

Вот такой самодельный «NanoShield1» для удобства работы с Arduino Nano:

с одной стороны — надежное крепление проводников к выводам контроллера, с другой — возможность быстро снять контроллер для перепрограммирования или использования в другом проекте (особенно полезно, когда внутрисхемное программирование невозможно из-за использования в проекте штатных выводов Tx/Rx контроллера).

Кроме того, в случае простой сборки, можно выполнить соединения без макетной платы, что очень удобно, когда сборку нужно носить с собой (провода не отваливаются при транспортировке).

Для сборки использовал:

1) Макетную плату под пайку, они на просторах интернета присутствуют в нескольких вариантах размеров с шагом отверстий 2.54 мм. У меня под рукой оказалась 50х70 мм,

Макетная плата 50х70 мм
Макетная плата 50х70 мм

но немного не хватило длины (лучше взять 50х90), тогда клеммники нормально влезут вдоль длинной стороны. А мне пришлось часть клеммников поставить по короткой стороне платы (на торец).

2) Клеммник XY301V-A-3P (2P) — последнее означает количество контактов и, в данном случае, большого значения не имеет, поскольку эти клеммники стыкуются между собой, образуя единый ряд.

3) Гнезда на плату, однорядные, прямые (PBS — заъем) — нужно 2 шт по 15 контактов. Я нашел только по 16 контактов в продаже. И еще «вляпал» на 27-30 выводы (+5В, reset, ground, Vin) дополнительный 4-контактный разъем. Этот дополнительный разъем поставил для дополнительного удобства:

— размножать питание «+5В» и «землю», которые берутся с контроллера;

— быстро подвести внешнее питание при необходимости и т.п.

В итоге контакты PBS — разъема (читай — выводы микроконтроллера) соединены параллельными проводами с клеммами на периферии платы для крепления «под отвертку».

NanoShield1 вид без контроллера
NanoShield1 клеммники расположены на периферии платы
NanoShield1 схема соединений
NanoShield1 схема соединений

Правда, как я уже писал, из-за малого продольного размера платы выводы D10-D12 пришлось завернуть на торец. А также «вывеcти» с другого торца  «землю», «reset»  и внешнее питание («Vin»).

Правильный старт и стоп: шаговый двигатель 28BYJ-48 + ULN2003

Как быстро проверить товар с aliexpress: редукторный шаговый двигатель 28BYJ-48 с драйвером ULN2003 с помощью arduino nano и arduino ide

Коротко о главном

Товар пришел (28BYJ-48 + ULN2003), надо же проверить! Стандартная библиотека Stepper.h и примеры, которые присутствуют в Arduino IDE, повели себя странно: двигатель не развивает мощности, крутится в одну сторону не взирая на команды смены направления вращения. Хотел уже продавцу писать, но попробовав другую библиотеку Accel Stepper, выяснил, что оборудование ни при чем!

Библиотеку брал здесь — выбрал последнюю версию (1.59.0).

Далее, если интересно

Читать далее «Правильный старт и стоп: шаговый двигатель 28BYJ-48 + ULN2003»