Пятница, 7 декабрь 2012
Это очень просто:
git config --global --add color.ui true
Эта инструкция добавит глобальную настройку в ваш конфигурационный файл
~/.gitconfig и сделает вывод цветным для всех операций со всеми вашими репозиториями.
Это я нагуглил и решил записать. А то голова как унитаз..
И раз пошла такая пьянка..
# установить имя пользователя для всех своих репов
config --global user.name ijin
# установить email
config --global user.email mail@mail.com
# посмотреть лог коммитов за последнее время
git log --since="30 minute ago"
# откатить последний коммит в git (поправить коммент например)
git reset --soft HEAD^
# посмотреть список локальных тегов
git tag -l
# удалить все локальные теги и получить все теги с удаленного репозитория
git tag -l | xargs git tag -d
git fetch
# создать тег
git tag tagName
# отправить новые теги в удаленный репозиторий вместе с новыми коммитами
git push --tags
# удалить локальный тег
git tag -d tagName
# удалить тег в удаленном репозитории (origin)
git push --delete origin tagName
# выкатиться с тега
git fetch --tags
git checkout tagName
# откатиться на предыдущий установленный тег, круто для отката на боевой при контроле установки тегов
git checkout tagName^
# посмотреть текущий тег проекта
git describe --tags
# посмотреть настройки для текущего репозитория
git config -l
# посмотреть глобальные настройки Git
git config --global -l
# установить простой глобальный алиас для вывода лога, см. git help log
# теперь в репозиториях будет работать git ll
git config --global alias.ll "log -20 --pretty='%Cred%h %Cblue%an %ar %Cgreen%s'"
# смотрим путь к удаленному репозиторию
git remote -v
git config -l
# правим путь к удаленному репозиторию
git config remote.origin.url "git@192.168.1.100:repo.git"
# если нужно добавить файлы к последнему коммиту или поправить комментарий
git commit --amend
Вообще Git очень нравится. Очень продвинутая VCS, просто песня.
Книжка со всем необходимым про Git
живет тут.
Онлайн курсы по Git можно найти например
тут.
Суббота, 9 январь 2010
UPD: Таже самая цель, но меньшей кровью — настройка dnsmasq
Зачем это надо.
Надо это затем что есть например 10 локально поднятых проектов на рабочей станции разработчика. Этот разработчик
- Для работы с локальной копией проекта редактирует конфиг своего веб сервера (apache, lighttpd etc.) и указывает в конфиге имя хоста для этого локального проекта.
- Потом перезапускает веб сервер.
- Потом тащится редактировать /etc/hosts Прописывает там имя хоста и локальный ip.
- Потом выясняет что этот прописанный хост перекрывает тот который был в интернете или он ошибся когда прописал имя в конфиге веб-сервера или в hosts.
В итоге всего этого занудства как правило тратится драгоценная нервная энергия которую можно потратить более эффективно на что-то поинтереснее.
Что я предлагаю сделать.
Я предлагаю сделать локальный домен (в примере .mydev) и сократить процедуру выше до двух шагов:
- Прописываем конфиг веб-сервера с хостом вида projectname.mydev
- Перезапускаем веб-сервер.
И всё. И радостно начинаем допиливать наш проект по заданному имени.
Что будем делать, TODO
- Установим DNS сервер.
sudo apt-get install bind9
- Идем разглядывать собственно конфиги. Принцип нашей этой гадости состоит в том что на данный момент при обращении к какому-либо хосту (это грубая схема) наша машинка ломится на провайдерский DNS выданный ему провайдером или прописанный иным образом это не суть. Получает собственно у DNS-а айпишник хоста ну и соответственно отправляется за данными в его сторону. Дальше нам не интересно.
Как будет. Будет так: при обращении к какому-либо хосту, мы будем обращаться к локальному DNS серверу, который будет проверять наши правила и если запрос не попадает под наши правила, то наш локальный DNS идет и спрашивает тоже самое у провайдерского DNS-а. И отдает нам уже собственно его (провайдера) ответ. Итак, идем к конфигам
cd /etc/bind
Я пользуюсь mc, это удобно, рекомендую. Нам понадобятся права суперпользователя, так что либо sudo mc, либо sudo mcedit filename при редактировании каждого файла, вопрос с правами я далее затрагивать не буду.
- Открываем на редактирование named.conf.options
Тут нас интересует секция forwarders её нам нужно раскомментировать и указать IP адрес(а) DNS сервера провайдера (или может быть роутера, смотря как организован выход в интернет). Сохраняем, выходим.
- Открываем на редактирование named.conf.default-zones
Тут нам вниз нужно добавить новую зону. Выглядеть новая секция будет вот так:
zone "mydev" {
type master;
file "/etc/bind/db.mydev";
};
- По указанному пути создаем файлик
sudo cp /etc/bind/db.local /etc/bind/db.mydev
То есть просто делаем копию описания локальной зоны. Нам нужно будет в ней кое-что отредактировать. Итак копию сделали, теперь:
- Открываем на редактирование db.mydev
Там нам нужно исправить всего несколько строк. В итоге наш db.mydev будет выглядеть вот так:
$TTL 604800
@ IN SOA mydev. root.mydev. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS mydev.
@ IN A 127.0.0.1
* IN A 127.0.0.1
@ IN AAAA ::1
Жирным отмечены строки которые были отредактированы или добавлены. Сравните с оригинальным db.local для того чтоб было понятно что произошло. По сути ничего особенного.
- Теперь остается только перезапустить наш DNS
sudo /etc/init.d/bind9 restart
- Ну и проверяем теперь как эта карусель работает.
ping 11.mydev
ping 22.mydev
Если работает то IP должен быть тот что вы указали (в примере 127.0.0.1) Но сейчас ничего не работает. Потому что..
- Забыл рассказать про грабли. Наш уважаемый NetworkManager автоматом прописывает в /etc/resolv.conf адрес DNS провайдера. Если там будет прописан внешний DNS то наша поделка пролетит как фанера над Парижем. Обращения в сеть просто пойдут мимо неё. Чтобы это дело устранить, нужно зайти в свойства текущего подключения к интернету, "Изменить соединения" => Выбираем наше соединение => "Параметры IPv4". Тут указываем IP нашего локального DNS (в примере 127.0.0.1), сделать это можно выбрав метод "DHCP, только адрес". Этого должно быть достаточно. После этого через NetworkManager соединение разрываем и снова устанавливаем. Если все ок, то в /etc/resolv.conf мы должны увидеть наш искомый IP, тот что прописали как DNS в NetworkManager.
- Вот теперь проверяем результат.
Вот собственно и всё. Теперь можно не трогать /etc/hosts. Прошу обратить внимание, что решение я нашел сам и возможно оно неоптимальное или даже неправильное, но однозначно рабочее. Ничего подходящего я в интернете по форумам не нашел.
Суббота, 9 январь 2010
Это простой пример. Исходим из того что нам в одной папке надо переименовать все файлы совпадающие по имени с заданной маской. Для этого воспользуемся командой
rename (тут желательно немного шарить в регулярных выражениях).
Во-первых конечно же
man rename там нет ничего хитрого.
rename [режим] [регулярка] [маска_файлов]
Например, в выбранной папке добавляем всем файлам расширение
.torrent
cd ~
cd torrents/_torrents
pwd
# /home/user/torrents/_torrents/ , ok
ls -la
# приедет список файлов, ок мы там где надо, это точно
rename -v 's/.*/$_.torrent/' *
Насчет как работает
perlexpr извините, придется почитать :)
man rename койчем поможет в общих случаях да и этот пример тоже.
А в этом примере в текущей папке у имен файлов *.jade меняется хвост, становится *.html.jade
for file in *.jade ; do new=`echo $file | sed 's/.jade/.html.jade/g'`; echo $file $new ; done
Вторник, 24 ноябрь 2009
Сие есть краткая памятка хоткеев к популярному файловому менеджеру mc. Сейчас мне приходится работать с ним постоянно и первое время я здорово маялся. Замечу что чаще всего я пользуюсь им из под виндового Putty, соответственно все приведенные хоткеи должны теоретически нормально работать под WinXP\Win7 + Putty при условии что нет каких-то глобально перекрытых хоткеев (у меня например были проблемы, когда "Типографская раскладка Ильи Бирмана" вещь же классная, не давала мне нормально пользоваться путёвыми хоткеями, пришлось сносить). Ну, с преамбулой закончили, теперь собственно сабж:
- F9 - вызов главного меню mc :)
- F2 - вызов меню пользователя
- Ctrl+\ - вызов меню каталогов быстрого доступа (туда же можно сохранять sftp ssh и ftp соединения)
- Ctrl+R - обновить папку (например когда заливали в текущую папку файлы по фтп или кидали туда файлы-результаты)
- Ctrl+U - поменять панели местами
- Ctrl+x c - вызов диалога chmod (такая запись хоткеев здесь и далее означает, что нужно нажать сочетание клавиш, записанных через "+", затем отпустить его и нажать клавишу, записанную через пробел, то есть фактически это такой сложный хоткей получается)
- Ctrl+x o - вызов диалога chown
- Ctrl+o - показать "субконсоль", в ней можно работать, но есть небольшие нюансы. Вообще обычно это нужно чтобы убрать панели с экрана и посмотреть результаты работы какой-то запущеной программы, но на разных ос (фря, дебиан\убунту) я много раз ловил глюки с этой ф-ей. То есть видел черный экран или результаты выполнения чего-то другого. Ну зато эту ф-ю удобно использовать когда надо просто обновить рабочий экран. В командной строке периодически появляется какой-то графический мусор, который быстрее всего сбросить как раз вот так.
- Ctrl+x i - включить\выключить отображение быстрой информации о файле под курсором в неактивной панели
- Alt+h - показать историю комманд
- Esc p - повторить в коммандной строке предыдущую комманду (многократное нажатие ведет к проходу по истории комманд)
- Esc i - отобразить ту же директорию в неактивной панели
- Alt+t - сменить вид текущей панели
- Shift+* - инвертировать текущее выделение файлов (* которая на кнопенции 8)
- Ctrl+x s - создать симлинк файла под курсором
Буду пополнять периодически. Думаю вспомнил я не всё чем пользуюсь.
Вторник, 24 ноябрь 2009
Серьёзнейшее дело!!
man deluser
Удаление с хомяком вместе без восстановления:
sudo deluser --remove-home user_name
# или короче
sudo deluser -r user_name
Можно сделать бекап, чтобы узнать как, но всё же придётся посмотреть ман.
Добавить пользователя соответственно:
man adduser.