Git
Материал из Xgu.ru
git — распределённая система контроля версий, изначально разработанная Линусом Торвальдсом для управления кодом ядра Linux. Git написан на Си, отличается высокой производительностью.
Некоторые из идей, положенных в основу Git, позаимствованы из свободной системы контроля версий Monotone и коммерческой системы управления версиями BitKeeper (хотя, вообще говоря, это спорный вопрос; Линус Торвальдс заявлял, в частности, что хотел бы чтобы Git был как можно меньше похож на BitKeeper),
который использовался для управления исходным кодом Linux, до того как был создан Git.
Популярные opensource-проекты, в которых сейчас используется Git:
- Ядро Linux;
- Fluxbox;
- Samba;
- VLC;
- Wine;
- Xorg
(полный список проектов [1]).
Основными достоинствами Git (в сравнении с другими распределёнными системами контроля версий) в настоящее время принято считать:
- Unix-ориентированность и глубокий unixway во всём;
- Идеологическую выдержанность;
- Высокую производительность.
- Прекрасная интеграция Git и Subversion при помощи git-svn (в Mercurial есть hgsvn, но git-svn более удобный);
- поддержка локальных бранчей;
- Очень мощная фича! Управление контентом, а не управление файлами. Это значит, что Git в состоянии отследить без дополнительной подсказки со стороны пользователя, когда данные переносятся из одного файла в другой, а также когда файлы переименовываются.
Основными недостатками Git в настоящее время принято считать:
- Unix-ориентированность (для кого это минус) (сюда же можно отнести и отсутствие на сегодняшний день зрелой поддержки Git на Windows, хотя он работает и под Cygwin, и есть такой проект как msysgit [2]);
- некоторую сложность в использовании (особенно, до версии включительно 1.4.x);
- немногочисленность и неполноту документации;
- необходимость периодического выполнения git-gc [3] (возможно, в будущем это будет не так);
- Ревизии обозначаются с помощью SHA1-хэшей, с одной стороны они уникальны, с другой — возникает необходимость оперировать большими строками хэшей вместо маленьких номеров (в Mercurial для этого есть алиасы).
Список других достоинств и недостатков Git можно посмотреть, например, в [4].
Содержание |
[править] Выступления
[править] Выступление Линуса Торвальдса
Линус Торвальдс на протяжении часа рассказывает о том, в чём заключается принципиальная разница между централизованными и распределёнными системами управления версиями, о git, о способах его использования и преимуществах, которые он имеет.
Основные тезисы выступления:
- Subversion (и все централизованные SCM) — это зло, а их разработчики — кретины;
- Но если всё же централизованные SCM использовать надо (например, как в Google, где на момент выступления основной SCM была Perforce), то их можно использовать совместно с DSCM, который нужно использовать для хранения промежуточных версий между коммитами в централизованный SCM;
- Производительность git очень высока, и это важно;
- При помощи git делать merging можно легко и непринуждённо;
- git управляет не файлами, а множествами файлов, что очень хорошо, например, если нужно перенести код из одного файла в другой, и потом помнить, как он был перенесён;
- Для контроля целостности широко используется хэш SHA1 (который на сегодняшний день считается очень криптостойким), что позволяет решить многие вопросы с организацией надёжного и безопасного хранения и обмена кодом.
Полный очень подробный транскрипт выступления (переведённый на русский язык) находится по адресу [5].
[править] Выступление Рендела Шварца
Больше технических деталей чем в выступлении Линуса.
[править] Вопросы и ответы
[править] Как отбросить несохранённые изменения?
%$ git stash save --keep-index %$ git stash
Или, если изменения нужно потерять только в конкретных файлах:
%$ git checkout /path/to/file
[править] Как работать с git:// через прокси?
Использовать скрипт:
#!/bin/sh # Use socat to proxy git through an HTTP CONNECT firewall. # Useful if you are trying to clone git:// from inside a company. # Requires that the proxy allows CONNECT to port 9418. # # Save this file as gitproxy somewhere in your path (e.g., ~/bin) and then run # chmod +x gitproxy # git config --global core.gitproxy gitproxy # # More details at http://tinyurl.com/8xvpny # Configuration. Common proxy ports are 3128, 8123, 8000. _proxy=proxy.yourcompany.com _proxyport=3128 exec socat STDIO PROXY:$_proxy:$1:$2,proxyport=$_proxyport
Сконфигурировать скрипт на использование скрипта для доступа к git://-репозиториям:
git config --global core.gitproxy gitproxy
[править] Дополнительная информация
- Git – Fast Version Control System (англ.) — домашняя страница проекта
- gittutorial(7) Manual Page (англ.) — с этого можно начать
Wiki и форумы:
- http://www.gitforum.net/ (англ.)
Заметки:
- Статьи и переводы (рус.)
- Using git on FreeBSD (англ.)
- Kernel Hackers' Guide для GIT (англ.)
- The Thing About Git (англ.)
- Setting up Git on OSX (англ.)
- Git and hg (англ.) — заметка Theodore Ts'o о том, как он будучи поклонником Mercurial полюбил git. И за что же, собственно (хотя он сам продолжает сидеть на Mercurial)
- Git Cheat Sheet (англ.) — шпаргалка для пользователей Git
- Git the basics, pdf (англ.) — наглядное руководство по Git
- Git Magic (англ.) — хорошая книга по Git, GPLv3
- http://progit.org/book/
- Git for Computer Scientists (англ.) — статья про Git для тех, кто знает, что такое направленный ацикличный граф
- Become a git guru: Git Tutorials (англ.)
Системы управления версиями на Xgu.ru | ||
---|---|---|
Централизованные | CVS • Subversion | |
Распределённые | Git • Mercurial • Bazaar • Darcs • Fossil | |
Хостинг | Github • Bitbucket |