Git Magic. Глава 4. Все о клонировании. |
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translated in draft, editing and proof-reading required. Completed: 97%.
=== Все о клонировании ===
В старых системах контроля версий, checkout - это стандартная операция для получения файлов. Вы получаете файлы в нужном сохраненном состоянии.
В Git и других распределенных системах контроля версий, клонирование - это обычно дело. Для получение файлов вы создаете клон всего репозитария. Другими словами, вы создаете зеркало центрального сервера. При это все что можно делать в основном репозитарии, можно делать и в локальном.
=== Синхронизация компьютеров ===
По этой причине я начал использовать Git. Я вполне приемлю синхронизацию архивами или использование *rsync* для бэкапа или процедуры стандартной синхронизации. Но я работаю то на ноутбуке, то на стационарном компьютере, которые никак между собой не взаимодействуют.
Инициализируйте Git репозиторий и делайте коммит файлов на одном компьютере. А потом выполните следующие операции на другом:
$ git clone other.computer:/path/to/files
для создания второй копии файлов и Git репозитария. С этого момента выполняйте,
$ git commit -a
$ git pull other.computer:/path/to/files HEAD
это синхронизирует состояние ваших файлов с состоянием файлов другого компьютера. Если вы внесли изменения, которые будут конфликтовать с таким же файлом, Git даст Вам знать об этом, и вам придется сделать коммит еще раз, уже после устранения конфликтующих изменений.
=== Классический контроль исходного кода ===
Инициализируйте Git-репозитарий для ваших файлов:
$ git init
$ git add .
$ git commit -m "Initial commit"
На центральном сервере инициализируйте пустой Git-репозитарий с присвоением какого-нибудь имени,
и запустите Git-демон, если необходимо:
$ GIT_DIR=proj.git git init
$ git daemon --detach # возможно уже запущен
Публичные репозитарии, такие как http://repo.or.cz[repo.or.cz], имеют собственные схемы по организации изначально пустых Git-репозитариев, которые обычно предполагают регистрацию и заполнение формы.
Чтобы сохранить ваши изменения в центральный репозиторий, запустите:
$ git push git://central.server/path/to/proj.git HEAD
Для клонирования, как уже было описано выше, необходимо:
$ git clone git://central.server/path/to/proj.git
После внесения изменений, код записывается на главный сервер с помощью:
$ git commit -a
$ git push
Если в ходе работы на сервере уже происходили изменения, необходимо обновить локальную копию репозитария перед сохранением собственных изменений. Для синхронизации:
$ git commit -a
$ git pull
=== Создание форка проекта ===
Не нравится путь развития проекта? Думаете можете сделать лучше? Тогда на Вашем сервере:
$ git clone git://main.server/path/to/files
Теперь расскажите всем, что новый проект находится на вашем сервере.
В любое время вы можете объединить изменения с изначальным проектом, используя:
$ git pull
=== Окончательные бэкапы ===
Хотите создать множество георграфически разнесенных, разных, защищенных, резервных архивов? Если в вашем проекте много разработчиков - делать ничего не надо! Каждый клон - это и есть бэкап, причем отражающий не только текущее состояние, но и всю историю изменений проекта. Благодаря криптографическому хэшированию, при нарушении какого-либо из клонов, этот клон будет помечен, и это будет видно при любой попытке взаимодействия с ним.
Если ваш проект не такой популярный, размещайте клоны на как можно большем количестве серверов.
Особо беспокоящимся рекомендуется всегда записывать самый последний 20-байтный SHA1 хэш HEAD в безопасном месте. В безопасном, но не тайном. Например, в газете должно быть очень эффективно, потому как сложно изменить каждую копию газеты.
=== Многозадачность со скоростью света ===
Скажем, вы хотите выполнять несколько задач параллельно. Тогда сохраните свой проект и запустите:
$ git clone . /some/new/directory
Git использует жесткие ссылки и обмен файлами настолько безопасно, насколько это возможно для создания такого клона, он будет готов мгновенно, после чего можно будет работать с разными функциями одновременно. Например, можно редактировать один клон, компилируя в это время другой.
В любое время можно сделать коммит и вытянуть изменения из другого клона.
$ git pull /the/other/clone HEAD
=== Другие системы контроля версий ===
Вы работаете над проектом, который использует другую систему контроля версий, и вам не хватает Git? Тогда инициализируйте Git-репозиторий в свою рабочую папку:
$ git init
$ git add .
$ git commit -m "Initial commit"
затем клонируйте его:
$ git clone . /some/new/directory
Теперь перейдите в новую директорию и работайте в ней, используя для контроля версий Git. Когда вам понадобиться синхронизировать изменения с другими, перейдите в изначальную директорию и произведите синхронизацию с помощью другой системы контроля версий, затем наберите:
$ git add .
$ git commit -m "Синхронизироваться с другими"
Теперь перейдите в новую директорию и запустите:
$ git commit -a -m "Описание моих изменений"
$ git pull
Процедура обмена изменениями с другими зависит от используемой системы контроля версий. Новая директория содержит файлы с вашими изменениями. Для загрузки файлов в центральный репозиторий требуется запуск любых необходимых команд другой системы контроля версий.
Команда *git svn* автоматизирует этот процесс для репозиториев Subversion и
может быть использована для
http://google-opensource.blogspot.com/2008/05/export-git-project-to-google-code.html[экспорта Git проекта в Subversion репозиторий].
Original (English): Git Magic. Chapter 4. Cloning Around
Translation: © vixus, Natamile, mifistor, natalius .
License: GNU General Public License version 3
