Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Both sides previous revision Попередня ревізія Наступна ревізія | Попередня ревізія | ||
git [2014/08/23 00:20] wombat [Слияние веток] |
git [2017/06/12 22:52] (поточний) wombat gource |
||
---|---|---|---|
Рядок 1: | Рядок 1: | ||
====== GIT ====== | ====== GIT ====== | ||
+ | |||
+ | В простейшем виде порядок работы с GIT-репозиторием примерно такой: | ||
+ | |||
+ | - Создание нового локального репозитория или клонирование уже существующего репозитория. | ||
+ | - Выбор рабочей ветки, если их несколько. | ||
+ | - Внесение изменений в проект и их запись. | ||
+ | - Обновление удалённого репозитория из локального рабочего каталога. | ||
===== Создание репозитория ===== | ===== Создание репозитория ===== | ||
+ | |||
+ | Создаём папку, которая станет репозиторием: | ||
+ | | ||
+ | mkdir MyProject | ||
+ | cd MyProject | ||
+ | |||
+ | Затем инициализируем её при помощи git. При этом создаётся вложенная подпапка ''.git''. | ||
+ | |||
+ | git init | ||
+ | |||
+ | Можно также внести настройки владельца репозитория: | ||
+ | |||
+ | git config user.email "wombat@example.com" | ||
+ | git config user.name "Vladimir" | ||
+ | | ||
===== Клонирование репозитория ===== | ===== Клонирование репозитория ===== | ||
- | git clone https://github.com/v2e/uTox | + | git clone https://github.com/Vladimir/MyProject |
+ | |||
+ | git clone ssh://<username>@<server>:<port>/home/git/project.git | ||
+ | | ||
Рядок 11: | Рядок 36: | ||
git checkout <branch_name> | git checkout <branch_name> | ||
+ | | ||
+ | |||
+ | ===== Обновление с удалённого репозитория ===== | ||
+ | |||
+ | git checkout <branch_name> | ||
+ | git pull | ||
+ | |||
+ | ===== Создание ветки ===== | ||
+ | |||
+ | git checkout -b <branch_name> | ||
+ | |||
+ | ((http://www.git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging#Basic-Branching)) | ||
+ | |||
+ | |||
===== Слияние веток ===== | ===== Слияние веток ===== | ||
- | git merge --no-ff <another_branch_name> | + | git merge <another_branch_name> |
+ | |||
+ | Если получаем ошибку вида | ||
+ | |||
+ | <file_name>: needs merge | ||
+ | error: you need to resolve your current index first | ||
+ | |||
+ | при каком-то действии, то текущее задание на слияние можно отменить так: | ||
+ | |||
+ | git merge --abort | ||
+ | |||
+ | | ||
===== Разрешение конфликтов ===== | ===== Разрешение конфликтов ===== | ||
+ | |||
+ | Если при попытке слияния веток git выдаёт ошибку вида: | ||
+ | |||
+ | ''Automatic merge failed; fix conflicts and then commit the result.'' | ||
+ | |||
+ | То нужно устранить конфликты в содержимом конфликтующих файлов вручную, после чего повторить попытку слияния. | ||
http://genomewiki.ucsc.edu/index.php/Resolving_merge_conflicts_in_Git#Common_questions_for_when_git_fails_during_the_merge | http://genomewiki.ucsc.edu/index.php/Resolving_merge_conflicts_in_Git#Common_questions_for_when_git_fails_during_the_merge | ||
+ | git add <edited_conflicting_file1> | ||
+ | git add <edited_conflicting_file2> | ||
+ | git commit | ||
+ | git merge --no-ff <another_branch_name> | ||
+ | | ||
+ | |||
+ | ===== Внесение изменений ===== | ||
+ | |||
+ | После редактирования некоторых файлов в проекте, можно в любое время проверить состояние своего локального GIT-репозитория: | ||
+ | |||
+ | git status | ||
+ | |||
+ | Его вывод покажет, какие были произведены изменения и подскажет, как их правильно сохранить. Обычно для сохранения своих изменений достаточно сделать следующее: | ||
+ | |||
+ | git add <file> | ||
+ | git commit | ||
+ | |||
+ | Последняя команда откроет текстовый редактор для вставки короткого (или не очень) комментария, описывающего внесённые изменения. Комментарий не может быть пустым. | ||
+ | |||
+ | |||
+ | |||
+ | ===== Загрузка на сервер ===== | ||
+ | |||
+ | git push origin <branch_name> | ||
+ | |||
+ | |||
+ | ===== Удаление ветки ===== | ||
+ | |||
+ | ==== локальной ==== | ||
+ | |||
+ | git branch -d <branch_name> | ||
+ | |||
+ | ==== удалённой ==== | ||
+ | |||
+ | git push origin --delete <branch_name> | ||
+ | |||
+ | |||
+ | |||
+ | ===== Изменение комментария ===== | ||
+ | |||
+ | ==== К последнему коммиту ==== | ||
+ | |||
+ | |||
+ | Если возникла необходимость изменить комментарий к сохранённому коммиту, не отправленному на сервер, нужно выполнить((http://stackoverflow.com/a/179147)) | ||
+ | |||
+ | git commit --amend | ||
+ | |||
+ | Если изменения уже были отправлены на сервер, то после этого нужно отправить новую информацию на север | ||
+ | |||
+ | git push <remote> <branch> --force | ||
+ | |||
+ | |||
+ | ==== К ранним коммитам ==== | ||
+ | |||
+ | Если нужно отредактировать комментарий не к последнему коммиту, а к некоторому более раннему, необходимо выполнить(( http://stackoverflow.com/a/180085)) | ||
+ | |||
+ | git rebase --interactive $parent_of_flawed_commit | ||
+ | |||
+ | где ''$parent_of_flawed_commit'' -- идентификатор коммита, предшествующего самому раннему из редактируемых. | ||
+ | |||
+ | После этого откроется редактор со списком коммитов, начиная с самого старого из подлежащих редактированию. Возле каждого из них нужно выставить соответствующее слово, которое обозначает действие для данного коммита. Согласно подсказке, которую, Git показывает прямо в редакторе, | ||
+ | |||
+ | <code> | ||
+ | # p, pick = use commit | ||
+ | # r, reword = use commit, but edit the commit message | ||
+ | # e, edit = use commit, but stop for amending | ||
+ | # s, squash = use commit, but meld into previous commit | ||
+ | # f, fixup = like "squash", but discard this commit's log message | ||
+ | # x, exec = run command (the rest of the line) using shell | ||
+ | </code> | ||
+ | |||
+ | После этого нужно следовать подсказкам Git. Чаще всего, всё сведётся просто к устранению конфликтов и выполнению команды | ||
+ | |||
+ | git rebase --continue | ||
+ | |||
+ | дл каждого конфликта. | ||
+ | |||
+ | Для публикации исправленных записей используется команда | ||
+ | |||
+ | git push origin <ветка> -f | ||
+ | |||
+ | После чего необходимо оповестить всех участников проекта о необходимости скопировать эти изменения к себе. | ||
+ | |||
+ | |||
+ | ====== Визуализация ====== | ||
+ | |||
+ | ===== Картинка ===== | ||
+ | |||
+ | ===== Видео ===== | ||
+ | |||
+ | Программа [[http://gource.io/ | Gource]] умеет создавать красивое видео с визуализацией хода разработки, исходя из лога Git. | ||
+ | |||
+ | gource -1280x720 -o - | ffmpeg -y -r 60 -f image2pipe -vcodec ppm -i - -vcodec libx264 -preset ultrafast -crf 1 -threads 0 -bf 0 gource.mp4 | ||
+ | |||
+ | gource -1280x720 -o gource.ppm | ||
+ | ffmpeg -y -r 60 -f image2pipe -vcodec ppm -i gource.ppm -vcodec libx264 -preset ultrafast -crf 1 -threads 0 -bf 0 gource.mp4 | ||
+ | |||
+ | gource -1280x720 -o - | ffmpeg -y -r 60 -f image2pipe -vcodec ppm -i - -vcodec libvpx -b 10000K gource.webm | ||
+ | |||
+ | | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ====== Ссылки ====== | ||
+ | |||
+ | ===== Книги ===== | ||
+ | |||
+ | ==== На русском ==== | ||
+ | |||
+ | [[http://www.git-scm.com/book/ru | Pro Git book]] | ||
+ | ==== На английском ==== | ||
+ | [[http://www.git-scm.com/book/ | Pro Git book]] | ||