Основы Git и первый коммит компонента на Github

Заканчиваем с подготовкой к началу активной разработки.
Сегодня нам нужно выгрузить заготовку на сервер, переименовать, создать репозиторий на GitHub и отправить в него первый коммит. А для этого нужно будет настроить PhpStorm на работу с git.

Синхронизация с сервером

После того, как мы связали наш локальный проект с удалённым сервером, в PhpStorm появились новые пункты в контектном меню: - Выгрузить файлы на сервер
  • Скачать файлы с сервера
  • Синхронизировать удалённые и локальные файлы
Важно понимать, что первый и второй пункт могут перезаписывать существующие файлы, поэтому использовать их нужно очень аккуратно. В основном, лучше использовать синхронизацию - она покажет различия в файлах и позволит выбрать действия с ними. Правда есть и недостаток - при синхронизации нужно прочитать все удаленные файлы, а это занимает время. Хорошо, что PhpStorm позволяет синхронизировать не только весь проект, но и каждую отдельную директорию, и даже файл.
Мы выгружаем проект в первый раз, перезаписывать там нечего - поэтому смело кликаем Upload to MODXCloud. После этого можно проверить наличие файлов в админке. -
Теперь нам нужно переименовать заготовку modExtra в Sendex. Для этого воспользуемся скриптом rename_it.php. На моём сервере ссылка получается вот такая:
http://c2263.paas2.ams.modxcloud.com/Sendex/rename_it.php
Если открыть её без параметров, то скрипт требует указать новое имя:
You need to specify a new name of component in this file on line 9, or send it via $_GET["name"].
Окей, изменяем ссылку и указываем новове имя:
http://c2263.paas2.ams.modxcloud.com/Sendex/rename_it.php?name=Sendex
Видим кучу непонятных строк (на самом деле, это новые имена файлов и директорий), а значит, заготовка была успешно переименована, и теперь является настоящим компонентом.
Мы даже можем его собрать и установить, прямо сейчас, но тогда он создаст нам ненужные демо-таблицы в БД, так что это мы сделаем после написания своей схемы и генерации модели.
В админке уже видно новые файлы, а вот в проекте все по старому. Значит, их нужно синхронизировать. Учитывая, что в локальном проекте мы ничего не меняли, можно кликнуть Download from MODXCloud - IDE предупредит, что может перезаписать файлы. Спасибо, мы в курсе. -
Теперь удаляем старые ненужные файлы и директории: - /core/components/modextra/
  • /assets/components/modextra/
  • rename_it.php
  • rename_it.sh
Если вы предусмотрительно активировали в настройках Deployment пункт Automatic upload, то все изменения будут сразу синхронизироваться: Пожалуйста, помните, что автоматическая синхронизация работает в одну сторону - от локального компьютера на сервер. Если вы редактируете файлы проекта через админку сайта - нужно синхронизировать эти изменения вручную.
Ну вот, теперь наш проект готов для первого коммита на GitHub.

Работа с GitHub

Вообще, этот пункт не является обязательным. Вас никто не заставляет вести историю изменений файлов, принимать сообщения об ошибках и предложения изменения кода.
Вы можете спокойно хранить всё у себя в компьютере и не заморачиваться с этими вашими репозиториями. Однако, хороший программист всегда держит проект в чистоте и порядке, общается со своими пользователями и помнит, что и когда он изменил в своём коде. Я уж молчу про то, что репозиторий в интернет - отличная резервная копия.
Поэтому регистрируемся на GitHub и качаем их приложение. С одной стороны, приложение это не обязательно, а с другой - оно установит консольный git, который нам очень нужен.
После установки возвращаемся в PhpStorm и бежим в настройки. Там есть поиск, в котором вводим git и видим совпадения: Вводим и проверяем данные для доступа на GitHub, а затем указываем и проверяем путь к исполняемому файлу git (не знаю, где он будет на Windows - придётся поискать).
Если вы еще не удалили директорию Sendex/.git, то сейчас самое время это сделать, потому что нам нужно создать новый локальный репозиторий.
Жмём в меню VCSEnable version control, выбираем git и сохраняем. -
Все файлики стали коричневыми, это значит, что они не добавлены в репозиторий. Нужно добавить их через контекстное меню, в котором появился новый пункт Git, и они позеленеют. -
Наверное, уже пора вкратце рассказать, что же такое система контроля версий? Грубо говоря, любая система контроля версий, это программа, которая хранит изменения ваших файлов, с возможностью откатиться. Систем довольно много, но самый популярной сейчас является Git, которую придумал Линус Торвальдс для разработки ядра Linux.
Основным отличием от конкурентов является удобное создание веток и их слияние. То есть, на каждое изменение можно создавать новую ветку, химичить там что-то, а затем вливать эти изменения в основной проект, разрешая конфликты (если возникнут).
Если никогда с таким не работал, то может быть непросто въехать. Поэтому советую почитать вот этот учебник, там все хорошо описано. Обратите внимание, что там даются знания, как работать с Git в коммандной строке, а я показываю тоже самое, только в PhpStorm.
Еще раз напоминаю, это вовсе не обязательно для разработки дополнений в MODX - это просто полезный навык, который может очень облегчить вам жизнь.
Еще одно отличие Git - это формат хранения. Он не лезет в ваши файлы, сохраняя всё нужно в одной директории .git. Фактически, Sendex/.git - это и есть репозиторий. Именно поэтому нам нужны было удалить старую директорию, которая была репозиторием modExtra.
Сейчас же мы создали новый, чистенький репозиторий Git, в котором не сохранено ни одного изменения. Этот репозиторий - локальный, он еще не привязан к GitHub, но полностью работоспособен. Вы можете копировать проект на флешку, носить туда-сюда и при этом его история изменений будет там же.
Для исключения файлов или директорий из системмы контроля версий используется файл .gitignore, и нам нужно добавить такой в корень репозитория:
.idea
Таким образом, мы отключи слежение за служебной директорией PhpStorm внутри проекта.
Удобно, не правда ли? Так зачем же тогда нужен GitHub? А вот затем, чтобы связать все ваши компьютеры, флешки и прочие хранилища одного проекта. Можно назвать GitHub центральным хранилищем кода. В настоящее время он хостит огромное количество проектов, которые разрабатываются разными людьми, и всё это не превращается в хаос. Кстати говоря, MODX разрабатывается там же.
Файл README.md в корне проекта будет служить кратким описанием, поэтому я немного его изменил и теперь можно делать первый коммит, то есть фиксирование кода. Это будет как бы точка сохранения, на которую мы сможет потом откатиться, если что.
В PhpStorm это делается просто. Открываем вкладку Changes внизу IDE, и выбираем Commit changes в контекстном меню. перед отправкой изменений в репозиторий IDE показывает нам все изменённые файлы (а это сейчас весь проект), и просит ввести описание изменений. -
В первом комите изменений как бы нет, поэтому и пишем "First commit". Далее жмём commit и игнорируем предупреждения об ошибках в коде - больно уж умный этот PhpStorm! На вкладке Version control будет лог работы Git - ну вдруг, интересно?
Всё, изменения сохранены в наш локальный репозиторий, и с этого момента при каждом изменений файла проекта он будет становиться синим. Это значит, что в него внесены изменения, которые не были сохранены в репозитории - нужно закоммитить.
Ну а теперь нам осталось только связать наш удалённый проект с GitHub и отправить изменения в него, чтобы их могли видеть все желающие. К сожалению, я не нашел как это сделать прямо в PhpStorm, поэтому придётся через командную строку.
В этом нет ничего страшного, потому что нам все равно нужно сначала создать новый проект на Github - а он уже подскажет какие комманды нужно вводить. -
Как видите, для отправки имеющегося репозитория (а это именно наш случай), нужно выполнить в коммандной строке:

git remote add origin https://github.com/bezumkin/Sendex.git
git push -u origin master
Причем, вторую команду можно запустить уже из PhpStorm. Обязательно отмечаем ветку master, в которую нужно отправить наш коммит: -
Ну вот наш проект и на GitHub! По идее, вы теперь вы можете сделать себе его форки (ответвления) и присылать мне свои коммиты, но на на сегодня хватит.
В комментариях подсказывают, что можно добавить локальный репозиторий в клиент GitHub, и оттуда уже запулить его на удалённый сервер. -
Тоже хороший вариант.

Заключение

Сегодня мы выгрузили наш проект на сервер, переименовали, синхронизировали изменения и добавили систему контроля версий. Мы даже выгрузили наш репозиторий на GitHub, чтобы все интересующиеся могли наблюдать за прогрессом нашиего курса =)
На следующем занятии продумываем логику работы компонента, пишем схему и генерируем модель БД.

65 комментариев

Виталий Князь
классная вещь. только почему при клике на ссылку "Наверх" открывается страница: > http://bezumkin.ru/lessons/course1/
Василий Наумкин
Прокрутка вверх находится в правом нижнем углу страницы, это ссылка на родительский раздел.
Щас переменую.
Илья Уткин
Только по идее-то "Следующая заметка" является предыдущей (как по времени, так и по смыслу). Я на секунду вошел в состояние когнитивного диссонанса)))
Василий Наумкин
Точно, поправил!
Виталий Князь
Есть ли возможность записывать видео? Звук не так важен, главное чтобы было видно действия...
К примеру:
Теперь удаляем старые ненужные файлы и директории: /core/components/modextra/ /assets/components/modextra/ rename_it.php rename_it.sh
У меня нет такой папки в директориях: > /core/components/ /assets/components/
В корне сайта лежит Sendex, в ней был modExtra.
Василий Наумкин
Этих директорий на сервере и не будет - они переименованы скриптом в sendex.
А вот на локальной машине директории никто не переименовывал, поэтому после синхронизации в PhpStorm должны появиться директории sendex, и остаться modextra - их то мы и удаляем.
В общем, в итоге дерево и на сервере и на локальной машине выглядит вот так:
В каждый момент времени, в директории Sendex на сервере и на локальной машине должно быть всё одинаково. С сегодняшнего момента сотояние проекта видно и на GitHub - еще проще сравнивать.
Виталий Князь
так понял что удалить нужны вот эти директории (которые "четкие")
Василий Наумкин
Верно!
Виталий Князь
Если вы еще не удалили директорию Sendex/.git, то сейчас самое время это сделать, потому что нам нужно создать новый локальный репозиторий.
13:12:12 Created Git repository in D:\project\Sendex
Но в директории не отображается папки .git:
открывать надо через адрес в файловом менеджере windows. > D:\project\Sendex\.git
Либо включить отображение скрытых файлов и папок.
Василий Наумкин
Спасибо за уточнение!
Виталий Князь
Далее жмём commit и игнорируем предупреждения об ошибках в коде — больно уж умный этот PhpStorm!
Как вариант, чтобы избежать таких сообщений, можно отключить настройку (по крайней мере я так делал, потому что не отправлялся коммит в битбакет)
Василий Наумкин
Можно и так, но я не отключаю, потому что когда идут правки компонента после выпуска - там уже не должно быть таких ошибок.
Ну и каждый может под себя настроить проверку кода. В общем, не могу прям посоветовать всем это дело отключать.
Купчинский Михаил
Василий, не совсем понял, где вводить команду "git remote add origin https://github.com/----user----/Sendex.git" если работаешь на windows машине.
Виталий Князь
Решение от меня.
1. Скачал и установил программулю отсюда https://code.google.com/p/msysgit/downloads/list 2. Запустил её (вроде бы её?!) 3.
Сменил директорию на ту где проект лежит:
cd d/project/Sendex/
Ввел команду (у каждого собственно своя):

git remote add origin https://github.com/sentyakov/Sendex.git
Перезапустил phpStorm (мб и не надо было...)
Еще я указывал данные для авторизации в гитхаб в настройках
Ну а потом все по инструкции.
Как-то работает: https://github.com/sentyakov/Sendex
Василий Наумкин
Это надо вводить в консоли Windows.
Если не знаешь, как туда попасть - то вот, Виталий помогает =)
Купчинский Михаил
это я все сделал. Только скачал клиента с самого GitHub -а . Ноу меня при выполнении этой команды выдает сообщение что то типа о том что Sendex уже есть. Но на самом github пусто
Василий Наумкин
Покажи, что именно выдаёт?
Купчинский Михаил
Василий Наумкин
Ну, значит все ок. Ты же удалял директорию .git перед этими манипуляциями?
Купчинский Михаил
Да но когда пытаюсь выполнить вторую команду то выскакивает вот это:
Купчинский Михаил
либо вот с командной строки :
Василий Наумкин
Ну тогда нужно опять удалить директорию .git, и сделать все заново:
git init
git add .
git commit -a -m "First commit"
git remote add origin https://github.com/bezumkin/Sendex.git
git push -u origin master
Это я команды для консоли написал - так быстрее.
Купчинский Михаил
Вроде что-то сдвинулось. После перезапуска phpStorm и попытки выполнить Push выдало ошибку: "fatal: unable to access 'https://githun.com/k-m-e/Sendex.git/': Failed connect to githun.com:443; No error" . Может фаервол не пускает?
Василий Наумкин
Failed connect to githun.com:443;
Будь внимательнее.
Купчинский Михаил
поменял в файле config githun.com на github.com и все сработало))). Как всегда подводит невнимательность.
Василий Наумкин
Ура!
Алексей Карташов
Я понимаю, что консольный хардкор - это здорово :), но!
У гитхаба же есть прекрасный гуишный клиент, разобраться с которым - дело 5ти минут. А дальше весь процесс отправки коммитов в удалённый репозиторий - всё через него.
В своё время не заставил себя осилить пять гит-команд - с тех пор только им (клиентом этим) и пользовался :)
Василий Наумкин
Ну и отлично, еще один способ работы - каждый выберет себе, что больше нравится.
Купчинский Михаил
У меня он и стоит. Но что-то он давал ошибку поначалу. Видно какая-то последовательность действий у меня была не правильная. Пришлось качнуть приведенный выше от сюда code.google.com/p/msysgit/downloads/list. Теперь вроде все ОК и с этим.
Alex Vakhitov
Если говорить о гуишных клиентах, то на мой взгляд лучший это source tree, настоящий комбайн.
Олег Трубин
В phpstorm в настройках нужно указать exe-файл. В случае использования этого клиента ты какой указывал?
Василий Наумкин
Это же родной клиента GitHub, там все сразу работает.
Алексей Карташов
Да, там всё сразу работает и пользоваться этим клиентом можно отдельно от phpstorm.
Но вместе с этим клиентом ставится консольный клиент под названием Git Shell (ярлык на него лежит в папке Пуск -> GitHub -> Git Shell). Ярлык этот ведёт на файл "C:\Users\\AppData\Local\GitHub\GitHub.appref-ms --open-shell", который запукает виндовый PowerShell (не cmd) с настроенным git'ом и системными переменными окружения и уже здесь можно юзать git-команды. Но не знаю, можно ли адрес этого файла вставить в phpstorm (не, можно-то - можно, но заработает ли?) - здесь пробовать надо.
Василий Наумкин
Наверное, и на windows можно просто установить экзешник:
Алексей Карташов
А это, скорей всего, он и есть. Я при установке, емнип, включал чекбокс - устанавливать ли этот самый "Command Line Tools" или нет. Это, скорей всего, для тех, кто при установке отказался.
В данный момент у меня вообще вот так:
Если выбрать "Custom", то можно указать путь хоть к тому же msysgit'у - тут уж кому как удобнее и кто что установил. Хотя для самого гуишного клиента разницы, вроде как, быть не должно.
git.exe лежит чуть глубже: c:\Users\username\AppData\Local\GitHub\PortableGit_0f65...9ef87\bin\git.exe
Илья Ершов
Хрень какая-то... Пользуюсь виндовым клиентом Git'а. Прописал в .gitignore: .idea
А оно всё равно отслеживает всё содержимое этой папки... пробовал по разному: .idea .idea/ .idea/*
Василий Наумкин
Видимо, файлы уже добавлены в историю версий, поэтому их нужно исключить при помощи git rm.
Попробуй выполнить в консоли:
git rm .idea
Вот здесь больше информации.
Олег Трубин
Все файлики стали коричневыми, это значит, что они не добавлены в репозиторий. Нужно добавить их через контекстное меню, в котором появился новый пункт Git, и они позеленеют.
Пытаюсь добавить файлы в репозиторий и получаю сообщение об ошибке. См. скриншот. Как бы это побороть?
Василий Наумкин
Попробуй отключить проверку CRLF
Сними галочку - это замена символов переноса строки.
Олег Трубин
Спасибо за ответ, но снятие галочки не помогло. Я пользуюсь msysgit. Ранее я сделал как указано здесь http://githowto.com/ru/setup
git config --global core.autocrlf true
git config --global core.safecrlf true
сейчас выполнил обратную операцию:
git config --global core.autocrlf false
git config --global core.safecrlf false
ошибка исчезла. Но вот не знаю, не "аукнется" ли мне это в будущем.
Василий Наумкин
Не должно.
Я сам далеко не мега-мастер в Git, пользуюсь только основными возможностями.
Alex Vakhitov
Чтобы не аукнулось можно поставить

git config --global core.safecrlf true
это предотвратит автозамену переводов строк, ну и можно в phpStorm включить определенный тип перевода строк
Олег Трубин
и как считаешь какой тип выставить? У меня сейчас по умолчанию виндовый \r\n есть ли какой-то смысл его менять?
Alex Vakhitov
Если работаешь один или вся команда на вин, то можно все оставлять как есть и все настройки оставлять прежними, если нет то исправлять ошибку которую вызывает core.autocrlf true , это довольно распространенная штука и нагуглить how to статью с решением проблемой не будет
Алексей Марченко
Василий , что то я наверное упустил нет пункта "Add to VCS" Где что мог упустить ? Спасибо !
Василий Наумкин
Дык это тоже самое.
Похоже, в версии для Windows немного иначе называется.
Алексей Марченко
У меня Linux. Кстати . при тыканье вообще ничего не происходит ...... так ладно разбираюсь .. спасибо
Василий Наумкин
Если Linux (поздравляю, кстати!), то просто зайди в директорию проекта из консоли и набери
git add .
Это добавит все новые файлы в индекс Git.
Алексей Марченко
А вот так сработало )))) гуд !!! Спасибо! уже лет 10 как на linux .... хороша система ..
Василий Наумкин
Для разработки - вообще лучшая.
Алексей Марченко
ну я в разработке недавно, все одминил ... UPD у меня PhpStorm-6.0.3 был вот и разница в названии , обновил до 7-го .. все ок стало !!! И пункт стал как и надо "Add to VCS"
Василий Наумкин
Ну и ладушки!
А у меня нету такого пункта. Файлики серые ) Вот тут
А все сделал. Невнимательность. в консоли git add .
А кстати вопрос. Получается Мы делаем изменения, потом делаем коммит. Это все сохраняется на локалке, верно? А потом делаем пуш и на гитхабе все перезаписывается. А в чем прикол контроля версий? Я что то поменял, пушнул, все новое, кто то поменял, пушнул и ппц че я там делал. Или я не так понял?
Alex Vakhitov
Пушатся только изменения, а не весь код, так что ничего тому что ты написал не угрожает. Самый большое достоинство это когда ты делаешь свою часть, другой разработчик свою, третий свою и тд. и благодаря гиту ты можешь видеть историю всех изменений, всегда держать у себя правильную версию файлов и плюс в репозитории всегда правильный собранный код
А можно будет вернуть изменения например до такого то коммита?
Alex Vakhitov
Да, можно. Еще можно делать ветки для экспериментов и быстрого возврата к исходному коду, или включения в репозиторий
Василий Наумкин
Просто посмотри историю живого проекта, например miniShop2.
У каждого пункта есть Browse code и можно читать код на любом этапе разработки.
Спасибо. Буду разбираться. пока не въехал.
Пересел на линукс, делаю все заново, вопрос. Установил git apt-get install git а куда он установил? Не могу указать путь. Не найду что то
Василий Наумкин
Обычно /usr/bin/git
И вправду. раз 5 искал там не находил О_о. Спасибо! буду дальше осваивать. Кстати линукс тема)
Василий Наумкин
Да, для работы - самое то.
Удачи!
bezumkin.ru
Personal website of Vasily Naumkin
Прямой эфир
Александр Наумов
23.07.2024, 00:20:37
Василий, спасибо большое!!
Василий Наумкин
01.07.2024, 11:56:41
Да, верно, именно так. А в контроллере, скорее всего, ловить данные методом post.
Василий Наумкин
26.06.2024, 09:38:15
О, точно, вылезает если не залогинен. Спасибо, исправил!
Василий Наумкин
09.04.2024, 04:45:01
> Ошибка 500 Это не похоже на ошибку Nginx, это скорее всего ошибка PHP - надо смотреть его логи. ...
Василий Наумкин
20.03.2024, 21:21:52
Volledig!
Андрей
14.03.2024, 13:47:10
Василий! Как всегда очень круто! Моё почтение!
russel gal
09.03.2024, 20:17:18
> А этот стоило написать хотя бы затем, чтобы получить комментарий от юзера, который ничего не писал...
Александр Наумов
27.01.2024, 03:06:18
Василий, спасибо! Извини, тупанул.
Василий Наумкин
22.01.2024, 07:43:20
Давай-давай!
Василий Наумкин
24.12.2023, 14:26:13
Спасибо!