Повесть о git .
О том как его оседлать и с чем его есть.
Данный чудо-агрегат является децентрализованной системой управления версиями.
Что обеспечивает возможность работы не имея доступа к серверу или, если произойдет крах сервера, не к таким фатальным последствиям.
Думаю, стоит рассмотреть на примере задачи и отталкиваться от этого.
Предположим, у нас есть 2-3 человека, работающие над одним проектом или документацией.
Задача :
Сделать работу по изменению и поддержанию более легкой.
Обеспечить возможность работы над проектом всем одновременно.
Вести историю изменений.
Для начала поставим сам git.
Он есть в портах (полагаю и в пакетах).
После, выберем место, где будем хранить репозитории.
Создадим пользователя, к примеру, git с домашней директорией, где будут репозитории.
home :/var/project/
Вселимся в его душу)) :
su git cd ~
И создадим наш репозитории.
git-init --shared=group
После проинициализируем его.
touch start
git-add start #добавляем файл в репозитории
git-commit -m 'start rep'#оставляем запись о изменениях
На данный момент в нашем репозитории находится ветка master в которой есть 1 коммит и файл start.
Создадим пользователей, которые будут работать с этим репозиторием и дадим им группу git,
поскольку он был проинициализирован с возможностью доступа группы владельца репозитория git-init --shared=group.
После открываем на локальной машине консоль(я полагаю что у вас уже стоит git на локальной машине) и делаем начальную копию репозитория.
git-clone ssh:/server/var/project ~/project
Создаем файл .gitconfig
и делаем там записи о том кто вы такой и где вас найти)
[user]
name = Your Name Comes Here
email = [email protected]
переходим в ~/project
И видим ,что там находится файл start
если сделать ls -a то мы увидим сам репозиторий ".git".
Собственно теперь можно спокойно начинать работу)).
Для начала стоит сделать новую ветку, в которой вы будете работать и не затрагивать ветку master вплоть до того момента, пока не решите что данные изменения должны попасть в master ветку.
git-branch my_new_branch
и сменим текущую ветку
git-checkout my_new_branch
Дальше спокойно делаем свои изменения, не забывая добавлять в локальный репозиторий.
Скажем мы создали файлы test1, test2.
Они находятся локально, но они не в репозитории.
Чтобы добавить их в репозиторий используем git-add.
git-add test1 test2
Данная команда дает указания какие файлы нужно добавить в репозиторий или какие файлы изменились.
Состояние того, что будет добавлено можно посмотреть с помощью git-status.
После, чтобы изменения вступили в силу, нужно оставить коммит или, проще говоря, краткую информацию об изменениях.
git-commit -m "add files test1 test2"
После можно просмотреть лог изменений в данной ветке git log.
Также можно посмотреть дерево всех изменений с помощью git-gui,gitk.
Предположим, что вы закончили работу над изменениями и хотите опубликовать для всех.
Для этого переходим в master ветку.
git-checkout master
Синхронизируем с удаленной машиной ветку мастер git-pull.
Это делается на тот случай, если кто-то за это время внес изменения в основной ветке и опубликовал их.
После, объединяем наши ветки
git merge my_new_branch
Если возникнут какие либо конфликты, то вас проинформируют об этом и их придется исправлять.
После того, как исправите конфликты, их можно посмотреть выполнив git diff.
git-add "файл в котором конфликт"
git commit
После опять делаем git-pull
И пробуем занести данные на сервер git-push
Если опять конфликты, то исправляем конфликтные файлы, синхронизируя с удаленным сервером и опять пытаемся добавить изменения.
Если вам так и не удалось слить ветви локально или вы отказались от изменений, то можно отменить изменения вернувшись на исходные.
git reset --hard HEAD
HEAD-вершина текущей ветки.
git show показывает последние коммиты.
Для того, чтобы зафиксировать каким либо символическим именем состояние в ветке в определенной точке времени, можно сделать tag.
Текущему коммиту можно присвоить тег таким образом
git-tag v0.1
Или указать на определённый коммит
git-tag v0.1 568c3c02a608aa759cc9b839d1a47a81c8a05d94(хэш коммита)
(данный тег добавляется в текущей ветке)
git-tag -l посмотреть все теги
После можно обращаться к этому тегу с помощью команд git-checkout или git reset, если понадобится.
Хэш коммита можно посмотреть или в gitk или в git-log
git branch показать ветки
git gc выполняет сжатие репозитория))- не забывайте выполнять)
git fsck проверка от порчи(сглаза))))
Собственно и вся премудрость - остальные тонкости можно узнать в man git или на сайте git.