Показать страницуИстория страницыСсылки сюдаCopy this pageExport to MarkdownODT преобразованиеНаверх Вы загрузили старую версию документа! Сохранив её, вы создадите новую текущую версию с этим содержимым. Медиафайлы{{tag>scm git}} ====== Git - распределённая система управления версиями. ====== ===== Инструкции ===== {{:071433372a.png?200|}} {{:18333fig0106-tn.png?200|}} ===== Инициализация / init ===== <code bash> $ git init $ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com </code> === Linux/Unix/Macos === == global == <code bash> $ git config --global core.filemode false </code> == local == <code bash> $ git config core.filemode false </code> === Windows === == global == <code bash> $ git config --global core.filemode false $ git config --global core.preloadindex true $ git config --global core.fscache true $ git config --global gc.auto 256 $ git config --global status.submoduleSummary false </code> == local == <code bash> $ git config core.filemode false $ git config core.preloadindex true $ git config core.fscache true $ git config gc.auto 256 $ git config status.submoduleSummary false </code> ===== Конфигурация ===== ==== Вывод установленных параметров ==== <code bash> $ git config --local -l </code> === Установка параметров === <code bash> $ git config --local core.filemode true </code> ===== Актуализация изменений ===== <code bash> $ git checkout -- . && git pull && git submodule update --init --recursive </code> ==== Локальное хранилище / stage ==== * Добавление в индекс * **git add <имя_файла>** * **git add * ** * **git add .** * **git add -A** - Добавить в индекс только удаленные файлы * Удаление из индекса * **git rm <имя_файла>** * **git rm *.php** * **git reset** - Отменить индексацию последних изменений * **git rm --cached <ИМЯ_ФАЙЛА>** - Удалить из индекса файл и добавить в игнор. Файл останется в каталоге. * **git reset HEAD benchmarks.rb** - Отменить индексацию файла benchmarks.rb ==== Локальный репозиторий === * **git clone** http://site.com/git * Фиксация изменений * **git commit -m "Описание коммита"** * **git checkout <hash-коммита>** - Переключиться на определенный коммит * **git commit --amend** - Удаление последнего коммита * Восстановление файлов из репозитория * **git checkout <branch>** # Перемещение указателя HEAD на комит или ветку * **git reset --hard HEAD~n** # Перемещение указателя HEAD на комит * **git checkout -- <имя_файла>** - восстановление файла из репозитория * **git reset --hard origin/master** - удалить все локальные изменения и коммиты * **git reset --hard origin/master** * **git reset --hard HEAD^** # Сбросить все локальные измеения до текущего состояния * Перемещение комитов * **git rebase -i HEAD~n** # Позволяет переупорядочивать, менять комменты, выборочно удалять и прочее * Ветвление branch * **git branch bug1** Создать ветку bug1 * **git branch -d bug1** Удалить ветку bug1 * Пересадка веток / rebase * **git rebase master** - git checkout master # переключаемся на бранч master - git rebase bug1 # пересаживаем историю изменений ветки bug1 в master * или - git checkout bug1 - git rebase master - git checkout master - git merge bug1 # При этом произойдет fast-forward merge === Отмена коммитов === == До комита == * git reset --hard HEAD == После комита == * git reset --hard ORIG_HEAD == Документация == * http://githowto.com/ru/undoing_committed_changes * http://uleming.github.io/gitbook/3_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%82%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC_%D0%B8_%D1%81%D0%BB%D0%B8%D1%8F%D0%BD%D0%B8%D0%B5%D0%BC.html ==== Временное хранилище / Stash ==== Часто возникает такая ситуация, что пока вы работаете над частью своего проекта, всё находится в беспорядочном состоянии, а вам нужно переключить ветки, чтобы немного поработать над чем-то другим. [[http://git-scm.com/book/ru/v1/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B-Git-%D0%9F%D1%80%D1%8F%D1%82%D0%B0%D0%BD%D1%8C%D0%B5|Подробнее...]] Вместо **git reset --hard**, можно сначала файлы сохранять во временное хранилище, затем применять изменения. * **git stash** Поместить файлы во временное хранилище * **git stash apply** Применить последнее изменение из стека / лога к текущей рабочей копии * **git stash drop** Удалить последнее изменение в стеке / лога * **git stash list** Показать все изменения в стеке / логе * **git stash show** Показать последнее измененеие в стеке / логе (патч) * **git stash pop** Применить последнее изменение из стека к текущей рабочей копии и удалить его из стека * **git stash clear** Очистить стек изменений ==== Удаленный репозиторий / origin ==== * Синхронизация * **git push origin master** * **git remote add origin <адрес_сервера>** ==== Submodule / Субмодули ==== * git submodule add git@github.com:Mirocow/express-chat.git * git submodule update –init [express-chat] * git submodule update --init --recursive - обновить все зависимые модули (репозитории) * git rm -r yii2-mongodb - Удалить сабмодуль yii2-mongodb * **git rm -r yii2-redactor** - Удалить сабмодуль yii2-redactor :!: * **git submodule add -- /to/path/git/dir** - Добавить локальный модуль (Необходимо указывать только полный путь до папки) :!: === Как вынести код в отдельный репозитоий === Дано: * Основной репозиторий **app/** * Необходимый код лежит тут **app/vendor/mirocow/yii2-redactor** * копируем код в отдельную папку и создаем репозитоий **путь-до-репозитория/yii2-redactor** * удаляем если есть уже ранее созданный модуль git rm -rf yii2-redactor * обязательно переходим в добавляемую папку **app/vendor/mirocow** * добавляем модуль как отдельный репозитоий из папки **git submodule add -f путь-до-репозитория/yii2-redactor/** ===== Отладка ===== ==== GIT_CURL_VERBOSE ==== <code bash> $ GIT_CURL_VERBOSE=1 git clone htps://... </code> ==== GIT_TRACE ==== Принимает значаения 1, 2 или true <code bash> $ GIT_TRACE=2 git clone htps://... </code> ===== Настройка ===== * **git config color.ui true** - использовать цветной вывод в терминале http://marklodato.github.io/visual-git-guide/index-ru.html?no-svg ===== Настройка deploy on github ===== Настройка github для работы с **Deploy keys** * [[git:github:deploy]] ===== Ошибки ===== ==== Ошибка: There is no tracking information for the current branch ==== При возникновении ошибки вида <code bash> $ git pull There is no tracking information for the current branch. Please specify which branch you want to rebase against. See git-pull(1) for details git pull <remote> <branch> If you wish to set tracking information for this branch you can do so with: git branch --set-upstream-to=origin/<branch> master </code> следует выполнить <code bash> $ git pull origin master $ git branch --set-upstream-to=origin/master master $ git pull </code> ===== Видеоуроки ===== * https://www.youtube.com/playlist?list=PLY4rE9dstrJyTdVJpv7FibSaXB4BHPInb ===== Документация ===== * **[[unix:git:mini-doc|Мини документация]]** :!: * **[[unix:git:history-change|Редактирование истории в git]]** * https://git-scm.com/book/ru/v2/ - Pro Git (русский) ver 2 :!: * [[unix:git:history-change]] * [[unix:git:gitignore]] * [[git:github:deploy]] * [[system:git-репозиторий_под_ubuntu]] * [[drupal:workflow-git]] * [[git_vs_hg]] * [[unix:git]] * [[git_vs_hg|GIT vs HG]] * [[unix:git:gitignore|.gitignore]] * http://gitimmersion.ru/ * http://git-scm.com/book/ru * http://git-scm.com/book/ru/v1 :!: * http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/ru :!: * [[develope:gitlab]] * [[unix:git:history-change]] ===== Сервер ===== * https://about.gitlab.com/ / https://github.com/gitlabhq/gitlabhq ===== Клиенты ===== * http://www.syntevo.com/smartgit/ * https://github.com/rowanj/gitx * https://www.sourcetreeapp.com/ ===== Code Review ===== * https://code.google.com/p/gerrit/ ==== Ссылки ==== * http://habrahabr.ru/post/174467/ * [[http://www.redmine.org/boards/2/topics/15536|How to link to Git commit]] * [[http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html|Undoing in Git - Reset, Checkout and Revert]] * http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/ru/index.html * http://marklodato.github.com/visual-git-guide/index-ru.html * [[http://habrahabr.ru/post/106912/|Удачная модель ветвления для Git]] * [[http://habrahabr.ru/post/60030/|Git Workflow]] * http://blog.nsws.ru/rabota-s-git-dlya-nachinayushhix.html * http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/ru/ch02.html * http://lezhnevs.ru/git * http://lezhnevs.ru/git/submodule * http://lezhnevs.ru/git/kontrol-bazyi-dannyih-vmeste-s-faylami * http://rogerdudler.github.com/git-guide/index.ru.html * http://programilla.com/blog/siteconstruction/325.html * http://ignar.name/articles/git-create-remote-branch.html * http://blog.sectorit.net/development/430 * http://habrahabr.ru/post/75990/ * http://jetwalker.blogspot.ru/2012/01/receivedenycurrentbranch.html * http://stackoverflow.com/questions/2816369/git-push-error-remote-rejected-master-master-branch-is-currently-checked * [[http://stepansuvorov.com/blog/2014/07/how-to-update-the-git-fork/|How to update the git fork]] * [[http://habrahabr.ru/post/161009/|Git Rebase: руководство по использованию]] * [[http://habrahabr.ru/post/195674/|Тонкости благополучного git-merge]] * [[http://habrahabr.ru/post/157175/]] * http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/ru/ch02.html * http://found-notes.blogspot.ru/ * https://proglib.io/p/git-cheatsheet/ СохранитьПросмотрРазличияОтменить Сводка изменений Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии: CC0 1.0 Universal