четверг, 29 августа 2013 г.

Настройка Git и Qt Creator для работы с GitHub в Windows




Данная статья является урезанной и дополненной версией статьи "Настройка Git’а и работа с удаленными репозиториями в Qt Creator под Windows 7". На данный момент статья недоступна по причине превышения лимита ресурсов процессора на хостинге, поэтому дубль не помешает. Кэш статьи в google.

Содержание:
1. Регистрация на GitHub
2. Создание нового репозитория на GitHub
3. Установка и настройка Git-клиента
4. Добавление проекта в удаленный репозиторий
5. Настройка Qt Creator
6. Работа с проектом и фиксация изменений


1. Регистрация на GitHub


2. Создание нового репозитория на GitHub


На GitHub можно создавать только Public репозитории. Для Private репозиториев необходимо либо перейти на платный аккаунт, либо воспользоваться сервисом BitBucket.
Файлы README.md, .gitignore и LICENSE создаются опционально.
.gitignore - файл с описанием файлов-исключений для git, которые не должны попадать в репозиторий.


3. Установка и настройка Git-клиента

Существуют различные GUI-клиенты для GitHub, например "GitHub for Windows", но у него нет shell для работы с командной строкой, а через cmd.exe работать с git крайне неудобно. Я рекомендую установить официальный клиент Git (он же msysgit для Windows).

Устанавливаем клиент, запускаем "Git Bash" и вводим следующие команды (для вставки используйте клавиши Shift+Insert):

Задаём глобальное имя и e-mail:
git config --global user.email "my_email@mail.com"
git config --global user.name "my_nickname"
Устанавливаем метод по-умолчанию для push в simple.
git config --global push.default simple
Краткое описание методов:
nothing - "git push" не будет работать без явно указанных имени и ветки репозитория
current - обновляется удалённая ветка, имя которой совпадает с текущей веткой
upstream - обновляется upstream ветка, т.е. ветка, из которой выполняется "pull"
simple - то же, что и "upstream", только дополнительно выполняется проверка на совпадение имён веток (самый безопасный метод)
matching - обновляет все ветки по имени (метод по-умолчанию в Git < 2.0)
Если не устанавливать метод, то при "git push" будут появляться warning сообщения, что в общем никак не сказывается на работе.

Генерируем SSH-ключ (пароль не вводить, т.к. возникнут сложности с "Qt Creator", либо придётся ставить SSH-agent дополнительно):
ssh-keygen -t rsa -C "my_email@mail.com"
Эта команда создаст SSH-ключ в каталоге %HOMEPATH%\.ssh
%HOMEPATH% - путь к домашнему каталогу пользователя (обычно C:\Users\%UserName%).
Далее нужно скопировать содержимое файла %HOMEPATH%\.ssh\id_rsa.pub в буфер обмена вручную либо командой
clip < .ssh/id_rsa.pub
Добавляем SSH-ключ в GitHub:
1) "Account settings"
2) "SSH Keys"
3) "Add SSH key"
4) Вводим произвольное имя ключа и вставляем из буфера обмена наш SSH-ключ, затем нажимаем кнопку "Add key".



4. Добавление проекта в удаленный репозиторий

Уже начал писать статью по проделыванию всех необходимых операций непосредственно через "Qt Creator", но обнаружил, что через "Git Bash" это гораздо проще, да и "Qt Creator" не позволяет установить upstream ветку, что делает невозможным его работу с удалённым репозиторием.

Запускаем "Git Bash" и переходим в директорию с исходным кодом проекта:
cd /c/Projects/My_project
Стоит обратить внимание на формат пути. Также путь можно указать следующим образом:
cd C:\\Projects\\My_project
Затем, будучи в корневой папке нашего проекта, выполняем следующие команды:

- Инициализируем пустой локальный репозиторий.
git init
- Добавляем файлы в репозиторий (точка или звездочка - добавить все файлы из директории). Файлы можно добавлять по маске, например, git add *.cpp *.h - добавит все файлы с расширением "*.cpp" и "*.h".
git add * 
- Записываем изменения в репозиторий.
git commit -m "First commit" 
- Устанавливаем связь между локальным и удаленным репозиториями. Имя удалённого репозитория может быть произвольным идентификатором латинскими буквами, но для простоты работы используем имя по-умолчанию "origin". URL репозитория необходимо взять на GitHub
git remote add origin git@github.com:Nick/MyProject.git
- Устанавливаем ветку upstream. Это позволит нам использовать "git pull" и "git push" без указания ветки.

[UPD 30.10.2013]
Неоднократно создавал репозитории по этой инструкции и обнаружил, что git хочет fetch здесь:
git fetch
[/UPD]
git branch -u origin/master
- Забираем существующие файлы из удаленного репозитория, которых нет в локальном (например, README.md или .gitignore).
git pull
- Отправить исходники в удаленный репозиторий.
git push
Если при выполнении команды "git push" или "git pull" вас спросят про добавление хоста в файл known_hosts, смело подтверждайте это, введя “yes”.

После выполнения всех команд будет создан локальный репозиторий, и обновлён репозиторий на GitHub.


5. Настройка Qt Creator

Запускаем "Qt Creator" под администратором (иначе у меня возникла ошибка под Windows 7). Идём в "Tools" -> "Options" -> "Version Control" -> "Git".
- В поле "Prepend to PATH" указываем путь к git.exe
- Cтавим галку на пункте "Set "HOME" environment variable".
- Галку "Prompt on submit" можно снять, чтобы "QT Creator" не запрашивал каждый раз подтверждение на commit.
Сохраняем настройки и перезапускаем "Qt Creator".


6. Работа с проектом и фиксация изменений

Открываем проект и вносим какие-либо изменения.
Идём в "Tools" -> "Git" -> "Local Repository" -> "Commit..."
В поле Description вводим описание коммита. Ниже выбираем файлы для коммита (Check all для выбора всех файлов). Жмём кнопку "Commit x/x File(s)"
Этой командой мы сохраним изменения в нашем локальном репозитории.
Затем, выполнив "Tools" -> "Git" -> "Remote Repository" -> "Push" мы загрузим сделанные нами изменения в удаленный репозиторий на GitHub.

В начало

7 комментариев:

  1. В далеком 2019 статья помогла :) Спасибо

    ОтветитьУдалить
  2. И в 2020-м тоже :-D
    "Вельми понеже!"

    ОтветитьУдалить
  3. Cпасибо, помогло. В процессе, после git fetch столкнулся с ошибкой, что не мог сделать push\pull. Проблему решил: нужно добавить аргумент в конце git pull --allow , где - нажатие на кнопку, он автоматически подскажет аргумент.

    ОтветитьУдалить
    Ответы
    1. сайт счёт угловые скобки за html. после --allow идёт tab

      Удалить
  4. 2022 год. Статья всё ещё актуальна и помогла всё настроить

    ОтветитьУдалить