среда, 27 июля 2016 г.

Git - минимизация merge-commit'ов в master

У нас небольшая команда разработки и, зачастую, мы правки делаем прямо в master.
В среднем у нас 16 commit'ов в день (от 1 до 45), поэтому периодически сталкиваюсь с тем, что кто-то за'push'ил в мастер в центральный репозиторий одновременно со мной, а я забыл с'pull'иться перед своим commit'ом. После слияния веток возникают грязные commit'ы вида:

845f25b 2016-07-26 (Some User) -  Merge branch 'master' of github.com:Company/repository

Чтобы избегать commit'а в мастер, когда в центральном репозитории кто-то что-то поменял, можно использовать hook на pre-commit:

cat .git/hooks/pre-commit

#!/bin/sh

red="\033[01;91m"
green="\033[01;32m"
reset="\033[0m"

branch=`git rev-parse --abbrev-ref HEAD`
if [ a$branch == amaster ]
then
git fetch origin master >/dev/null 2>&1
local_commit=`git rev-parse --verify HEAD`
origin_commit=`git rev-parse --verify origin/master`
#if [ a$local_commit != a$origin_commit ]
if ! git log | grep -qs $origin_commit
then
echo
echo "${red}origin/master ушел вперед.${reset} Сделай сначала: ${green}git pull origin master${reset}"
echo
exit 1
fi
fi
exit 0

Надо отметить, что такой подход не гарантирует отсутствие merge-commit'ов, но если все свои изменения сразу после commit'а push'ить в центральный репозиторий, то таких ситуаций будет крайне мало.

понедельник, 18 января 2016 г.

Как склонировать SD-карту под Mac OS X

Возникла задача, нужно сделать 6 клонов для одной SD карты.

Нашел в сети описание, как склонировать SD-карту под Mac OS X.

sudo dd if=/dev/disk2 of=/Users/ruzin/raspberrypi.dmg
sudo dd of=/dev/disk2 if=/Users/ruzin/raspberrypi.dmg

Процесс занял нереальное время (я даже не дождался создания первого дубликата - прервал через 45 минут). В моем случае скорость копирования с диска на карту составляла 1 Мбайт/с. Потом нашел способ, как поднять скорость в 13 раз (до ~13 Мбайт/с): 

Процедура:

  1. Вставляем исходную карту и делаем копию образа к себе на диск:

    sudo dd if=/dev/rdisk2 of=/Users/ruzin/raspberrypi.dmg bs=1m
  2. Перед заменой карты отмонтируем ее от файловой системы:

    diskutil unmountDisk /dev/disk2
  3. Вставляем пустышку (она автоматически монтируется) и отмонтируем ее:

    diskutil unmountDisk /dev/disk2
  4. Копируем на нее образ (и отмонтируем перед вытаскиванием):

    sudo dd of=/dev/rdisk2 if=/Users/ruzin/raspberrypi.dmg bs=1m
    diskutil unmountDisk /dev/disk2

Копия диска заняла ~10 минут для карты размером в 8GB.