Как переключить ветку в git не используя stash?

Обычно, если нам что-то срочно нужно поправить в другой ветке, и вернуться к работе в текущей, мы должны получить

Иногда срочно необходимо поработать в другой ветке, и вернуться к работе в текущей, то стандартный сценарий таков: прячем изменения (stash) и переключаем ветку, затем пушим изменения и возвращаемся к исходной ветке. Изменения working copy восстанавливаем из stash.Происходит такой набор действий.

Мало кто знает, но с Git 2.5, доступны множественные рабочие деревья — multiple worktrees. Это значит, что в локальном репозитории ветки доступны для параллельного chekout. Можно одновременно работать в master и develop ветке, не переключать ветки через stash, что экономит время и нервы. Пример: репозиторий клонируется в две папки, в одной — работаем с master, в другой — работаем с develop. После работы — пушим, удаляем ненужную папку.

Каждый раз делать такое утомительно. Поэтому в git появилась поддержка подобного поведения в виде команды worktree. Команда worktree add создает папку, автоматически делает в неё chekout нужной ветки.

Приведу пример: мы работаем в ветке feature1, нам нужно переключиться на ветку feature2, чтобы завершить работу внезапно заболевшего коллеги.
Структура папок изначально такая.

  • my-project
    • .gitignore
    • MyProject
      • Program.cs
    • MyProject.sln

После выполнении команды

добавляется папка feature2 под новую ветку feature2:

  • my-project
    • .gitignore
    • MyProject
      • Program.cs
    • MyProject.sln
  • feature2_hotfix
    • .gitignore
    • MyProject
      • Program.cs
    • MyProject.sln

Можем открыть папку в IDE и начать работать, либо перейти в папку в консоли: git cd ../feature2_hotfix

Когда работа завершена, можно просто удалить ненужную папку, очистить git от ненужной ссылки на ветку командой
git worktree prune или же удалить встроенной командой git worktree remove ../feature2_hotfix

Очень удобно откалывать ветку в отдельную папку такой командой:

Эта команда откалывает новую ветку some-hotfix от master и создает для нее папку hotfix-01, где можно независимо работать, достаточно перейти в нее командой cd ../hotfix-01 или pushd

Список всех подключенных worktree можно посмотреть командой git worktree list.

Ссылка на документацию: https://git-scm.com/docs/git-worktree

Не работает VPN через OpenWRT

Оказалось, что Vpn подключение из Windows или Linux по умолчанию не будут работать через роутер прошитый OpenWRT.
Однако, для этого нужно всего лишь поставить нужный модуль через opkg
Подключаемся к роутеру через ssh.
Обновляем пакеты.
opkg update
Для версии OpenWRT (Chaos Calmer 15.05) и выше, ставим
opkg install kmod-nf-nathelper-extra
Для более ранних версий (14.07) ставим
opkg install kmod-ipt-nathelper-extra
Перезагружаем роутер и пробуем подключится.

Чем парсить сайт на PHP?

Была задачка распарсить пару страниц сайта.
Я давно не пишу на php, и столкнулся с проблемой выбора библиотеки.
Наиболее популярная по мнению «уважаемых» разрабов была одна старая и вроде бы проверенная временем SimpleHtmlDom — она умела все что мне нужно (манипуляции с DOM). Но не используйте её никогда!
Утечки памяти, невозможно долгое время выполнения даже __destruct, и прочий лютый пипец. Отказался от нее. И ссылку на нее не дам. И если где увидите её упоминание — минусуйте :).

Неплохо себя зарекомендовала nokogiri. Но она не умела нужные DOM манипуляции.
Затем я выяснил, что есть хорошая либа от Symphony2 — Dom Crawler. Неплохо, но не было опять нужных манипуляций с DOM.

Случайно набрел на HtmlPageDom и это надо сказать, дико удобная либа, которая умеет все что надо. Проект построен на базе Symphony2\Dom Crawler и поэтому работает как надо ). Очень рекомендую.

Как обновить Ubuntu Bash до версии 16.04

Обновите систему до Windows 10 Creators Update.
Затем в консоли:
удаляем струю версию Ubuntu Bash

и устанавливаем новую

проверяем версию релиза

При удалении старой версии удаляется все, что было установлено в 14.04. Все пакеты придется устанавливать заново.

Побеждаем dotnet.exe : No executable found matching command «dotnet-ef»

Почему так происходит? В интернете, в том числе на StackOverflow я встречал много вопросов, почему вдруг при переходе на dotnet core перестали работать миграции. Одн из неочевидных причин — в новой версии фреймворка поменялась структура проектов.
Команду миграций нужно запускать не из корня проекта, а из папки src/ИмяПроекта
Короче говоря — из той папки где лежит папка bin и project.json
Если мы пытаемся запустить миграции из консоли VisualStudiо, то по умолчанию она запускает консоль в корне проекта (там где файл солюшена).
Нужно спуститься глубже:
cd ./src/ИмяПроекта
После чего попробуйте запускать команды dotnet core.
Если не помогло — проверьте наличие EF Tools в project.json:

.NET Core в Arch Linux: как установить и настроить

Летом 2016 года Microsoft зарелизила новую платформу open source .NET Core. Она позволяет запускать .NET приложения (в т.ч. MVC Web), написанные под нее, на разных платформах, в том числе и на Linux. В этой статье я покажу как установить эту платформу на Arch Linux, поставить IDE и запустить «HELLO WORD!».

Вариант первый — скачиваем и устанавливаем исходники.

Ставить будем на свежую систему с XFCE4, установленными base и base-devel пакетами.

1. Поиск пакета.
Так как пока у нас нет готового пакета c dotnetcore-cli в pacman (2017 год) то бежим в AUR и смотрим что там есть. Есть вот такой пакет https://aur.archlinux.org/packages/dotnet-cli/
Попробуем его поставить.
Для этого скачиваем исходник через git:

Заходим в папку со скачанными исходниками:

и пытаемся собрать утилитой makepkg

Сразу ничего не получается, так как pacman не может установить зависимости (возможно в текущей версии уже исправили):
icu52 и lttng-ust

Они живут в AUR.

Создаем папку для исходников icu52, скачиваем туда дистрибутив и собираем через makepkg:

После чего должна собраться эта библиотека и установиться.
Параллельно качаем и собираем lttng-ust:

Что еще нужно для работы? Я бы посоветовал поставить редактор Visual Studio Code.
Как всегда, скачиваем из AUR и собираем:

Дальше осталось проверить работоспособность того, что мы наустанавливали

Делаем тестовый проект:

Как починить dotnet restore Failed to download package from…

Столкнулся с проблемой на Windows 7 x64, в Visual Studio 15 при попытке загрузки пакетов загрузка зависает, и в итоге фелится.
Если запустить восстановление пакетов вручную, из консоли: dotnet restore,
то через некоторое время мы получим ошибки получения пакетов, например:

Долго искал как исправить:
— рылся в файрволе
— рылся в конфиге VS
— рылся в конфиге NuGet
— читал Stackoverflow

Последний пункт помог )
Выяснил, что нужно отключить Virtual Box Host Only соединение в настройках сети!
Панель управления\Сеть и Интернет\Сетевые подключения
Вот так-то. Пользователям Virtual Box досталось ).
Это проверенный способ.
Что было найдено еще:
удалить
%TEMP%\NugetScratch

В итоге, всё обсуждение здесь:
https://github.com/dotnet/cli/issues/1732 (Англ.)

Ушел с Jino…

Ушел с Jino. И не жалею. Весь функционал Jino мне не нужен. Нужно было что-то удобное гибкое и современное, для маленьких проектов и блога. C хорошим аптаймом и расширяемое не такими большими шагами как Jino. Выбор пал на Beget.

Особенности mongodb импорта через mongoimport (DateTime)

Для импорта csv и json существует прекрасная утилита mongoimport. Она позволяет весьма быстро загружать файлы в mongodb (быстрее чем через bulk insert). При этом, mongoimport умеет использовать заголовки столбцов. Но, как всегда mongo подкинуло неприятный сюрприз. Все создаваемые поля имеют тип string. Т.е. импортировать int, ISODate она не умеет. Преобразовывать внутри БД, это очень долго (по сравнению с bulk insert). Получается, что mongoimport — шустрая но не очень полезная утилита.
P.S. В issue трекере разработчиков был таск по поводу добавления в mongoimport функционала. Пока не ясно, когда это будет имплементировано, что печалит.

Особенности mongoDB — грабли на которые я наступил

Решил на проекте использовать mongoDB 3.0. Плюсов много — работает быстро, доступный синтаксис команд, много чего имеет в движке, например, работать с геоданными, шардинг и все такое. Но я натолкнулся и на подводные камни — размер BSONDocument коллекции возвращаемых различными операциями, кроме find(), составляет не более 16Мегабайт — пруф: maximum BSON document size (англ).

Таким образом, мы не можем получить сразу результат объемной агрегации — размер не позволяет — результат нужно через out сохранять в отдельной коллекции.

А методы, не имеющие возможность сохранять коллекцию через out — например distinct() — просто вызывают ошибку. Поэтому disctinct() мне пришлось реализовать через MapReduce. То есть, в попытке реализовать SELECT * IN ()  пришлось городить довольно сложный велосипед, чтобы обойти ограничения на размер данных в 16Мб ).

Если используются типизированные коллекции, в супер больших объемах данных, позаботитесь о BIGINT заранее, иначе mongoDB позаботится об этом сама, и вызовет исключение.

Такие дела.

Яндекс.Метрика