Работа с Git в PhpStorm (JetBrains).

mbaev 31.01.2014, 09:58

В прошлой статье мы говорили о том как создать Git репозиторий. Теперь поговорим о том как им пользоваться из IDE PhpStorm.

Создание нового клона

  1. Если создаем проект из лаунчера.

    Checkout from Version Control: Здесь можно выбрать GitHub, если проект хранится на GitHub'е (тогда нужно будет ввести только данные для аутентификации) или Git, если проект находится на другом сервере, тогда необходимо ввести данные для соединения с сервером:

    • Get Repository URL - адрес до репозитория в формате: ssh://ИмяПользователяХостинга@адресхостинга/полный/путь/до/репозитория. Адрес хостинга рекомендую указывать в виде ip. Так при работе не тратится время на соединение с DNS сервером, чтобы получить этот самый ip.
    • Parent Directory - это локальная настройка. Полный путь до папки-родителя локального сайта (в денвере по умолчанию всегда папка с именем сайта)
    • Directory Name - папка сайта (в денвере по умолчанию всегда www). Если эта папка уже существует, IDE предупредит об этом.
  2. Если запущен проект то все это находится в меню VCS.

Инициализация проекта

Будем считать, что новый проект создан.
Перед началом инициализации желательно настроить игнорируемые файлы.
В масках нужно указывать дописывать слеш в начале строки указывая, что маска работает от корня проекта. По другому PHPStorm не понимает.
1. Иницииализируем: VCS->Enable Version Control Integration...: выбираем Git и жмем Ok.
2. Добавляем файлы в первую фиксацию. Жмем Ctrl+Alt+A или ПКМ(по корню проекта)->Git->Add to VCS.
3. Фиксируем файлы. VCS->Commit Changes...: внизу вписываем коммент (например "First fixation"), вверху добавляем автора. Жмем Commit. (можно сразу сделать Commit и Push выбрав соответствующий пункт в селекте "Commit")

В дереве проекта по умолчанию не отображаются папки, в которых есть изменения. Чтобы их показать идем сюда: File->Settings->Version Control: Show directories with changed descendants.

Похожие статьи

Profile picture for user bumble

Гость , ,

Еще бы про rebase написал - было бы супер!

Profile picture for user bumble

Александр , ,

Здравствуйте! У меня в phpStorm создан проект с которым я работаю на локалке. Есть хостинг. Я хочу чтобы все действия по обновлению файлов сразу через Git переносить на хостинг.

Вбиваю данные хостинга, просит ввести пароль. Ввожу пароль, затем: Do you want to add this host to known hosts database? . Жму "Yes".

Далее выскакивает '/www/localhost1.su/git' does not appear to be a git repository
Could not read from remote repository.

Что я делаю не так? Подскажите пожалуйста! Как мне настроить репозиторий удалённый?

Profile picture for user mbaev

mbaev , ,

Должно быть выполнено 2 условия:

  1. Путь до репозитория должен быть верный
  2. Удалённый репозиторий должен быть склонирован с ключом --bare

Скорее всего, у вас неверный адрес удаленного репозитория. Проверьте, что по указанному адресу есть такие папки:

  1. .
  2. ..
  3. branches
  4. hooks
  5. info
  6. objects
  7. refs

и файлов

  1. config
  2. description
  3. HEAD
  4. packed-refs


Если вы сами создавали удаленный репозиторий, то проверьте, что вы все правильно сделали Создание git репозитория.

Для отладки можете запустить у себя на локали комманду
 

  1. git clone git://<server>/<repo_path>.git
  2. // или
  3. git clone <user>@<server>:<pass>/<repo_path>.git

Можете добавить флаг -v и получить больше информации.

Надеюсь, этой информации вам хватит. Удачи в отладке! Пишите вопросы.

Profile picture for user bumble

Александр , ,

Здравствуйте! Настроил репозиторий. Делаю push из phpStorm. Выходит сообщение: Push successful: Everything is up-to-date.

Захожу на сайт, который размещён на vps (на который я делал push) - всё старое. Никаких изменений не вижу.

Подскажите пожалуйста, что может быть не так? Спасибо!

Profile picture for user mbaev

mbaev , ,

  1. Может быть удалённый репозиторий настроен на другой адрес. Убедитесь, что выставлен правильный адрес в VCS->Git->Remotes...
  2. У Вас на сервере не срабатывает хук, который деплоит код потому, что пушить вы можете только в bare репозиторий, который содержит только историю изменений, без кода. Почитайте - https://mbaev.com/content/sozdanie-git-repozitoria
Profile picture for user bumble

Александр , ,

Путь проверил - всё верно.

Задал пользователя и его @mail на хостинге, как в статье, что Вы порекомендовали прочитать. Действия прошли успешно.

Склонировал успешно репозиторий с --bare.

Делаю push. Наблюдаю в консоли phpStorm следующие записи:

00:47:07.496: [project.loc] git -c core.quotepath=false push --progress --porcelain site.ru refs/heads/master:master --set-upstream
Counting objects: 57, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (56/56), done.
Writing objects: 100% (57/57), 13.33 KiB | 0 bytes/s, done.
Total 57 (delta 45), reused 0 (delta 0)
To ssh://xx.xx.1xx.1x4/home/admin/web/site.ru/public_html
     refs/heads/master:refs/heads/master    4297b5e..c4a8fe0
Branch master set up to track remote branch master from site.ru.
Done

Захожу на сайт - всё как старое было так и есть...

Вообщем не придётся наверное с git удалённо работать - хрень какая-то да и только.

Что я делаю не так - не понимаю...

Спасибо Вам за ответы и за внимание!

Profile picture for user bumble

Александр , ,

Здравствуйте!

Делаю так:

    1. Через программу PuTYY соединяемся по протоколу ssh с сервером введя логин root и пароль.

    2. Переходим в папку с проектом cd ../var/www/home/папка_с_сайтом.

    3. выполняем следующие команды:     

  1.    mkdir .git
  2.  
  3.    chmod 755 .git
  4.  
  5.    cd .git
  6.  
  7.    git init --bare
  8.  
  9.    git config --global user.name "Aleksander"
  10.  
  11.    git config --global user.email моя почта

На локальном пк:

в папке с проектом выполняю:

  1.     git init
  2.     git config --global user.name "Aleksander"
  3.     git config --global user.email моя почта
  4.     git add . -  
  5.     git commit -m "initial project version"

В PhpStorm:

    1. Запускаем IDE PhpStorm и индексируем проект с локальным git репозиторием.
    2. Переходим во вкладку: VCS -> Git -> Remotes...
    3. Добавляем новый удалённый сервер по примеру:
        ssh://root@xxx.xx.x.143/var/www/home/папка_с_сайтом (в которой лежит инициализированный git репозиторий - .git)

        Поработав с кодом, делаю на локальном пк коммит, затем делаю push. Захожу на сайт на домене - всё отлично - все правки приминились - все файлы обновились.

        Работаю опять с кодом. Делаю ещё один коммит.... Затем вновь делаю push: Done..... Захожу на сайт на домене - всё как было старое так и есть.

        Пробовал проделывать данные действия многократно. Итог один и тот же. Пробовал делать с хуками и без них. Брал на просторах интернета различные хуки post-update и post-receive. Всё так же: когда делаю первый push всё отлично - последующие не обновляют файлы проекта. Сервер хуки поддерживает!

       Затёр до дыр книгу "ПроGit", но там даже в разделе "удалённое управление" ничего не говорится про использование ключей --bare (многое не договорено, хотя чуть-ли не бестселлер считается о gitе).

       Нашёл публикацию здесь: https://ru.stackoverflow.com - Настройка и развёртывание проекта с помощью git.

      Там ещё сказано, что на сервере должен быть установлен gitlab.

Итог всей писанины.... 

      Прошу опять совета, подсказки, комментария.... Что не так в моих действиях? Почему после push файлы обновляются на удалённом сервере только в первый пуш, а в последующие нет?

      Где должен лежать хук? На локальном ПК или на сервере (пробовал размещать и там и там).

      Если всё так просто, то почему у меня не получается? Что не договаривают в книге и в публикациях?

Profile picture for user mbaev

mbaev , ,

Вы не правильно используете ключ --bare. Читайте здесь как создать гит репозиторий.
Bare - это репозиторий, который хранит изменения без кода.
На схеме из поста по ссылке, Bare - это "Основной репозиторий", а там где вы храните сайт - "рабочий сайт". Один из "Программистов" - это ваш локальный компьютер.

Profile picture for user bumble

Александр , ,

По Вашей инструкции вообще ещё хуже стало. То хоть что-то да мог обновить, а сейчас:

does not appear to be a git repository

Вообщем, не рабочие примеры. Буду искать дальше решение задачи.

Profile picture for user mbaev

mbaev , ,

Пример рабочий. Данный сайт контролируется гитом по данной схеме. Вы просто допускаете ошибку где-то.
Попробуйте выполнить скрипт

  1. mkdir -p ./remote.machine/my-site.ru && cd "$_"
  2. touch a.file
  3. git init && git add . && git commit -m "Init. Added A file"
  4. cd ../ && git clone --bare ./my-site.ru ./my-site.ru.git
  5. cat >> ./my-site.ru.git/hooks/post-update << EOF
  6. #!/bin/sh
  7. cd ../my-site.ru || exit
  8. unset GIT_DIR
  9. git pull origin master
  10. exec git update-server-info
  11. EOF
  12. cd ./my-site.ru
  13. git remote add origin "../my-site.ru.git"
  14. mkdir -p ../../local.machine && cd "$_"
  15. git clone ../remote.machine/my-site.ru.git && cd ./my-site.ru
  16. # Here your usual actions
  17. touch b.file
  18. git add .
  19. git commit -m "Added B file"
  20. git push origin master

Если после выполненных действий в папке remote.machine/my-site.ru появился файл b.file, значит всё прошло успешно и теперь у вас есть полная система, где
remote.machine/my-site.ru - это ваш сайт на удалённом сервере
remote.machine/my-site.ru.git - это bare репозиторий
local.machine/my-site.ru - это ваш локальный сайт


Пишите комменты, если нужны объяснения.

Profile picture for user bumble

Александр , ,

Здравствуйте! С Новым годом!

Сделал всё по принципу описанному здесь: https://habrahabr.ru/post/127213/

Единственное только у меня уже были все исходники проекта на локальном ПК, поэтому, чтобы всё не перекачивать заново, я не делал clone, а просто скопировал git bare репозиторий на локальный ПК, а затем, настроив remote с ним на сервере, вытащил все изменения командой pull прямо из IDE phpStorm.

Меняю файлы, делаю commit, делаю push - всё работает, изменения заливаются на хост, всё обновляется.

Только хук не срабатывал на сервере: error: cannot run hooks/post-update: No such file or directory.

Приходилось заходить через ssh на сервер и делать pull ветки из bare репозитория в который я изменения пушил с локального ПК.

Основные особенности: хук должен лежать в bare репозитории. Файл хука должен быть в кодировке Unix без возврата кареток, должен быть исполним.

Вообщем... Это ПОБЕДА !!!