git – Stepan Suvorov Blog https://stepansuvorov.com/blog Release 2.0 Fri, 21 Apr 2017 09:48:04 +0000 en-US hourly 1 https://wordpress.org/?v=6.3.1 Git standup to prepare your notes https://stepansuvorov.com/blog/2017/04/git-standup-to-prepare-your-notes/ https://stepansuvorov.com/blog/2017/04/git-standup-to-prepare-your-notes/#respond Sat, 22 Apr 2017 09:36:27 +0000 http://stepansuvorov.com/blog/?p=3346 When you have several projects and lots of small tasks it’s easy to forget something important for standup. git standup command will help you with quick commit notes for X period of time.

]]>
https://stepansuvorov.com/blog/2017/04/git-standup-to-prepare-your-notes/feed/ 0
git-clean: Remove all local branches https://stepansuvorov.com/blog/2017/03/git-clean-remove-all-local-branches/ https://stepansuvorov.com/blog/2017/03/git-clean-remove-all-local-branches/#comments Wed, 08 Mar 2017 12:44:03 +0000 http://stepansuvorov.com/blog/?p=3288 Continue reading ]]> Made a note about it 4 years ago, but it looks like the note is still pretty usefull. So one more time for en readers.

To remove all merged branches(except current -v ‘*’):

git branch --merged | grep -v '*' | xargs git branch -D

also I made such command for repo complete clean up:

alias git-clean="git branch  | grep -v '*' | grep -v 'master' | xargs git branch -D  && git reset --hard && git clean -d -x -f"
]]>
https://stepansuvorov.com/blog/2017/03/git-clean-remove-all-local-branches/feed/ 2
Git pre-push hook https://stepansuvorov.com/blog/2015/03/git-pre-push-hook/ https://stepansuvorov.com/blog/2015/03/git-pre-push-hook/#respond Fri, 13 Mar 2015 19:40:07 +0000 http://stepansuvorov.com/blog/?p=2166 Continue reading ]]> Я уже писал о том как можно использовать git хуки для запуска grunt команд и делать предварительную проверку перед заливкой кода в главный репозиторий. В этой заметке я покажу, как можно избежать проверки не закомиченных изменений.

Git pre-push hook будет выглядеть вот так:

[shell]
#!/bin/sh
grunt test
RETVAL=$?
if [ $RETVAL -ne 0 ]
then
echo "Grunt task failed, exiting…"
exit 1
fi

echo "Complete."
[/shell]

Как видите ничего сложного. Теперь при каждом пуше будет вызываться “grunt test“. Важно не забыть сделать этот файл исполняемым (chmod +x pre-push)

Есть еще один момент: когда вы попытались запушить поломанный код – тесты не прошли – вы починили код, но при этом забыли закоммитить – тесты прошли – и поломанный код попал на сервер (так как фикс не был закоммичен).

Поэтому перед началом тестов прячем все незакоммиченные изменения (git stash), а потом возвращаем их назад:

[shell]
#!/bin/sh
CHANGES=$(git diff –numstat | wc -l)
CHANGES_CACHED=$(git diff –cached –numstat | wc -l)
TOTAL_CHANGES=$(($CHANGES + $CHANGES_CACHED))

git stash -k
grunt test

RETVAL=$?

if [ $TOTAL_CHANGES -ne "0" ]
then
echo "Popping" $TOTAL_CHANGES "changes off the stack…"
git stash pop -q
fi

if [ $RETVAL -ne 0 ]
then
echo "Grunt task failed, exiting…"
exit 1
fi

echo "Complete."
[/shell]

Полный код тут. Идея взята от сюда.

]]>
https://stepansuvorov.com/blog/2015/03/git-pre-push-hook/feed/ 0
Виды лицензий Open Source https://stepansuvorov.com/blog/2014/07/%d0%b2%d0%b8%d0%b4%d1%8b-%d0%bb%d0%b8%d1%86%d0%b5%d0%bd%d0%b7%d0%b8%d0%b9-open-source/ https://stepansuvorov.com/blog/2014/07/%d0%b2%d0%b8%d0%b4%d1%8b-%d0%bb%d0%b8%d1%86%d0%b5%d0%bd%d0%b7%d0%b8%d0%b9-open-source/#respond Sun, 13 Jul 2014 08:49:32 +0000 http://stepansuvorov.com/blog/?p=1396 Continue reading ]]>
Краткое описание лицензий Open Source, которые предлагает git при создании нового репозитория:
Apache v2 License Условия: по сравнению с GPL доставточно указывать ссылку на лицензию, а не размещать полный текст лицензии.
GPL v2 одна из наиболее распространенных open source-лицензий. Основное условие GPL: продукт, использующий код, защищенный этой лицензией, должен распространяться также под GPL и его исходный код должен быть доступен получателю такого продукта, который может делать с этим кодом все что угодно в рамках GPL. Под этой лицензией распространяются ядро Linux, MySQL, Asterisk и многие другие. Большинство CMS систем, таких как MovableType, MODx, WordPress, Joomla, Drupal, osCommerce и множество других выпускаются под GPL. По разным данным, в мире до 70% open source-ПО выпускается под GPL.
MIT License Условия: полностью дублирует BSD, за исключением что имена продукта и разработчиков оригинального продукта можно использовать в рекламных целях.  Window System (X11), Ruby on Rails — наиболее известные проекты, распространяемые под MIT.
Affero GPL свободная лицензия, созданная специально для таких программ, как веб‐приложения, так что пользователи, использующие изменённую программу через сеть, могут получить её исходный код. Разработана Фондом свободного программного обеспечения (Free Software Foundation) на основе GNU General Public License
Artistic License 2.0 используется для конкретных бесплатных и опен-сорс программных пакетов, это в первую очередь – стандартная реализация языка Perl. Подвергнута критике Free Software Foundation.
BSD (3-Clause) License В отличии от второй версии появился 3тий пункт, который запрещает использование автора оригинального продукта с целью рекламы.
BSD 2-Clause license Условия: возможно использование продукта в других продуктах при сохранении в документации продукта ссылки на оригинальных разработчиков. Самой известной компанией, использующей преимущества лицензии BSD является компания Apple.
CC0 1.0 Universal Лицензия от Creative Commons.
Eclipse Public License v1.0 используется Eclipse Foundation для своих продуктов. Она базируется на Common Public License, однако удаляет некоторые понятия, относящиеся к спорам относительно патентов. Лицензия EPL более дружественна к бизнес-ориентированному свободному ПО и предоставляет более гибкие правила отказа на авторские права.
GPL v3 в отличие от v2 включает большую поддержку сторонних лицензий. Картинка хорошо иллюстрирует отличие.
ISC license свободная лицензия для программного обеспечения, созданная и используемая Internet Systems Consortium. Она эквивалентна 2-пунктовой лицензии BSD, в которой убран текст, неактуальный вследствие Бернской конвенции 1886 года. Помимо ISC, данная лицензия используется проектом OpenBSD и некоторыми другими открытыми проектами.
LGPL v2.1  отличается от GPL тем, что позволяет использовать продукты LGPL в проектах, распространяемых под другими лицензиями.Наиболее известный продукт, выпускаемый под LGPL, – OpenOffice.org.
LGPL v3 небольшие дополнения к версии 2. В основном по поддержке сторонних лицензий под общей LGPL.
Mozilla Public License Version 2.0 Представляет из себя гибрид лицензий BSD и GNU. Во второй версии расширили совместимостью с другими лицензиями.
]]>
https://stepansuvorov.com/blog/2014/07/%d0%b2%d0%b8%d0%b4%d1%8b-%d0%bb%d0%b8%d1%86%d0%b5%d0%bd%d0%b7%d0%b8%d0%b9-open-source/feed/ 0
How to update the git fork https://stepansuvorov.com/blog/2014/07/how-to-update-the-git-fork/ https://stepansuvorov.com/blog/2014/07/how-to-update-the-git-fork/#respond Wed, 09 Jul 2014 18:41:49 +0000 http://stepansuvorov.com/blog/?p=1855 [bash]
git remote add upstream https://github.com/whoever/whatever.git
git fetch upstream
git checkout master
git rebase upstream/master
[/bash]

]]>
https://stepansuvorov.com/blog/2014/07/how-to-update-the-git-fork/feed/ 0
Полезности для .gitconfig https://stepansuvorov.com/blog/2014/02/gitconfig/ https://stepansuvorov.com/blog/2014/02/gitconfig/#respond Tue, 25 Feb 2014 15:10:59 +0000 http://stepansuvorov.com/blog/?p=1131 Continue reading ]]> Небольшой набор инструкции по настройке git через .gitconfig, которые использую сам

Прописываем информацию о себе

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

[user]
name = Ivanov Ivan
email = ivan.ivanov@gmail.com

Алиасы команд

[alias]
co = checkout
ci = commit
br = branch
st = status --short
clean = branch -D
hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short

подбирается индивидуально по предпочтениям и частоте использования полных команд

Добавляем цветов

[color]
ui = true

Прописываем gitignore глобально

Вместо того, чтобы каждый раз прописывать какие-то файлы настроек, которые создает IDE(например .idea для продуктов JetBrains), в .gitignore, можно вынести их один раз в глобальные настройки.

[core]
excludesfile = ~/.gitexcludes

Задаем редактор

Командой (она добавит несколько параметров в конфиг)

$ git config --global core.editor sourcetree

в моем случае это sourcetree. Теперь все конфликты и дифы будет обрабатываться в нем.

commit-сообщения по умолчанию

тоже вероятно упростит жизнь для мелких коммитов и коммитов, которые должны следовать определенному шаблону

[commit]
template = ~/.commit-template

 

Если вдохновило – полный ман тут.

]]>
https://stepansuvorov.com/blog/2014/02/gitconfig/feed/ 0
Правим последний коммит в git c помощью –amend https://stepansuvorov.com/blog/2013/06/%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bc-%d0%bf%d0%be%d1%81%d0%bb%d0%b5%d0%b4%d0%bd%d0%b8%d0%b9-%d0%ba%d0%be%d0%bc%d0%bc%d0%b8%d1%82-%d0%b2-git-c-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-amend/ https://stepansuvorov.com/blog/2013/06/%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bc-%d0%bf%d0%be%d1%81%d0%bb%d0%b5%d0%b4%d0%bd%d0%b8%d0%b9-%d0%ba%d0%be%d0%bc%d0%bc%d0%b8%d1%82-%d0%b2-git-c-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-amend/#respond Fri, 14 Jun 2013 17:02:10 +0000 http://stepansuvorov.com/blog/?p=1063 Continue reading ]]> Забыли что-то внести в коммит?  – не беда! Просто поправим последний коммит с помощью amend:

сначала добавляем, то что забыли:

git add .

потом вносим правку:

git commit --amend

так же можно дописать комментарий:

git commit --amend -m 'really serious changes'

 

* для git-гуру понятно дело ничего нового нет

 

]]>
https://stepansuvorov.com/blog/2013/06/%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bc-%d0%bf%d0%be%d1%81%d0%bb%d0%b5%d0%b4%d0%bd%d0%b8%d0%b9-%d0%ba%d0%be%d0%bc%d0%bc%d0%b8%d1%82-%d0%b2-git-c-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-amend/feed/ 0
Удалить все локальные ветки git https://stepansuvorov.com/blog/2013/04/%d1%83%d0%b4%d0%b0%d0%bb%d0%b8%d1%82%d1%8c-%d0%b2%d1%81%d0%b5-%d0%bb%d0%be%d0%ba%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d0%b5-%d0%b2%d0%b5%d1%82%d0%ba%d0%b8-git/ https://stepansuvorov.com/blog/2013/04/%d1%83%d0%b4%d0%b0%d0%bb%d0%b8%d1%82%d1%8c-%d0%b2%d1%81%d0%b5-%d0%bb%d0%be%d0%ba%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d0%b5-%d0%b2%d0%b5%d1%82%d0%ba%d0%b8-git/#comments Tue, 09 Apr 2013 12:36:53 +0000 http://stepansuvorov.com/blog/?p=971 Continue reading ]]> Команда для того чтобы удалить все смерженые(–merged) ветки за исключением текущей(-v ‘*’):

git branch --merged | grep -v '*' | xargs git branch -D

еще для себя я сделал такую алиас-команду для полной зачистки репозитория от изменений и старых веток:

alias git-clean="git branch  | grep -v '*' | grep -v 'develop' | xargs git branch -D  && git reset --hard && git clean -d -x -f"

критика приветствуется.

]]>
https://stepansuvorov.com/blog/2013/04/%d1%83%d0%b4%d0%b0%d0%bb%d0%b8%d1%82%d1%8c-%d0%b2%d1%81%d0%b5-%d0%bb%d0%be%d0%ba%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d0%b5-%d0%b2%d0%b5%d1%82%d0%ba%d0%b8-git/feed/ 3
git hook: Не пускаем в репозиторий ошибки https://stepansuvorov.com/blog/2013/01/git-hook/ https://stepansuvorov.com/blog/2013/01/git-hook/#comments Wed, 02 Jan 2013 09:54:21 +0000 http://stepansuvorov.com/blog/?p=733 Continue reading ]]>

Настраивая систему разворачивания проекта с репозитория, мы задумались над вопросом чистоты кода репозитория, ибо тесты на самом сервере – это хорошо, но в системе контроля версий также совсем не помешает держать рабочий код, особенно в “стабильной” ветке.

Как вариант решения:  сделать git-hook, который бы проверял каждый push на репозиторий и не давал заливать “плохой” код. (Под “плохой” мы будем понимать код, который не прошел юнит-тестов либо валидации JSHint)

О самом  git hook можно почитать подробно на официальном сайте. Расскажу только некоторые детали реализации.

Все хуки лежат в директории ./git/hooks/. Там же есть уже готовые примеры реализованные на shell-скрипте(с расширением .sample).

Список возможных действий, на которые можно повесить обработчик:

  • applypatch-msg
  • post-commit
  • post-update
  • pre-commit
  • update
  • commit-msg
  • post-receive
  • pre-applypatch
  • pre-rebase

– подробное описание можно посмотреть тут.

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

Теперь стоит подумать как лучше реализовать код перехватчика. Сначала была мысль написать shell-скрипт, но потом мы вспомнили о grunt, который уже прекрасно работал с проектом, и просто добавили еще одно задание(task) в него – pre-commit-test, в котором описали все необходимые проверки. Осталось только вызывать сборщик из hook-скрипта. Вот весь код:

#!/bin/sh

GRUNTJS_DIR='/path_to_project/project_dir'
GRUNT_CMD=grunt
cd $GRUNTJS_DIR
$GRUNT_CMD pre-commit-test
EXIT_CODE=$?
[ $EXIT_CODE -gt 0 ] && echo && echo validation fail! && echo
exit $EXIT_CODE

Немного комментариев:

GRUNT_CMD=grunt

пусть к команде grunt(в случае, если она не глобальная)

[ $EXIT_CODE -gt 0 ]

проверяем выдал ли что-то валидатор и в случае чего – прерываем выполнение.

]]>
https://stepansuvorov.com/blog/2013/01/git-hook/feed/ 1
Создание файлов прямо на GitHub https://stepansuvorov.com/blog/2012/12/%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2-%d0%bf%d1%80%d1%8f%d0%bc%d0%be-%d0%bd%d0%b0-github/ https://stepansuvorov.com/blog/2012/12/%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2-%d0%bf%d1%80%d1%8f%d0%bc%d0%be-%d0%bd%d0%b0-github/#respond Thu, 06 Dec 2012 10:25:56 +0000 http://stepansuvorov.com/blog/?p=769 Свершилось! Они сдеали возможность создавать файлы прямо в веб интерфейсе.

подробнее на офсайте.

]]>
https://stepansuvorov.com/blog/2012/12/%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2-%d0%bf%d1%80%d1%8f%d0%bc%d0%be-%d0%bd%d0%b0-github/feed/ 0