Команды работы с [Базисные команды репозитория] нужны всем, у кого есть репозиторий, т.е. любому, работающему с git хранилищем.
Кроме того, важное значение для всех, кто создаёт коммиты, даже если он работает один, важное значение имеют комады [Индивидуальная разработка (Автономный режим)] .
Если вы работаете совместно с другими людьми, вам потребуются команды, перечисленные в разделе [Индивидуальная разработка (Совместный режим)].
Людям, которые играют роль [Интегратора], необходимо знать помимо этого ещё несколько команд..
Команды [Администрирование репозитория] важны для системных администраторов которые несут ответственность за работоспособность git репозиториия.
Эти команды повседневно используются при работе с git репозиторием.
* git-init(1) и git-clone(1) создают новый репозиторий.
* git-fsck(1), проверяет репозиторий на ошибки.
* git-gc(1) to do common housekeeping tasks such as repack and prune.
* git-gc(1) решает общие задачи сохранения репозитория, такие как переупаковки и «убирание мусора».
Проверка «здоровья» репозитория и удаление из него мусора.
$ git fsck ( 1 )
$ git count-objects ( 2 )
$ git gc ( 3 )
( 1 ) Даже запуская без --full, вы легко и надёжно проверяете «здоровье» репозитория.
( 2 ) Проверка, сколько объектов будет потеряно и объём освобождаемого места при перепаковке репозитория.
( 3 ) переупаковка локальных репозиториев и другие виды повседневныз задач.
Упаковка небольших проектов в один пакет.
$ git gc ( 1 )
( 1 ) . паковать все объекты доступные из «ссылок» (refs) в одну упаковку, затем удалить другие упаковки.
Автономный индивидуальный разработчик не обменивается патчами с другими людьми, а работает только в одном репозитории, используя
следующие команды.
* git-show-branch(1) – посмотреть где вы (в какой ветке).
* git-log(1) – посмотреть что в логах.
* git-checkout(1) и git-branch(1) – переключение ветвей.
* git-add(1) – управление файлом индекса.
* git-diff(1) и git-status(1) – посмотреть что вы уже сделали в течении работы.
* git-commit(1) зафиксировать (создать коммит) в текущей ветке.
* git-reset(1) и git-checkout(1) (с параметрами пути) - отмена последних изменений изменений (откат изменений).
* git-merge(1) – слить (объединить) локальные ветви репозитория.
* git-rebase(1) – обновление локальной ветки до заданного репозитория и добавление необходимых коммитов.
* git-tag(1) – задать именованную метку для коммита (текущей точки).
Используем тарбол, как отправную точку для нового репозитория.
$ tar zxf frotz.tar.gz
$ cd frotz
$ git-init
$ git add . ( 1 )
$ git commit -m “import of frotz source tree.”
$ git tag v2.43 ( 2 )
( 1 ) Добавляем все измениия и файлы в текущем директории.
( 2 ) Создаём легкий, неаннотированный тег
Создаём топик (имя) ветки и работаем с ней.
$ git checkout -b alsa-audio ( 1 )
$ edit/compile/test
$ git checkout — curses/ux_audio_oss.c ( 2 )
$ git add curses/ux_audio_alsa.c ( 3 )
$ edit/compile/test
$ git diff HEAD ( 4 )
$ git commit -a -s ( 5 )
$ edit/compile/test
$ git reset --soft HEAD^ ( 6 )
$ edit/compile/test
$ git diff ORIG_HEAD ( 7 )
$ git commit -a -c ORIG_HEAD ( 8 )
$ git checkout master ( 9 )
$ git merge alsa-audio ( 10 )
$ git log --since='3 days ago' ( 11 )
$ git log v2.43.. curses/ ( 12 )
1. создаем новую ветку с именем (топиком) alsa-audio.
2. отменяем ваши неудачные изменения в curses/ux_audio_oss.c
3. вам нужно указать git, что вы добавили новый файл; другие удаление и изменения будет не замечены, если сделать git commit.
4. смотрим, какие изменения Вы будете фиксировать при выполнении git-commit.
5. фиксируем всё так-вы проверили, подписывая коммит.
6. отменяем последний коммит, сохраняя его в рабочем дереве.
7. смотрим на изменения сделанные в отменённом нами коммите.
8. возвращаем предыдущий коммит используя при записи сообщение оригинала.
9. переключиться на ветвь master.
10. объединяем ветку топика alsa-audio с веткой master.
11. смотрим логи коммита; другие формы могут ограничивать вывод и комбинироваться и включать
--max-count=10 (показать не больше 10 коммитов),
--until=2005–12–10 (до 10 декабря 2005г) и т.д.
12. смотрим изменения, находящиеся в директории curses/ в коммите v2.43
Разработчик участвуя в совместном проекте группы должен уметь общаться с другими участниками и использовать команды, помимо тех, что нужны в Автономной работе :
* git-clone(1) – создать точную копию основного репозитория разработки в своём локальном хранилище.
* git-pull(1) и git-fetch(1) – получает из “origin” основного репозитория и сохраняет изменения в звашем репозитории.
* git-push(1) помещает в общее хранилище, если у вашего общего Git репозитория принят стиль CVS.
* git-format-patch(1) готовит патч в представлении e-mail, если у вашего общего репозитория принят стиль «ядра Linux».
Клонируем основной репозиторий и работаем с ним.
Передаём изменения в основной репозиторий.
$ git clone git://git.kernel.org/pub/scm/.../torvalds/linux-2.6 my2.6
$ cd my2.6
$ edit/compile/test; git commit -a -s ( 1 )
$ git format-patch origin ( 2 )
$ git pull ( 3 )
$ git log -p ORIG_HEAD.. arch/i386 include/asm-i386 ( 4 )
$ git pull git://git.kernel.org/pub/.../jgarzik/libata-dev.git ALL ( 5 )
$ git reset --hard ORIG_HEAD ( 6 )
$ git gc ( 7 )
$ git fetch --tags ( 8 )
1. повторяем по мере необходимости.
2. извлекаем патчи из вашей ветки в e-mail виде.
3. git pull извлекает из origin (по-умолчанию) и объединяет с текущей веткой.
4. сразу после git pull, смотрим сделанные «апстримом» в последнее время изменения в области кода, которая нас интересует.
5. извлекаем изменения из конкретной ветки конкретного репозитория и объединяем их.
6. возвращаемся через git pull .
7. убираем мусор от оставшихся объектов после git-pull.
8. Время от времени, получать официальные метки из origin и сохраняем их в соответствии в .git/refs/tags/.
Передача в другой репоззиторий
satellite$ git clone mothership:frotz frotz (1)
satellite$ cd frotz
satellite$ git config --get-regexp '^(remote|branch)\.' (2)
remote.origin.url mothership:frotz
remote.origin.fetch refs/heads/*:refs/remotes/origin/*
branch.master.remote origin
branch.master.merge refs/heads/master
satellite$ git config remote.origin.push \
master:refs/remotes/satellite/master (3)
satellite$ edit/compile/test/commit
satellite$ git push origin (4)mothership$ cd frotz
mothership$ git checkout master
mothership$ git merge satellite/master (5)
Ветка вне без специфичного тега.
$ git checkout -b private2.6.14 v2.6.14 (1)
$ edit/compile/test; git commit -a
$ git checkout master
$ git format-patch -k -m stdout v2.6.14..private2.6.14 |
git am -3 -k (2)
A repository administrator uses the following tools to set up and maintain access to the repository by developers.
Администратор репозитория использует следующие инструменты для создания и поддержки доступа разработчиков к репозиторию.
update hook howto имеет хорошии примеры совместной управления центрального репозитория.
Примеры
Мы исходим из следующего /etc/services
$ grep 9418 /etc/services
git 9418/tcp # Git Version Control System
Run git-daemon to serve /pub/scm from inetd.
Запуск ГИТ-демона как сервиса /pub/scm из inetd.
$ grep git /etc/inetd.conf
git stream tcp nowait nobody \
/usr/bin/git-daemon git-daemon --inetd --export-all /pub/scm
Актуальная конфигурационная строка должна помещаться в одну строку.
Запуск git-демона как сервиса /pub/scm из xinetd.
$ cat /etc/xinetd.d/git-daemon
# default: off
# description: The git server offers access to git repositories
service git
{
}
Check your xinetd(8) documentation and setup, this is from a Fedora system.
Проверьте вашу документацию по xinetd (8) настройки, вышеописанные строки соответсуют Fedora.
В других дистрибутивах могут быть отличия. Give push/pull only access to developers.
Дайте права доступа для push/pull только для разработчиков.
$ grep git /etc/passwd (1)
alice:x:1000:1000::/home/alice:/usr/bin/git-shell
bob:x:1001:1001::/home/bob:/usr/bin/git-shell
cindy:x:1002:1002::/home/cindy:/usr/bin/git-shell
david:x:1003:1003::/home/david:/usr/bin/git-shell
$ grep git /etc/shells (2)
Стиль общего CVS-репозитория.
$ grep git /etc/group (1)
git:x:9418:alice,bob,cindy,david
$ cd /home/devo.git
$ ls -l (2)
$ ls -l hooks/update (3)
HTTP-сервер для поддержки протокола передачи.
dev$ git update-server-info (1)
dev$ ftp user@isp.example.com (2)
ftp» cp -r .git /home/user/myproject.git