Номера версий Subversion - PullRequest
       35

Номера версий Subversion

2 голосов
/ 06 февраля 2010

Я никогда не работал с VCS, поэтому, пожалуйста, исправьте меня, если я сделаю какие-либо фундаментальные ошибки.

Для моего проекта я выбрал Subversion и читаю документацию. Если я правильно понимаю, номер редакции увеличивается при каждой регистрации. Однако это поднимает вопрос. Можно ли регистрировать более одного файла за раз (таким образом, приращение составляет только один)? Кроме того, что если, скажем, регистрация не компилируется ... будет ли увеличен номер редакции?

Ответы [ 5 ]

6 голосов
/ 06 февраля 2010

Можно ли регистрировать более одного файла за раз (таким образом, приращение составляет только один)?

Да, это возможно. См. Есть ли в Subversion наборы изменений? из официального FAQ.

Кроме того, что, если, скажем, регистрация не компилируется ... будет ли увеличен номер редакции?

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

Вы можете автоматизировать это, используя ловушку перед фиксацией , которая запускает ваши тесты и при этом условии продолжает регистрацию.

4 голосов
/ 06 февраля 2010

Да, вы можете проверить несколько файлов одновременно, и это только увеличит ревизию на 1.

Во втором вопросе я не думаю, что вы имеете в виду «компиляцию», поскольку системы контроля версий не заботятся о том, является ли код, который они контролируют, компилируемым. Я думаю, что вы имеете в виду «совершить». В этом случае ответ заключается в том, что коммиты subversion являются атомарными. Они либо полностью работают, либо полностью выходят из строя. Невозможно выполнить многофайловую фиксацию, и некоторые файлы будут успешными, но не другие. Неудачная фиксация не увеличивает номер редакции.

2 голосов
/ 06 февраля 2010

Коммиты Subversion являются транзакционными. Либо весь коммит успешен, либо весь коммит завершился неудачей. Если фиксация прошла успешно, номер редакции увеличивается. Таким образом, весь ваш коммит, независимо от того, сколько файлов он содержит, приведет к увеличению номера ревизии на 1.

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

Если вам нужен сервер сборки, я могу порекомендовать JetBrains TeamCity . TeamCity поставляется с плагином VisualStudio, который позволяет вам делать «предварительно протестированный коммит». То есть вы отправляете свой код на сервер сборки TeamCity, который собирает код. Если (и только если) сборка завершается успешно, TeamCity фиксирует ваши изменения в Subversion для вас. Если сборка не удалась, TeamCity уведомляет вас и не фиксирует код. Работает хорошо и помогает предотвратить смущение неработающих сборок:)

2 голосов
/ 06 февраля 2010

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

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

Обычно вы не выполняете коммит, если он не компилируется локально. Если вы это сделаете, вы «сломаете сборку», и должны положить деньги в команду «Китти». ; -)

1 голос
/ 06 февраля 2010

Некоторые системы контроля версий используют номер редакции для каждого файла. Subversion использует один номер ревизии для всего хранилища. Когда вы делаете коммит, вы можете заставить Subversion фиксировать изменения, сделанные вами в одном файле, нескольких файлах или даже в каждом файле, который был изменен с момента вашей последней проверки (см. Документацию для svn add, svn revert и svn commit). Subversion рассматривает фиксацию как атомарную транзакцию; то есть независимо от того, сколько или сколько файлов вы фиксируете, все они фиксируются в одной операции, которая либо полностью завершается, либо полностью завершается неудачей (в этом случае хранилище не изменяется). Каждый раз, когда вы вводите команду фиксации, номер редакции для всего хранилища увеличивается.

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

Для получения дополнительной информации я настоятельно рекомендую прочитать (бесплатную) официальную книгу Subversion "Контроль версий с Subversion" . Его легко прочитать, он содержит почти все, что вы когда-либо хотели знать о Subversion, и содержит множество примеров.

...