Користувальницькькі налаштування

Налаштування сайту


git

Це стара версія документу!


GIT

В простейшем виде порядок работы с GIT-репозиторием примерно такой:

  1. Создание нового локального репозитория или клонирование уже существующего репозитория.
  2. Выбор рабочей ветки, если их несколько.
  3. Внесение изменений в проект и их запись.
  4. Обновление удалённого репозитория из локального рабочего каталога.

Создание репозитория

Создаём папку, которая станет репозиторием:

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/Vladimir/MyProject
git clone ssh://<username>@<server>:<port>/home/git/project.git

Выбор ветки

git checkout <branch_name>

Обновление с удалённого репозитория

git checkout <branch_name>
git pull

Создание ветки

git checkout -b <branch_name>

1)

Слияние веток

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

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>

Изменение комментария

К последнему коммиту

Если возникла необходимость изменить комментарий к сохранённому коммиту, не отправленному на сервер, нужно выполнить2)

git commit --amend

Если изменения уже были отправлены на сервер, то после этого нужно отправить новую информацию на север

git push <remote> <branch> --force

К ранним коммитам

Если нужно отредактировать комментарий не к последнему коммиту, а к некоторому более раннему, необходимо выполнить3)

git rebase --interactive $parent_of_flawed_commit

где $parent_of_flawed_commit – идентификатор коммита, предшествующего самому раннему из редактируемых.

После этого откроется редактор со списком коммитов, начиная с самого старого из подлежащих редактированию. Возле каждого из них нужно выставить соответствующее слово, которое обозначает действие для данного коммита. Согласно подсказке, которую, Git показывает прямо в редакторе,

#  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

После этого нужно следовать подсказкам Git. Чаще всего, всё сведётся просто к устранению конфликтов и выполнению команды

git rebase --continue

дл каждого конфликта.

Для публикации исправленных записей используется команда

git push origin <ветка> -f

После чего необходимо оповестить всех участников проекта о необходимости скопировать эти изменения к себе.

Ссылки

Книги

На русском

На английском

git.1421882472.txt.bz2 · В останнє змінено: 2015/01/22 01:21 by wombat