SVN для разработчиков Delphi - PullRequest
5 голосов
/ 28 января 2009

Я уже публиковал вопрос, Отойдя от VSS , в котором я спросил о лучшем контроле VCS для разработчиков Delphi, которые использовали VSS. Кажется, большинство разработчиков используют SVN с TortoiseSVN. Я пробовал это в течение нескольких дней, и я думаю, что это лучший путь.

Тем не менее, у меня все еще есть некоторая путаница в отношении того, как работает svn, поэтому вот несколько вопросов, на которые я бы хотел ответить:

  1. Могу ли я работать со старым способом блокировки (checkout-modify-checkin), который использует vss?

  2. Формы Delphi имеют два файла (MyForm.pas, MyForm.dfm). Когда я добавляю какой-либо элемент управления в форму, оба файла будут изменены, поэтому я хочу зафиксировать «myform.pas», а также «myform.dfm» с ним. Я что-то здесь упускаю?

  3. То же самое относится к файлу проекта Delphi. Поскольку это связано с другими файлами, все они должны быть зафиксированы, когда я изменяю файл проекта.

  4. Какие файлы вы пометили, чтобы они игнорировались в TSVN, поэтому TSVN не будет искать такие файлы, как ( .dcu, .exe, ...), и могу ли я экспортировать его с одного ПК на другой?

Теперь мне нужно изменить способ мышления в стиле vss и изменить его на стиль SVN, но с помощью vss все вещи управлялись в IDE, что было фантастически; -).

UPDATE:

5.Если я фиксирую форму Delphi (.pas & dfm) и обнаружил, что ранее кто-то уже обновил версию, как вы разрешаете конфликт, если к этой форме и модулю добавлены новые элементы управления и события (для этого требуется Delphi) разработчик с svn).

Ответы [ 9 ]

18 голосов
/ 28 января 2009
  1. Да, вы все еще можете заблокировать файлы, но это не рекомендуется. Вы должны установить свойство svn: needs-lock для всех файлов, которые вы хотите заблокировать, чтобы они устанавливали флаг readonly при извлечении. Но опять же, это не рекомендуемый рабочий процесс для текстовых файлов. Просто попробуйте изменить процесс слияния!
  2. Поскольку вы используете TortoiseSVN: щелкните правой кнопкой мыши по родительской папке и выберите «Зафиксировать». В диалоге фиксации вы увидите все файлы, которые нужно зафиксировать. Просто проверьте файл myform.pas и файл myform.dfm для фиксации. Все проверенные файлы будут зафиксированы вместе, нет необходимости (и, безусловно, не рекомендуется!) Фиксировать каждый файл отдельно!
  3. См. 2. - Но вы должны сначала прочитать замечательную Subversion книгу , чтобы ознакомиться с концепцией. Вы должны всегда фиксировать все файлы, которые принадлежат к логическому изменению. Например, если вы добавите в свою форму новые элементы управления и внедрите код для ее обработки, у вас может быть больше, чем просто измененные файлы формы, но еще несколько файлов. Всегда фиксируйте все эти файлы вместе, так как фиксация является логической сущностью.
  4. Вам не нужно «экспортировать» игнорируемые настройки. Просто добавьте свойство svn: ignored. Это очень легко сделать с помощью TortoiseSVN, как описано в документах .
6 голосов
/ 28 января 2009

Re 5 .: Вы должны попробовать это. Чтобы ограничить конфликтный потенциал, очень полезно, чтобы активный разработчик часто делал коммиты, а все остальные часто обновлялись из SVN. Настройка уведомлений о фиксации электронной почты может сильно помочь, так что все люди знают, когда обновлять. Но, сказав это, вы обнаружите, что простое действие по удалению элемента управления и всех его обработчиков событий или добавлению элемента управления и нескольких обработчиков не приведет к конфликтам, которые необходимо разрешить вручную.

Редактировать: В этом ответе DiGi говорится, что Delphi изменяет DFM, даже если пользователь этого не сделал. Это не является верным IMO, поскольку простое изменение метки времени DFM не квалифицируется как локальное изменение файла DFM, и SVN не будет фиксировать новую ревизию. Однако следует соблюдать осторожность, чтобы не перемещать формы в Delphi IDE, так как это изменит свойства Top и / или Left формы. Аналогичным образом, изменение активной страницы элемента управления страницы считается локальной модификацией. Поэтому перед фиксацией рекомендуется изучить все локальные модификации и отменить все те, которые являются просто случайными.

Редактировать 2: Как оннодб указал в своем комментарии, кажется, что свойства формы действительно изменяются автоматически, по крайней мере в Delphi 2007 (и, возможно, позже?). Это подчеркнуло бы важность проверки всех локальных изменений перед фиксацией.

4 голосов
/ 28 января 2009

Также см. Как начать работать с Sub-Version + Delphi? для некоторых инструментов SVN, которые также интегрируются в Delphi IDE.

1 голос
/ 14 октября 2011

Вот что мы видим с поведением файла DFM: * независимо от рассматриваемой версии Delphi, среда IDE любит предлагать devoloper «сохранить» форму, даже если в уровне DFM уровня PAS не произошло никаких истинных изменений. Пример: разработчик немного переместил окно разработки для formX в IDE, но ничего не сделал для formX. При использовании VSS свойство readonly в файлах действовало как полиция - гарантировало, что никакие «изменения без изменений» не станут кандидатами для регистрации. * под D2006 и, возможно, под IDE двоюродных братьев, таких как D2007 и D2009, что-то хуже, по нашему опыту, для разработчиков, сидящих за коробками WinVista или Win7. некоторые действия с формой в режиме конструктора будут «сдвигать» значения пикселей в базовом DFM и сдвигаться на достаточно малые значения (2,6), которые разработчик МОЖЕТ не заметить. Панели и поля прокрутки кажутся особенно уязвимыми. все это без намерения разработчика. В дни VSS это было небольшим неудобством, поскольку только DFM, явно проверенные, подвергались риску в отношении «сдвига». в SVN / Tortoise эта проблема возрастает, так как нет файлов, защищающих файлы только для чтения. Да, правда, в конечном счете, разработчик несет ответственность во время регистрации за тщательное изучение того, что изменилось, на уровне DFM в виде текста. Но это хлопотно, добавляет накладных расходов в цикл разработки, и мы уверены, что это не так. Интересно, что этот «сдвиг» не происходит на рабочих станциях WinXP. ПОЧЕМУ ЭТО ВАЖНО, для сообщества SVN / Turtoise. Любой, кто спешит проверить DFM по какой-либо причине, рискует позволить «смене» принять эффективное управление своим пользовательским интерфейсом. И делает ностальгию по атрибуции VSS только для чтения; даже до точки зрения использования упомянутого выше свойства svn: needs-lock. ПРОБЛЕМА, КОТОРОЕ Я ПРЕДЛАГАЛ НЕКОТОРЫЕ РЕШЕНИЯ, но пока мы находимся только с переменными и планируем игру, как минимизировать проблемы DFM с нашей реализацией SVN / Tortoise. К вашему сведению, в настоящее время мы не видим сообщений Embarcedero о симптоме «смещения».

1 голос
/ 30 января 2009

Файлы DFM не меняются сами по себе, для меня.

Я не уверен, что другие люди делают с их файлами dfm, или какие настройки в Delphi могут вызвать это. У меня нет проблем. Только dfm файлы, которые я изменяю, перечислены (как измененные) в диалоге фиксации. Я использую Delphi 2007 и Delphi 7.

1 голос
/ 28 января 2009

Обычно я использую этот маленький скрипт на python перед обновлением из SVN, чтобы очистить дерево исходных текстов.

Я храню файлы .dof в SVN, поэтому мне нужно зафиксировать вручную любое изменение .dof перед очисткой дерева исходных текстов.

import os
import sys

exts = ['.~pas', '.~dpk', '.~bpl','.dcu', '.~dcu', '.dcp', '.~dcp',
        '.dof', '.cfg', '.res', '.~res']

def mydir():
    if __name__ == '__main__':
        filename = sys.argv[0]
    else:
        filename = __file__
    return os.path.abspath(os.path.dirname(filename))


def clean_dir(arg, dirname, names):
    for name in names:
      if os.path.splitext(name)[1].lower() in exts:
        file2delete = os.path.join(dirname,name)
        print os.path.join(file2delete)
        os.remove(file2delete)


if __name__=="__main__":
  print "Cleaning Tree"
  os.path.walk(mydir(), clean_dir, "a")
1 голос
/ 28 января 2009

Разработчики могут использовать CommitMonitor для получения информации о новых коммитах.

объявление 5: Плохо, если два или более разработчиков используют один и тот же .dfm. Простые модификации могут работать (сливаться) нормально. это важно сделать, только если вы действительно изменили файлы. Delphi обычно модифицирует .dfm, даже если вы ничего не меняете.

1 голос
/ 28 января 2009
  1. Да.

  2. TortoiseSVN автоматически помечает все измененные файлы под контролем версий при фиксации.

  3. См. 2.

  4. Создать список игнорирования очень легко. Просто щелкните файл правой кнопкой мыши, и вы получите возможность игнорировать все файлы этого типа.

Если вы используете Visual Studio, вы можете использовать Ankh SVN для интеграции с IDE.

0 голосов
/ 28 января 2009

Вы могли бы нас SourceConexion . Интегрируется в Delphi IDE. Он поддерживает блокировку файлов, чтобы у вас не возникало проблем с файлами DFM.

Я использую TortoiseSVN при работе с C #, но в Delpi я считаю целесообразным использовать SC, так как я получил поврежденные файлы DFM после того, как более одного разработчика внесли в них изменения.

...