Как новичок в работе с системой GitHub, столкнулся с вопросом - как удалить созданный на GitHub репозиторий?
Оказалось, что ничего сложного в этом нет. Однако, задача эта и не такая простая, как может показаться. По крайней мере, чисто интуитивно у меня не получилось ее выполнить - пришлось искать ответ в Сети.
Итак, у меня есть учетная запись на GitHub, под которой создана пара репозиториев. Один из этих репозиториев был создан в учебных целях, поэтому для моей дальнейшей работы он мне не пригодиться и его можно удалить.
Список репозиториев на GitHub
Для начала открою свою страничку на GitHub и посмотрю, какие репозитории у меня уже есть:
Один из репозиторев -
1
arbeit
- можно удалить.
Для этой цели нужно просто зайти в него по ссылке:
В правом нижнем углу окна браузера, в списке, имеется строка
1
Settings
. Открываем ее, сразу же копируем имя репозитория в поле
1
Repository name
(оно нам понадобиться еще здесь) и прокручиваем страницу вниз, пока не находим раздел с устрашающим названием
1
Danger Zone
. В этой опасной зоне находим подраздел
1
Delete this repository
с одноименной кнопкой
1
Delete this repository
.
Жмем на эту кнопку и получаем в результате окно с предупреждением об удаленни репозитория. В окне запроса имени удаляемого репозитория вводим (или вставляем из буфера обмена) -
1
arbeit
:
Снова жму на кнопку, на этот раз с еще более страшным напоминанием о последствиях совершаемого мною шага. И все! Репозиторий
1
arbeit
удален:
Ничего сложного, но так сразу и не догадаешься, что нужно делать. Разработчики GitHub постарались и обезопасили пользователей от случайного удаления репозиториев с данными.
Данная статья является попыткой осмыслить (в первую очередь для себя, конечно) такой вопрос, как создание git-репозитория на GitHub, клонирование этого репозитория на локальный компьютер, внесение изменений в клонированный репозиторий, отправка изменений обратно на GitHub.
Вот такие получаются шаги, которые нужно осветить. Profit у всех этих сложностей, описанных мною выше, один - но большой! Заключается он в том, что проект, над которым вы работаете (даже в гордом одиночестве) находится на удаленном сервере, к которому можно подключиться из любого места и с любой машины. Так как он находиться на remote server, то с ним ничего не случиться, даже если ваша машина упадет\утонет\разобьется.
В статье большая часть времени будет посвящена автоматизации процесса авторизации на сервисе GitHub с помощью такой вещи, как ssh-ключи. Такие ключи предназначены как раз для возможности авторизации пользователя на каком-либо сервисе, без необходимости каждый раз вводить логин\пароль. Естественно, на стороне сервиса должна быть настроена такая возможность - на GitHub она настроена и даже является почти обязательным условием настройки аккаунта.
Все действия, описанные в этой статье, будут производиться под операционной системой Linux Mint 17 Cinnamon, в консоли. Поэтому пользователи Mac OS X найдут для себя почти все идентичным. Система Windows остается в стороне.
Создание SSH-ключей под Linux
Первоначально необходимо создать (если их еще нет) ssh-ключи, которые будем использоваться для авторизации на GitHub. В системе Linux такие ключи расположены в домашней директории пользователя и выглядят примерно так:
Один из этих ключей
1
id_rsa
- это приватный ключ, который должен храниться только у пользователя. Другой ключ
1
id_rsa.pub
- это публичный ключ, который предоставляется всем и который я отправлю на GitHub. Представленные выше имена ключей являются создаваемыми по умолчанию, но можно указать и свои собственные.
Если показанная выше команда “скажет” вам, что директории
1
.ssh
не существует, то это означает, что у вас с системе установлен пакет SSH, отвечающий за создание и обработку ssh-ключей.
Установка пакета SSH
Под Linux Mint его нужно установить командой:
Создание пары ssh-ключей
Теперь можно приступать к созданию пары ssh-ключей. Выполняется это командой:
Чтобы было немного понятно, что это я сделал в данной команде, немного расшифрую ее. Утилита
1
ssh-keygen
входит в комплект пакета
1
ssh
и предназначена для одной цели - создания ssh-ключей. Часть команды -
1
-t rsa
- указывает, что необходимо создать ssh-ключи типа
1
rsa
.
Обязательный параметр
1
"g***e@gmail.com"
- электронный адрес, к которому “привязывается” создаваемый ssh-ключ; данный email будет также использоваться мною для регистрации на GitHub.
Как только будет введена представленная выше команда, утилита
1
ssh-keygen
запросит имя файла и местоположение для создаваемых ssh-ключей. Можно ничего не вводить, а просто нажать Enter. В этом случае программулька создаст и положит их по пути по умолчанию (который показан ею в скобочках):
Утилита задаст еще один вопрос, который крайне не рекомендуется игнорировать:
Здесь
1
passphrase
- это пароль к создаваемым ssh-ключам. Каждый раз, когда придется использовать эти ключи, нужно вводить данный пароль. Это обезопасит их в случае кражи. В качестве пароля можно использовать любую текстовую строку.
После успешного ввода
1
passphrase
ssh-ключи будут созданы:
В состав пакета
1
ssh
входит утилита
1
ssh-agent
, задача которой в управлении созданными ssh-ключами. Передадим ей в пользование только созданные мною ssh-ключи:
Можно посмотреть, что утилита
1
shh-add
“подхватила” и распознала предоставленные ею ssh-ключи:
Под операционную систему Linux имеется консольная утилита
1
xclip
, которая умеет получать содержимое любого файла и отправлять это содержимое в буфер обмена, и все это в консоли. По умолчанию такой утилиты нет в системе (в том числе и у меня), поэтому первоначально установлю ее:
… а затем передам ей на вход содержимое публичного ключа
1
id_rsa.pub
, который буду применять на сервисе GitHub:
Если вам, уважаемый читатель, такой путь покажется слишком сложным, то можно открыть файл
1
id_rsa.pub
в любом редакторе кода и скопировать его содержимое в буфер обмена.
Добавление ssh-ключа на GitHub
Переходим на сервис GitHub и создаем на нем новую учетную запись. Описывать процесс создания такой записи на GitHub не буду, так как там все просто. Более интересный момент - это добавление ssh-ключа в профиль пользователя GitHub.
Для этого нажимаю на значок шестеренки в правом верхнем углу окна браузера - настройки профиля пользователя. В открывшемся окне (в его левой части) находим строку
1
SSH key
и нажимаем ее:
Откроется окно для добавления новых ssh-ключей в учетную запись пользователя на GitHub. Здесь все элементарно просто - нажимаем кнопку
1
Add SSH key
. В поле
1
Title
вводим название (произвольное) для импортируемого ssh-ключа.
В поле
1
Key
просто нажимаем Ctrl+V - содержимое буфера обмена (которое я получил ранее с помощью утилиты
1
xclip
) вставиться в это поле:
Жму на зеленую кнопку
1
Add key
внизу окна. Ключ добавлен на GitHub и появиться в списке SSH-ключей:
Проверка SSH-соединения с GitHub
В предыдущих шагах мною были созданы пара ssh-ключей, а также учетная запись на GitHub. В эту учетную запись был импортирован публичный ssh-ключ. Теперь неплохо было бы проверить, что все шаги пройдены мною успешно и ssh-связь с сервисом GitHub устанавливается. Проще сказать - что сервис GitHub авторизует меня у себя с помощью ssh-ключей.
Для этой цели ввожу команду:
На ошибку в строке
1
The authenticity of host 'github.com (192.30.252.131)' can't be established.
не стоит обращать внимание. В запросе командной строки печатаем
1
yes
и получаем:
Отлично! GitHub “узнал” меня и поприветствовал в строке
1
Hi gearmobile! You've successfully authenticated, but GitHub does not provide shell access.
. Это говорит о том, что ssh-соединение моей машины с GitHub установлено успешно и GitHub авторизует меня.
Создаем новый репозиторий на GitHub. Ввожу новое уникальное имя для репозитория, краткое его описание и включаю галочку “Initialize this repository with a README”:
Отлично! На GitHub я только что создал новый репозиторий
1
arbeit
. Теперь можно скопировать (склонировать) его на свою локальную машину командами:
Переходим в локальную копию репозитория
1
arbeit
. Вношу изменения, а затем последовательно:
Команда
1
git commit -m 'Added changes'
фиксирует изменения в локальном репозитории. Команда
1
git push
отправляет внесенные и зафиксированные изменения в локальном репозитории на удаленный репозиторий.
Вот, таким образом я наладил Git-работу своей машины с GitHub.
Можно создать еще пару файлов в разных директориях и посмотреть на вывод команды
1
git status
в консоли:
Усложнить задачу игнорирования в .gitignore
Можно усложнить задачу игнорирования в Git, добавив в файл
1
.gitignore
директорию, содержимое которой также должно игнорироваться. Пускай это будет обычная директория
1
ignore
и скрытая директория
1
.ignore
(с точкой перед именем):
Добавлю в файл
1
.gitignore
пару строк таким образом:
Проиндексирую изменения, а затем выполню операции по созданию директорий и файлов внутри них:
Вновь ввожу команду просмотра состояния репозитория Git:
Все сработало - Git не захотел видеть директории
1
ignore
,
1
.ignore
, а также их содержимое. Отлично!
Шаблоны в файле .gitignore
Для файла
1
.gitignore
доступны шаблоны, с помощью которых можно задать маски для выборки необходимых типой файлов. Однако, обширная тема шаблонов выходит за рамки данной статьи. При желании можно почитать по теме шаблонов в книге “Pro Git - профессиональный контроль версий”.
Сегодня рассмотрим еще один очень нужный и полезный плагин для web-разработчика. Это плагин
1
gulp-livereload
под Gulp, который должен иметь каждый веб-разработчик в своей копилке.
Суть плагина
1
gulp-livereload
в автоматизации обновления страниц в окне браузера. Это тоже самое, что и связка - плагин LiveReload под Sublime Text + плагин LiveReload под браузер. Но в данном случае получается связка - плагин
1
gulp-livereload
+ плагин LiveReload под браузер.
Сказать честно, предыдущий опыт настройки LiveReload, описанный в этой статье - “Установка LiveReload в Sublime Text 2” меня полностью не удовлетворял и я им не пользовался. Причина заключалась в том, что иногда эта связка работала, а иногда - почему-то нет. Нестальность работы плагина под Sublime Text (у меня) отбивала всякое желание иметь с ним дело.
А вот связка плагин
1
gulp-livereload
+ плагин LiveReload под браузер работает стабильно. Кроме того, если Node.js + Gulp уже настроен для текущего проекта, то не возникает никакой проблемы в установке дополнительного плагина
1
gulp-livereload
.
Установка плагина gulp-livereload
Плагин
1
gulp-livereload
проживает по указанному адресу - gulp-livereload. Установка в проект производиться командой:
В виде зависимостей проекта запись в файле
1
package.json
должна выглядеть (как минимум) так:
Добавляем переменную
1
livereload
в файл
1
gulpfile.js
для инициализации плагина
1
gulp-livereload
и дальнейшей работы с ним:
Установка плагина LiveReload под браузер
Следующим шагом будет установка расширения LiveReload под браузер. В моем случае это будет Mozilla Firefox, однако расширение LiveReload существует и под два других популярных браузера - Google Chrome и Safari.
Для установки расширения под Firefox не стоит искать его на странице расширений Mozilla - LiveReload 0.6.4. Там находится устаревшая версия плагина, которая наверняка не подойдет для вашего браузера.
Лучше посетим домашнюю страницу проекта LiveReload с описанием установки расширений под каждый из браузеров - How do I install and use the browser extensions. Скачиваем по указанной на странице ссылке расширение под нужный браузер (Firefox) и автоматически устанавливаем его.
На панели инструментов браузера появиться значок плагина LiveReload в виде круга из двух стрелок. Однократное нажатие на значок запускает плагин - он принимает вид, похожий на компас со стрелкой. Еще одно нажатие выключает плагин LiveReload.
Создание задачи под gulp-livereload
В принципе, плагин
1
gulp-livereload
не требует для себя создания отдельной задачи. Все, что нужно для него - это запуск его как локального сервера. Если вы скажете, что не устанавливали сервер LiveReload, то могу успокоить вас - устанавливали! Инсталляция плагина
Поэтому нам нужно всего лишь предварительно активировать, запустить его. Кстати, если у вас вдруг при попытке включения плагина LiveReload в браузере появляется окно с такой ошибкой:
… то это говорит всего лишь о том, что перед этим не был запушен в консоли сам сервер LiveReload. Для этого я создам задачу
1
watch
, внутрь которой помещу вызов функции
1
livereload()
:
Все - мне больше ничего не нужно дописывать для задачи компилирования из Sass в CSS (эта задача приведена здесь в качестве примера использования плагина
1
gulp-livereload
):
Полностью листинг файла
1
gulpfile.js
в данном случае будет выглядеть таким образом:
Все готово для тестирования работы плагина
1
gulp-livereload
.
Тестирование плагина gulp-livereload
Осталось выполнить две маленькие вещи. Первая - включаю плагин LiveReload в браузере. Вторая - запускаю Gulp для мониторинга изменений и работы плагина
1
gulp-livereload
:
Видим, как последняя строка в консоли говорит нам, что сервер LiveReload запустился и прослушивает порт по умолчанию - 35729. Вношу изменения в файл стилей
1
style.scss
:
… и смотрю на вывод в консоли:
Изменение было отслежено, файл перекомпилирован задачей
1
sass
. А что же плагин
1
gulp-livereload
- он тоже подхватил изменения?
Смотрим:
О, да! Изменение было подхвачено плагином
1
gulp-livereload
- “картинка” в окне браузера изменилась без перезагрузки последнего.
Еще раз проверим и внесем какое-нибудь изменение в файле стилей:
Отлично! Вот мы и изучили еще одну полезную сторону работы с Gulp - использование плагина
Крайне необходимая задача, возникающая в работе каждого верстальщика - это оптимизация графики, нарезанной из psd-макета или используемой в HTML-шаблоне.
Для этой цели существует много разных инструментов, начиная с RIOT и заканчивая утилитами Linux. Но гораздо более удобной возможностью является автоматизация процесса сжатия картинок с помощью плагина под Gulp.
Таким плагином является gulp-imagemin. Он умеет сжимать картинки форматов PNG, JPEG, GIF и SVG. Все остальные (не поддерживаемые) форматы графических файлов просто игнорируются плагином
1
gulp-imagemin
.
Установка gulp-imagemin
Установка плагина
1
gulp-imagemin
стандартная и производиться командой
1
npm install
с ключом
1
--save-dev
для внесения пакета в список зависимостей проекта:
Создание задачи под gulp-imagemin
После установки плагина
1
gulp-imagemin
необходимо создать задачу сжатия картинок под этот плагин. Ничего необычного в этом нет и задача создается стандартно. Сначала создаем переменную
1
imagemin
, в которую помещаем сам плагин
1
gulp-imagemin
:
А затем создаем задачу с произвольным именем
1
compress
:
Задачу
1
compress
можно запускать однократно вручную или автоматически, доверив это дело Gulp и поместив ее внутрь встроенной функции
1
gulp.watch
.
Создаю в проекте
1
gulp_test
директорию
1
images
и размещаю в ней несколько изображений формата
1
.jpg
, но достаточно большого размера:
Цель - проверить, действительно ли происходит сжатие графических файлов. Давайте опробуем работу плагина
1
gulp-imagemin
однократно, запустив в консоли команду
1
gulp compress
:
Отлично! Задача
1
compress
запустилась и выполнилась за 8.56 миллисекунд. При этом было обработано 6 изображений, над которыми была произведена операция сжатия. Экономия размера в результате компресии составила
1
7.2%
.
Давайте посмотрим на изображения в оригинале, расположенные в директории
1
images
:
… запомним примерные размеры каждого из файлов. А затем взглянем на содержимое директории
1
build/images/
, в которой располагаются сжатые плагином
1
gulp-imagemin
изображения:
Видно при сравнении, что размер графических файлов, пускай и ненамного, но уменьшился.
Gulp-imagemin - автоматический мониторинг
Давайте доведем нашу задачу до логического завершения и настроим Gulp таким образом, чтобы он автоматически отслеживал добавление в директории
1
images
новых изображений.
И как только они появляются там, то немедлено производил бы их сжатие при помощи плагина
1
gulp-imagemin
.
Для этого создам задачу мониторинга
1
watch
:
… которую добавлю в очередь на выполнение для дефолтной задачи
1
default
:
Полностью листниг файла
1
gulpfile.js
для данного случая выглядит следующим образом:
Запускаю в консоли команду
1
gulp
, а затем по одному добавлю в директорию
1
images
два файла-скриншота, созданных мною для этой статьи.
Видим, что каждый раз, как в директорию
1
images
был добавлен файл, Gulp запускал задачу
1
compress
на выполнение:
На выполнение первой задачи ушло 7 миллисекунд:
… на вторую задачу - 2.13 миллисекунд:
При этом я “выиграл”
1
7.7%
и
1
8%
размера, что скажется на скорости загрузки страницы в браузере. Также обратите внимание, что Gulp продолжает работать, находясь в фоновом режиме.
Усложним задачу для gulp-imagemin
Можно немного усложнить и усовершенствовать процесс оптимизации изображений. Для этого немного перепишу задачу
1
compress
таким образом:
Первое изменение - это добавлена опция
1
progressive: true
к плагину
1
gulp-imagemin
. Эта опция управляет методом сжатия графических файлов и приведена мною для наглядности примера.
Второе изменение - изменена директория назначения. Теперь директория-источник изображений
1
gulp.src('images/*')
и директория-“выхлоп”
1
gulp.dest('images/')
, куда помещаются обработанные изображения - одна и та же.
Таким образом, достаточно положить в директорию
1
images
какое-либо изображение и оно тут же преобразуется в точно такое же изображение, но меньшего размера! Удобно, не правда ли?