Здесь показаны различия между двумя версиями данной страницы.
| Следующая версия | Предыдущая версия | ||
|
subjects:programming:git [2017/09/28 15:01] ¶ создано |
subjects:programming:git [2025/03/14 15:34] (текущий) ¶ [Разное] |
||
|---|---|---|---|
| Строка 13: | Строка 13: | ||
| По умолчанию репозиторий хранится в подкаталоге с названием «.git» в корневом каталоге рабочей копии дерева файлов, хранящегося в репозитории. | По умолчанию репозиторий хранится в подкаталоге с названием «.git» в корневом каталоге рабочей копии дерева файлов, хранящегося в репозитории. | ||
| - | ===== Заголовок ===== | + | ===== Использование Git ===== |
| + | ==== Инициализация ==== | ||
| + | Создание локального репозитория в текущем каталоге | ||
| + | <code bash> | ||
| + | $ git init | ||
| + | </code> | ||
| + | |||
| + | Клонирование удаленного репозитория в локальный каталог [с указанным имени] | ||
| + | <code bash> | ||
| + | $ git clone https://github.com/userName/originName.git [newLocalName] | ||
| + | </code> | ||
| + | |||
| + | === Настройка === | ||
| + | Задаем имя пользователя и электронную почту. | ||
| + | |||
| + | Глобально для всех проектов текущего пользователя: | ||
| + | <code bash> | ||
| + | $ git config --global user.name "John Doe" | ||
| + | $ git config --global user.email johndoe@example.com | ||
| + | </code> | ||
| + | |||
| + | Для конкретного проекта (эти настройки переопределят глобальные): | ||
| + | <code bash> | ||
| + | $ git config --local user.name "John Doe" | ||
| + | $ git config --local user.email johndoe@example.com | ||
| + | </code> | ||
| + | |||
| + | === .gitignore === | ||
| + | Зачастую, у вас имеется группа файлов, которые вы не только не хотите автоматически добавлять в репозиторий, но и видеть в списках неотслеживаемых. К таким файлам обычно относятся автоматически генерируемые файлы (различные логи, результаты сборки программ и т.п.). В таком случае, вы можете создать файл .gitignore с перечислением шаблонов соответствующих таким файлам. Вот пример файла .gitignore: | ||
| + | |||
| + | <file bash .gitignore> | ||
| + | *.[oa] | ||
| + | *.log | ||
| + | </file> | ||
| + | |||
| + | Первая строка предписывает Git'у игнорировать любые файлы заканчивающиеся на .o или .a — объектные и архивные файлы, которые могут появиться во время сборки кода. Вторая - то же самое, для файлов заканчивающихся на "''.log''". | ||
| + | |||
| + | Исключаем папки и файлы, начинающиеся с двух подчёркиваний и содержимое ''virt.py3'': | ||
| + | <file bash .gitignore> | ||
| + | __*/* | ||
| + | __* | ||
| + | virt.py3/* | ||
| + | </file> | ||
| + | |||
| + | ==== help ==== | ||
| + | <code bash>$ git help</code> | ||
| + | |||
| + | ==== status ==== | ||
| + | Вывести информацию обо всех изменениях, внесенных в дерево директорий проекта: | ||
| + | <code bash>$ git status</code> | ||
| + | |||
| + | Краткий вывод: | ||
| + | <code bash>$ git status --short | ||
| + | $ git status --s</code> | ||
| + | |||
| + | Обозначения в выводе команды ''git status -s'': | ||
| + | * ''M'' - (**m**odified) отслеживаемые, изменились с прошлого коммита, еще не добавлены | ||
| + | * ''D'' - (**d**eleted) отслеживаемые, удалены после прошлого коммита, еще не добавлены | ||
| + | * ''?'' - (untracked) неотслеживаемые, не запрещены к добавлению | ||
| + | * ''!'' - (ignored) неотслеживаемые, запрещены к добавлению (например, в .gitignore) | ||
| + | |||
| + | ==== add ==== | ||
| + | <code bash> | ||
| + | $ git add . | ||
| + | $ git add -all | ||
| + | $ git add -A | ||
| + | $ git add -update | ||
| + | $ git add -u | ||
| + | </code> | ||
| + | |||
| + | * ''git add .'' -- Добавляет файлы ''M'', ''D'', ''?''. | ||
| + | * ''-all'', ''-A'' -- Эти варианты эквивалентны и добавляют ''M'', ''D'', ''?''. Без точки — из всей рабочей области. С точкой — только текущий путь: ''git add -A .'' = ''git add .'' + ''git add -u .'' \\ <code bash>git add .</code> | ||
| + | * ''-update'', ''-u'' -- Git обновляет (update) статус уже отслеживаемых файлов т.е. M, D. | ||
| + | * ''git add *'' -- Этот синтаксис лучше не использовать, т.к. он пытается добавить ''M'', ''?'', ''!'', причём последнее приводит к ошибке. | ||
| + | |||
| + | ==== commit ==== | ||
| + | <code bash> | ||
| + | $ git commit | ||
| + | $ git commit -a | ||
| + | $ git commit -m "text" | ||
| + | </code> | ||
| + | * ''git commit'' -- Если индекс не пустой, то на его основе будет совершен коммит, после чего пользователя попросят прокомментировать вносимые изменения. | ||
| + | * ''-a'' -- Совершит коммит, автоматически индексируя изменения в файлах проекта. **Новые** файлы при этом индексироваться **не будут**! Удаление же файлов будет учтено. | ||
| + | * ''-m "text"'' -- Комментируем коммит прямо из командной строки вместо текстового редактора. \\ <code bash>git commit -m "Название коммита"</code> | ||
| + | * Чтобы изменить имя последнего коммита, достаточно ввести: \\ <code bash>git commit --amend -m "Новое название коммита"</code>. Для изменения имени других коммитов, нужно сделать: \\ <code bash>git commit --amend -c <commit ID></code> | ||
| + | |||
| + | ==== Переименование файла ==== | ||
| + | Переименовывать или перемещать файлы и папки нужно из ''git''. Подробнее см. справку. | ||
| + | <code bash> | ||
| + | $ git mv old_filename new_filename | ||
| + | </code> | ||
| + | |||
| + | ==== Объединение коммитов ==== | ||
| + | * Объединение последних **2** (//можно использовать любое разумное целое число//) коммитов в один: \\ | ||
| + | <code bash> | ||
| + | $ git rebase -i HEAD~2 | ||
| + | </code> | ||
| + | * **Откроется** текстовый редактор, в котором первые две строки соответствуют последним двум коммитам. | ||
| + | * В начале каждой строки стоит слово ''pick''. Вам **необходимо** изменить слово ''pick'' на букву ''s'' у второй строки. Это означает, что данный коммит будет объединен с предыдущим коммитом -- это написано в комментариях. | ||
| + | * **Сохраните** изменения и закройте редактор. | ||
| + | * Снова **откроется** редактор, в котором вам предлагается ввести сообщение к коммиту, который и является объединением. Отредактируйте сообщение к коммиту, **сохраните** изменения, и закройте редактор. | ||
| + | |||
| + | ==== Разное ==== | ||
| + | * ''git rm FILE1 FILE2'' -- Удалить файл(ы) из индекса и дерева одновременно. | ||
| + | * ''git reset'' -- Сбросить весь индекс. \\ Помимо работы с индексом, позволяет сбросить состояние проекта до какого-либо коммита в истории: | ||
| + | * «Мягкий» (с ключом "--soft") резет оставит нетронутыми ваши индекс и все дерево файлов и директорий проекта, вернется к работе с указанным коммитом. \\ ''git reset --soft HEAD^'' -- переходим к работе над уже совершенным коммитом, сохраняя все состояние проекта и проиндексированные файлы. | ||
| + | * «Жесткий» резет (ключ --hard) — команда, которую следует использовать с осторожностью. Git reset --hard вернет дерево проекта и индекс в состояние, соответствующее указанному коммиту, удалив изменения последующих коммитов. \\ ''git reset --hard HEAD~3'' -- Никто и никогда не увидит три последних коммита. | ||
| + | * ''revert'' -- отмена изменений, произведенных в прошлом отдельным коммитом. Для использования команды необходимо, чтобы состояние проекта не отличалось от состояния, зафиксированного последним коммитом. | ||
| + | * ''git revert config-modify-tag'' -- отменяем коммит, помеченный тегом. | ||
| + | * ''git revert 12abacd'' -- отменяем коммит, используя его хэш. | ||
| + | * ''git log'' -- Разнообразная информация о коммитах в целом, по отдельным файлам и различной глубины погружения в историю. | ||
| + | * ''git diff'' -- Отличия между деревьями проекта; коммитами; состоянием индекса и каким-либо коммитом. | ||
| + | * ''git diff '' -- Изменения, не внесенные в индекс. | ||
| + | * ''git diff --cached'' -- Изменения, внесенные в индекс. | ||
| + | * ''git diff HEAD'' -- Изменения в проекте по сравнению с последним коммитом. | ||
| + | * ''git diff HEAD^'' -- Изменения в проекте по сравнению с **пред**последним коммитом. | ||
| + | * ''git branch'' -- Создание, перечисление и удаление веток | ||
| + | * ''git branch'' -- Просто перечислит существующие ветки, отметив активную. | ||
| + | * ''git branch new-branch'' -- Создаст новую ветку new-branch. | ||
| + | * ''git branch -d new-branch'' -- Удалит ветку, если та была залита (merged) с разрешением возможных конфликтов в текущую. | ||
| + | * ''git branch -D new-branch'' -- Удалит ветку в любом случае. | ||
| + | * ''git branch -m new-name-branch'' -- Переименует ветку. | ||
| + | * ''git branch --contains v1.2'' -- Покажет те ветки, среди предков которых есть определенный коммит. | ||
| + | * ''git checkout'' -- Переключение между ветками, извлечение отдельных файлов из истории коммитов | ||
| + | * ''git checkout [branch_name]'' -- Переключает на ветку ''branch_name'' . | ||
| + | * ''git checkout -b [branch_name]'' -- Создаёт ветку ''branch_name'' и переключает на неё. :!: | ||
| + | * ''git rebase'' -- Построение ровной линии коммитов | ||
| + | * ''git cherry-pick'' -- Применение к дереву проекта изменений, внесенных отдельным коммитом | ||
| + | * ''git tag'' -- Тэги как способ пометить уникальный коммит | ||
| + | * ''git merge [branch_name]'' -- Сливает текущую ветку с ''branch_name''. :!: | ||
| + | * ''git rebase'' -- Второй способ объединения изменений в ветках. | ||
| + | * ''git rebase [branch_name]'' -- Вливает текущую ветку в ''branch_name''. :!: | ||
| + | * '''' -- | ||
| + | |||
| + | |||
| + | ==== Удаленный репозиторий ==== | ||
| + | - Создаём удаленный репозиторий (например на GitHub). | ||
| + | - Связываем локальный репозиторий с удаленным<code bash>$ git remote add origin https://github.com/userName/originName.git</code> | ||
| + | - Верифицируем что удаленный репозиторий связан с нашим<code bash>$ git remote -v</code> | ||
| + | - Публикуем ветку master на удаленном репозитории<code bash>$ git push -u origin master</code> | ||
| + | |||
| + | В дальнейшем нам потребуется только последний пункт. | ||
| + | |||
| + | ===== Полезно ===== | ||
| + | ==== URL ==== | ||
| + | * Pro Git book: __git-scm.com/book/ru/v2__ | ||
| + | * 30 команд Git: __habr.com/post/599929/__ | ||
| + | * Git шпаргалка: __pr0git.blogspot.ru/p/git.html__ | ||
| + | * Курс уроков: __www.atlassian.com/ru/git/tutorials__ | ||
| + | |||
| + | ==== Программы ==== | ||
| + | * ''git**g**'': __wiki.gnome.org/Apps/Gitg__ | ||
| + | * ''git**k**'', ''git **gui**'': __git-scm.com/__ | ||
Записаться на занятия к репетитору