Содержание
Git
Git — распределенная система контроля версий.
Основные команды
Создание локального репозитория
- git clone [url, например, https://tau.home.local/user/test_project.git] dir_name — создать локальную копию репозитория в каталоге dir_name.
Работа с удаленным репозиторием
- git remote — просмотр списка настроенных удаленных репозиториев.
- git remote add [shortname] [url] — добавить удаленный репозиторий и присвоить ему имя.
- git remote rename [shortname] [new_shortname] — изменить короткое имя.
- git fetch [shortname] — загрузка изменений из удаленного репозитория.
- git push [remote-name] [branch-name] — выгрузка изменений в удаленный репозиторий.
- git pull [remote-name] [branch-name] — загрузка изменений с заданной ветки репозитория.
- git remote show [remote-name] — просмотр состояния удаленного репозитория.
- git remote rm [shortname] — удалить удаленный репозиторий из списка.
Коммиты
- git add список_файлов — добавить файлы в индекс ( поставить их под версионный контроль). Обычно делается перед коммитом.
- git commit -m «Комментарий к коммиту» — сделать коммит файлов из индекса.
- git commit -a -m «Комментарий к коммиту» — добавить измененные файлы в индекс и сделать коммит. Обратите внимание: коммиты делаются в локальную копию репозитория. Указанные команды НЕ загружают изменения на сервер. Для изменения удаленного репозитория используйте git push.
Отмена коммита или операции
- git checkout – имя_файла — отмена изменений из измененного файла.
- git reset имя_файла — удаление добавленного (но не закоммиченного) файла из индекса.
- git commit –amend — команда для изменения коммита.
Работа в локальном репозитории
- git status — определение состояния файлов.
- git add список_файлов — добавить файлы в индекс ( поставить их под версионный контроль).
- git diff — просмотр сделанных изменений.
- git diff –staged — сравнение проиндексированных изменений с последним коммитом.
- git rm имя_файла — удаление физически удаленного файла из индекса.
- git rm –cached имя_файла — удаление файла из индекса ( из версионного контроля ) без физического удаления.
Просмотр истории
- git log — выдает список коммитов, сделанных в репозитории.
- git log -p — выдает список коммитов с просмотром изменений, сделанных в каждом коммите.
- git log –stat — выдает список коммитов с просмотром краткой статистики изменений.
- git log –pretty=… — выдает список коммитов, изменяя формат вывода.
- git log –since=… — выдает список коммитов с ограничением по времени. Например, 2.weeks — коммиты за последние 2 недели.
- git log -число — выдает указанное число коммитов.
Git и SVN
Двусторонняя интеграция Git с SVN поддерживается утилитой git-svn. Эта утилита позволяет использовать Git в качестве полноценного SVN-клиента.
Миграция с SVN
Сначала проведем подготовительную работу для корректного отображения пользователей в Git. Извлекаем из репозитория нужную ветку svn:
tau% svn svn://path_to_repo/trunk_name
для того, чтобы извлечь информацию о пользователях. В директории с локальной копией репозитория ~/test/svn выполняем команду
tau% svn log --quiet | grep -E "r[0-9]+ \| .+ \|" | cut -d'|' -f2 | sed 's/ //g' | sort | uniq
В результате мы получим список пользователей, делавших коммиты в SVN. На основе этого списка создаем файл users.txt, каждая строка которого имеет вид
имя_в_SVN = имя_пользователя <e-mail>
Выходим из svn-каталога:
tau% cd ..
Импортируем SVN-репозиторий в Git-репозиторий командой git-svn:
tau% git svn clone svn://path_to_repo/ --authors-file=users.txt --no-metadata -T trunk_name TestGitProject
Здесь
svn://path_to_repo/
— путь к репозиторию, trunk_name — имя основной ветки, которую мы выгружаем из репозитория. Ключ –authors-file с указанием ранее созданного файла с пользователями используется для автоматического преобразования имен пользователей в более читабельные. Ключ –no-metadata удаляет метки SVN.
Наведем дополнительные красивости. Если нужно, инструкция рекомендует перенести метки, чтобы они действительно были метками:
tau% cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/ tau% rm -Rf .git/refs/remotes/origin/tags
в нашем случае настройки репозитория меток не предполагают. Поэтому нам остается перенести данные из .git/refs/remotes/, а затем его удалить:
tau% cp -Rf .git/refs/remotes/* .git/refs/heads/ tau% rm -Rf .git/refs/remotes
Добавляем наш сервер Git в качестве удаленного репозитория и отправляем на него наши данные:
tau% git remote add origin https://tau.home.local/ladilova/TestProject.git tau% git push origin --all
Работа с SVN через Git
В работе.