Аргументи зновузавантажують бінарні файли в SCM


10

Я працюю в компанії, яка в основному будує додатки Java, і я намагаюся переконати всіх припинити перевірку бінарних файлів (залежностей та кінцевих продуктів) до SCM.

Вони знають, що це погана практика, але вони вважають, що "це працює", і це насправді не проблема навіть тоді, коли багато людей знають про Мейвен та інші інструменти для будівництва, крім Мурахи. І прем'єр-міністри, і програмісти (близько 50 осіб) готові вислухати будь-який аргумент проти і навіть визнати, що це марно витрачається резервне місце, але я хочу бути справді переконливим, оскільки зміна звички передбачає багато зусиль. Які аргументи ви використовуєте для підтримки змін?

Редагувати: Гаразд, має сенс розрізняти файли, які майже не змінюються, як залежності, і генеровані файли. Тим не менш мене цікавлять причини проти останнього.

Відповіді:


7

Місце для зберігання дешево, тому це не дуже переконливий аргумент, чому слід чи не слід перевіряти файли.

Натомість Ви можете звернутися до мети СКМ. Кожен файл, який відстежується SCM, означає певну потребу в управлінні паралельними, розподіленими змінами, які робить ваша команда. Нічого цього насправді не видно, поки два члени команди не спробують змінити один і той же файл. Вирішення цих змін - це насправді SCM, запобігання випадкового перезапису роботи чергових розробників, і, сподіваємось, автоматизація процесу об'єднання цих змін.

Об'єднання бінарних файлів зазвичай є справжньою проблемою, оскільки загальний інструмент злиття не може здогадатися, як повинен працювати злитий бінарний файл. Він не може знати достатньо про те, як працюють індекси або зміщення покажчиків у файлі, якщо спеціально не розроблено для розпізнавання конкретного типу файлу.

Це означає, що розробити бінарний файл вручну до розробленого розробника, а потім сказати SCM, що файл був таким чином об’єднаний. Оскільки це робиться розробником, злиття може насправді не охоплювати всі зміни як попередньої реєстрації, так як файл є двійковим, не існує автоматизованого способу перевірки злиття.

Для бінарних форматів, які справді представляють джерела проектів, наприклад, художні активи, це невдалий, але необхідний крок. Однак результати нарощування не є джерелами. Немає необхідності їх об'єднувати, оскільки джерела можуть бути об'єднані і отриманий збірний вихід може бути відновлений. Відстеження та управління цими змінами - це 100% відходи. Він витрачає ресурси SCM, хоч і не дуже, але він також витрачає час розробника, минаючи помилкові збої злиття. Час розробника дуже дорогий, і все, що ставить його на сміття, - це рак.

З іншого боку, є певний випадок, коли результати збірки повинні бути заархівовані. Будь-яка версія проекту, яка коли-небудь була відправлена ​​або розгорнута, повинна, ймовірно, зберігатися на невизначений термін. Маючи точну, байт для байт-копії фактичної збірки, з якою у клієнта виникають проблеми, можна зробити підтримку цього клієнта набагато простішою, оскільки у вас буде точна версія, яку він має.

Таке резервне копіювання, ймовірно, не повинно бути в тому ж сховищі, що і вихідний код, оскільки вони, як правило, дотримуються різних графіків і мають в основному різні структури.


10

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


2

Однією з головних переваг використання SCM є те, що ви можете реконструювати систему з будь-якого часу в минулому. Тому немає сенсу зберігати остаточну збірку у своєму SCM, оскільки ви можете просто перевірити номер редакції та створити його.

Ви згадуєте про залежності ... Ваш SCM повинен бути налаштований так, щоб ви могли робити чисту реєстрацію на новій машині (із середовищем розробників), натискайте збірку, і ви зможете побудувати свою систему, не потребуючи нічого інсталювати. Тож збереження бінарних залежностей у вашому SCM - хороша ідея. Бібліотеки рідко змінюються, тому вони не займуть багато місця.

Майже ніхто цього не робить.


Гаразд, я згоден: залежності рідко змінюються. Але файл WAR 20 Мбіт із зміною одного рядка вихідного коду не заслуговує на реєстрацію.
Ітер

3
Чому ні? У вас буде не вистачає місця на диску? Якщо у вас немає джерела, і це потрібна залежність, то у вас немає вибору, якщо ви це зробите, то він не вважається бінарним, і ви можете побудувати його, коли вам це потрібно.
Генрі

0

Здається, зайве включати як вихідні, так і об’єктні файли (очевидно, необхідні вихідні файли). Окрім того, що вони просто непотрібні, об’єктні файли можуть займати багато місця. Якщо ваша фірма використовує розподілений SCM (Git, Hg, Bzr), то ці двійкові файли повинні бути скопійовані та збережені серед усіх розробників.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.