# Помещайте все в систему контроля версий

(в оригинале Put Everything Under Version Control)

Помещайте все, что относится к вашему проекту, в систему контроля версий. Все, что вам для этого нужно, это: бесплатные инструменты, такие как SVN, Git, Mercurial и CVS; достаточное количества места на диске; недорогой производительный сервер; доступ к сети; или же, как вариант, можно воспользоваться сервисом хостинга проектов.

После того, как вы установите систему контроля версий себе на компьютер, все, что нужно сделать, чтобы поместить ваш проект в репозиторий – это выполнить определенную команду в папке, содержащей «чистый» проект. Вам нужно будет выучить лишь две новых операции – коммит (помещение изменения в репозиторий) и апдейт (забирание последних изменений из репозитория в свою рабочую копию).

Как только ваш проект помещен в систему контроля версий, вы можете легко отслеживать его историю, видеть, кто что написал, а также ссылаться на любую версию любого файла проекта. Но что гораздо важнее, вы теперь смело можете вносить изменения! Никакого кода, закомментированного на случай того, что он понадобится в будущем – он отлично сохранится в предыдущей версии в репозитории. Вы можете (и должны) помечать релизы тегами с читаемыми именами, чтобы в будущем иметь возможность быстро получить точно такую же версию, которая стоит у вашего клиента. Вы можете создавать ветви параллельной разрабоки – большинство проектов имеют главную ветку и одну или более веток для поддержки старых версий, имеющихся у клиентов.

Система контроля версий минимизирует количество «трения» между разработчиками. Когда программисты работают над разными частями проекта, интеграция происходит просто волшебным образом. Если же их работа пересекается, система это обнаруживает и позволяет вручную решить возникшие конфликты. При дополнительных настройках система может информировать всех участников о каждом сделанном коммите, способствуя общему видению прогресса.

Помещая проект в систему контроля версий, не старайтесь сэкономить – помещайте туда все, что можно. Кроме исходных кодов, добавьте документацию, инструментарий, скрипты сборки, тестовые сценарии и библиотеки. Помещение всего проекта в (регулярно резервнокопирующийся) репозиторий значительно снижает риск потери данных из-за отказа вашего жесткого диска. А установка среды разработки на новом рабочем месте превращается в простое извлечение всего проекта из репозитория. Это облегчает сборку и тестирование кода на разных платформах – на любом компьютере команда «апдейт» обеспечит вам последнюю версию проекта.

После первого знакомства с красотой работы с системой контроля версий следование нескольким простым правилам еще более повысит эффективность вашей команды:

* Помещайте отдельно каждое логически законченное изменение. Сваливание нескольких изменений в один коммит усложнит вычленение отдельного изменения в дальнейшем. Особенно в случае проведения серьезного рефакторинга или изменения стиля – они легко могут скрыть другие изменения.
* Сопровождайте каждый коммит поясняющим сообщением. Как минимум, кратко опишите, что вы сделали, но если у вас есть какие-либо пояснения к сделанному, то комментарий к коммиту – лучшее для них место.
* И наконец, избегайте помещать в репозиторий код, «ломающий» сборку, в противном случае вы быстро станете непопулярными среди ваших коллег.

Жизнь с использованием систем контроля версий слишком хороша, чтобы ее разрушать неправильными действиями.

Автор оригинала - [Diomidis Spinellis](http://programmer.97things.oreilly.com/wiki/index.php/Diomidis_Spinellis)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://97-things-every-x-should-know.gitbook.io/97-things-every-programmer-should-know/ru/thing_63.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
