Эмпирические правила:
- Включать все, что имеет влияние на результат сборки (опции компилятора, файловые кодировки, ASCII/двоичных установок и т.д.)
- включает в себя все, чтобы сделать возможным, чтобы открыть проект с чистого проверки и возможность компиляции/запуска/тест/отладки/развернуть без дальнейшего ручного вмешательства
- не включать файлы, которые содержат абсолютные пути
- Избегайте включая персональные предпочтения (размер вкладок, цвета, положения окон)
Следуйте правилам в этом заказе.
[Обновить] Всегда есть вопрос, что должно произойти с сгенерированным кодом. Как правило, я всегда ставил их под контроль версий. Как всегда, принимайте это правило с солью.
Мои причины:
Versioning сгенерированный код кажется пустой тратой времени. Это правильно? Я могу вернуть его одним нажатием кнопки!
Действительно?
Если вам нужно было укусить пулю и сгенерировать точно такую же версию какой-либо предыдущей версии, обязательно, сколько усилий было бы? При генерации кода вы должны не только получить все входные файлы правильно, но также вам нужно повернуть время назад для самого генератора кода. Можете ли вы это сделать? Всегда? Как легко было бы проверить определенную версию сгенерированного кода, если бы вы поставили его под контроль версий?
И даже если бы вы могли, могли бы вы когда-нибудь быть уверены, что ничего не пропустили?
Итак, с одной стороны, создание сгенерированного кода под управлением версии имеет смысл, поскольку делает его мертвым легко сделать то, что предназначено для VCS: вернитесь во времени.
Также это позволяет легко увидеть различия. Генераторы кода также не работают.Если я исправлю ошибку и создаю 150 000 файлов, это очень помогает, когда я могу сравнить их с предыдущей версией, чтобы увидеть, что а) ошибка исчезла и b) ничего еще неожиданно изменилось. Это неожиданная часть, о которой вам следует беспокоиться. Если вы этого не сделаете, сообщите мне, и я обязательно буду работать в своей компании. :-)
Основная причина боли в генераторах кода - стабильность. Этого не происходит, когда генератор кода просто выплевывает случайный беспорядок байтов каждый раз, когда вы запускаете (ну, если вы не заботитесь о качестве). Генераторы кода должны быть стабильными и deterministic. Вы запускаете их дважды с одним и тем же входом, а выход должен быть идентичным до младшего значащего разряда.
Так что если вы не можете проверить сгенерированный код, потому что каждый запуск генератора создает различия, которых нет, то ваш генератор кода имеет ошибку. Почини это. Сортируйте код, когда вам нужно. Используйте хэш-карты, которые сохраняют порядок. Сделайте все необходимое, чтобы сделать вывод неслучайным. Точно так же, как вы делаете всюду в своем коде.
Сгенерированный код, который я, возможно, не поставил под контроль версий, будет документацией. Документация - это несколько мягкая цель. Это не имеет значения, когда я регенерирую неправильную версию документов (скажем, она имеет несколько опечаток более или менее). Но для релизов я мог бы это сделать так, чтобы я мог видеть различия между релизами. Может быть полезно, например, убедиться, что заметки о выпуске завершены.
Я также не проверяю файлы JAR. Поскольку у меня есть полный контроль над всей сборкой и полная уверенность в том, что я смогу вернуть любую версию источников за минуту, и я знаю, что у меня есть все необходимое для ее создания. без какого-либо дополнительного ручного вмешательства., зачем мне для исполняемых файлов? Опять же, было бы целесообразно разместить их в специальном репо-релизе, но затем лучше сохранить копию последних трех лет на веб-сервере вашей компании для загрузки. Подумайте: сравнивать бинарные файлы сложно и много не говорит.
См. Также http://stackoverflow.com/questions/116121/do-you-keep-your-project-files-under-version-control/119377#119377 – VonC