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-svnMercurial есть 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

[править] Дополнительная информация

Wiki и форумы:

Заметки:

Источник — «http://xgu.ru/wiki/Git»