Что подвергнуть управлению версиями?

Почти любой IDE создает много файлов, которые не имеют никакого отношения к разработанному приложению, они сгенерированы и сохраняются IDE, таким образом, он знает, как создать приложение, где репозиторий управления версиями и так далее.

Те файлы должны быть сохранены при управлении версиями наряду с файлами, которые действительно имеют некоторое отношение к приложению (исходный код, конфигурационные файлы приложения...)?

Вещи: на некоторых IDE, если Вы создаете новый проект и затем импортируете его в репозиторий управления версиями с помощью клиента/команд управления версиями, встроенного в IDE, затем все те файлы отправляются в respitory. И я не уверен правильно: что два различных разработчика работает над тем же проектом, хотят использовать два различных IDE?


Я хочу сохранить этого агностика вопроса предотвращением ссылок на какой-то конкретный IDE, язык программирования или систему управления версиями. Таким образом, этим вопросом не является точно то же как они:

19
задан Community 23 May 2017 в 12:19
поделиться

7 ответов

Эмпирические правила:

  1. Включите все, что влияет на результат сборки (параметры компилятора, кодировки файлов, настройки ASCII / двоичного кода и т. Д.)
  2. Включите все, чтобы сделать это возможно открыть проект из чистой кассы и иметь возможность компилировать / запускать / тестировать / отлаживать / развертывать его без какого-либо дополнительного ручного вмешательства
  3. Не включать файлы, содержащие абсолютные пути
  4. Избегайте включения личных предпочтений (размер табуляции, цвета, положение окон)

Следуйте правилам в этом порядке.

[Обновление] Всегда возникает вопрос, что должно происходить с сгенерированным кодом. Как правило, я всегда помещаю их под контроль версий. Как всегда, относитесь к этому правилу с недоверием.

Мои причины:

Управление версиями сгенерированного кода кажется пустой тратой времени. Он генерируется правильно? Я могу вернуть его одним нажатием кнопки!

Правда?

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

И даже если бы вы могли, могли ли вы когда-нибудь быть уверены, что это не так? Вы что-то пропустили?

Так что, с одной стороны, помещение сгенерированного кода в систему контроля версий имеет смысл, поскольку это значительно упрощает выполнение того, для чего предназначена VCS: вернуться в прошлое.

Кроме того, это позволяет легко увидеть различия. Генераторы кода тоже содержат ошибки. Если я исправляю ошибку и получаю 150 000 файлов, это очень помогает, когда я могу сравнить их с предыдущей версией, чтобы увидеть, что а) ошибка исчезла и б) ничего остальное не изменилось неожиданно. Это неожиданная часть, о которой вам следует беспокоиться. Если нет, дайте мне знать, и я позабочусь о том, чтобы вы никогда не работали в моей компании и : -)

Основная проблема генераторов кода - стабильность. Этого не происходит, когда ваш генератор кода просто выплевывает случайный беспорядок байтов при каждом запуске (ну, если вы не заботитесь о качестве). Генераторы кода должны быть стабильными и детерминированными . Вы запускаете их дважды с одним и тем же входом, и выход должен быть идентичным до младшего разряда.

Итак, если вы не можете проверить сгенерированный код, потому что каждый запуск генератора создает различия, которые не t там, значит, в вашем генераторе кода есть ошибка. Почини это. При необходимости отсортируйте код. Используйте хэш-карты, сохраняющие порядок. Сделайте все необходимое, чтобы вывод был неслучайным. Точно так же, как вы делаете везде в вашем коде.

Сгенерированный код, который я не мог бы поставить под контроль версий, будет документацией. Документация - довольно мягкая цель. Это не имеет большого значения, когда я регенерирую неправильную версию документов (скажем, в ней есть несколько опечаток). Но для релизов, Я мог бы сделать это в любом случае, чтобы увидеть разницу между релизами. Это может быть полезно, например, чтобы убедиться, что примечания к выпуску полны.

Я также не проверяю файлы JAR. Поскольку у меня есть полный контроль над всей сборкой и полная уверенность в том, что я могу вернуть любую версию исходников за минуту, плюс я знаю, что у меня есть все необходимое для ее сборки без какого-либо дополнительного ручного вмешательства , почему мне нужны исполняемые файлы для? Опять же, может иметь смысл поместить их в специальный репозиторий релизов, но тогда лучше храните копию за последние три года на веб-сервере вашей компании для загрузки. Подумайте: сравнивать двоичные файлы сложно и мало что вам скажет.

Поскольку у меня есть полный контроль над всей сборкой и полная уверенность в том, что я могу вернуть любую версию исходников за минуту, плюс я знаю, что у меня есть все необходимое для ее сборки без какого-либо дополнительного ручного вмешательства , почему мне нужны исполняемые файлы для? Опять же, может иметь смысл поместить их в специальный репозиторий релизов, но тогда лучше храните копию за последние три года на веб-сервере вашей компании для загрузки. Подумайте: сравнивать двоичные файлы сложно и мало что вам скажет.

Поскольку у меня есть полный контроль над всей сборкой и полная уверенность в том, что я могу вернуть любую версию исходников за минуту, плюс я знаю, что у меня есть все необходимое для ее сборки без какого-либо дополнительного ручного вмешательства , почему мне нужны исполняемые файлы для? Опять же, может иметь смысл поместить их в специальный репозиторий релизов, но тогда лучше храните копию за последние три года на веб-сервере вашей компании для загрузки. Подумайте: сравнивать двоичные файлы сложно и мало что вам скажет.

Лучше сохраните копию за последние три года на веб-сервере вашей компании для загрузки. Подумайте: сравнивать двоичные файлы сложно и мало что вам скажет.

Лучше сохраните копию за последние три года на веб-сервере вашей компании для загрузки. Подумайте: сравнивать двоичные файлы сложно и мало что вам скажет.

18
ответ дан 30 November 2019 в 03:43
поделиться

Все, что может быть автоматически сгенерировано из исходного кода + конфигурация файлы не должны находиться под контролем версий! Это только вызывает проблемы и ограничения (например, тот, который вы указали - использование двух разных файлов проекта разными программистами).

Это верно не только для «ненужных файлов» IDE, но и для промежуточных файлов (например, .pyc в python, .o в c и т. Д.).

4
ответ дан 30 November 2019 в 03:43
поделиться

Здесь используются автоматизация сборки и файлы сборки.

Например, вы все еще можете собрать проект (очевидно, что двум разработчикам понадобится одно и то же программное обеспечение для сборки ), но они, в свою очередь, могли бы использовать две разные IDE.

Что касается генерируемого «мусора», я обычно игнорирую его. Я знаю, что это не зависит от языка, но подумайте о Visual Studio. Он генерирует пользовательские файлы (пользовательские настройки и т. Д.), Которые не должны находиться в системе контроля версий.

С другой стороны, файлы проекта (используемые в процессе сборки), безусловно, должны. Я должен добавить, что если вы работаете в команде и все согласовали IDE, тогда проверка в файлах, специфичных для IDE, будет прекрасной при условии, что они являются глобальными, а не специфичными для пользователя и / или не нужны.

3
ответ дан 30 November 2019 в 03:43
поделиться

Я думаю, что лучше всего поставить под контроль версий все, что помогает разработчикам быстро приступить к работе, игнорируя все, что может быть автоматически сгенерировано средой IDE или инструментами сборки (например, плагин Maven eclipse создает .project и .classpath - не нужно их проверять). Особенно избегайте файлов, которые часто меняются, не содержат ничего, кроме пользовательских настроек, или конфликтуют между IDE (например, другая IDE, которая использует .project точно так же, как eclipse).

Для пользователей eclipse я считаю особенно удобным добавить стиль кода ( .settings / org.eclipse.jdt.core.prefs - автоматическое форматирование при сохранении включено) для получения согласованно отформатированного кода.

6
ответ дан 30 November 2019 в 03:43
поделиться

На мой взгляд, это зависит от проекта и среды. В корпоративной среде, где все используют одну и ту же среду IDE, может иметь смысл добавить файлы IDE в репозиторий. Хотя это немного зависит от среды IDE, поскольку некоторые из них включают абсолютные пути к объектам.

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

2
ответ дан 30 November 2019 в 03:43
поделиться

На мой взгляд, все, что нужно для сборки проекта (код, файлы сборки, носители, базы данных с необходимой информацией о программе и т. Д.), Должно находиться в репозиториях. Я понимаю, что специально для медиа / файлов баз данных это contriversial, но мне, если вы не можете ветви, а затем ударил сборки управления источником не делает его работу. Это вдвойне для распределенных систем с дешевым созданием / объединением веток.

Что-нибудь еще? Храните его в другом месте. Разработчики должны максимально выбирать собственную рабочую среду.

0
ответ дан 30 November 2019 в 03:43
поделиться

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

2
ответ дан 30 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: