Основные вопросы Subversion - PullRequest
3 голосов
/ 13 мая 2010

Я только начал использовать Subversion и прочитал официальную документацию (svn book), шпаргалку и пару руководств. Я знаю, как установить Subversion (в Linux), создать репозиторий (svnadmin create) и импортировать мой проект Eclipse в репозиторий (импорт SVN), просматривать файлы репозитория (используя список SVN).

Но я не могу понять некоторые другие термины. Например, после импорта моего проекта Eclipse во вновь созданный репозиторий я внес изменения в свой проект Eclipse (более 1 файла). Теперь, как мне обновить хранилище с добавленными файлами / изменениями, внесенными в мой проект Eclipse?

Команда svn update переносит изменения из репозитория в вашу рабочую копию - что противоположно тому, что я хочу, т.е. вносить изменения, которые я сделал в моем проекте Eclipse, в ранее импортированный проект в репозитории. Если я прав, вы обновляете хранилище чаще (поскольку вы продолжаете расширять реализацию вашего проекта), чем ваш текущий проект (с обновлением).

Кроме того, я не понимаю, когда бы вы использовали SVN Merge. В книге SVN говорится, что она применяет различия между двумя источниками к рабочей копии. Есть ли сценарий, который бы это объяснил?

Наконец, можно ли зарегистрировать более 1 проекта в хранилище? Или лучше создать новый репозиторий для каждого проекта?

Ответы [ 5 ]

5 голосов
/ 13 мая 2010
  1. Вы ищете термин «совершить».

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

  3. Несколько проектов в порядке. Наилучшим подходом IMHO является хранилище / проект / ствол и т. Д., А не хранилище / ствол / проект.

2 голосов
/ 13 мая 2010

Три вещи о SVN, которые вы должны знать:

  1. Магистраль - основная версия вашего кода
  2. Теги - 'Tagged' Версии вашего кода (т.е. v1.2.5-release)
  3. Ветви - Форки кода для различных путей разработки. Как правило, мы разветвляем новые ветки для работы с разными версиями, поэтому, если текущая версия 1.2.4, вы переходите к разработке 1.3. Поэтому, если необходимо внести экстренные изменения в 1.2 (то есть 1.2.5), вы можете работать над этим, не беспокоясь о том, что вы сломали, путем рефакторинга / добавления функций в ветке 1.3. Операция merge разработана таким образом, что вы можете объединить ветвь 1.3 обратно в транк, когда будете готовы к выпуску 1.3, или подобной операции. Вы также можете объединить отдельные файлы (если два или более разработчиков редактировали один и тот же файл одновременно, и теперь вам нужно «объединить» изменения в один файл.

В каждом проекте в вашем хранилище должно быть 3 папки:

  1. /trunk
  2. /branches
  3. /tags

Эти три дома выше. Вам не нужно иметь эти папки, но вы должны . Другие более зрелые VCS , такие как Mericual / Git, имеют понятия tags и branches, встроенные в систему. В SVN это скорее соглашение / рекомендация.

Терминология

  • Рабочая копия - копия на вашем жестком диске, которая содержит все ваши изменения и т. Д ...
  • Добавить - регистрирует файл для отслеживания в управлении версиями
  • Обновление - обновляет working copy с изменениями server repository
  • Commit - обновляет server repository с изменениями working copy
  • Переключатель - заменяет working copy другой папкой в ​​server repository
  • Diff - проводит дифференциальный анализ двух файлов / версий файла, чтобы увидеть изменения между ними.
  • Слияние - пытается применить изменения из одного или нескольких файлов в другой, выделяя конфликты.
  • Patch - набор различий, которые можно использовать для обновления файла.
1 голос
/ 13 мая 2010

Полностью согласен с Дэвидом, но, что касается вопроса 3, лично я бы различал варианты использования:

  1. Производство: один проект на репозиторий. И согрейтесь с упомянутой концепцией тега / ствола / ответвления, это действительно очень помогает

  2. Тестирование: у меня есть один репозиторий, в который я поместил практически все моих экспериментальных кодов (примерно 10 языков с x кодами на язык). Причина в том, что один экспериментальный код занимает у меня 1-2 минуты, создание хранилища на удаленном хосте, использование ssh-security иногда занимает больше времени; -)

Приветствие EL

1 голос
/ 13 мая 2010

Я предлагаю вам взглянуть на «типичные рабочие процессы SVN». Они дадут вам общую картину «самых распространенных задач».

Что вы хотите сделать, это «зафиксировать» изменения, внесенные в ваши файлы, в хранилище.

Вам необходимо объединиться в случае конфликта (когда 2 или более человека работают над проектом и совершают одно и то же репо. Могут возникнуть конфликты).

Проверьте доступные статьи по SVN. Kai не забудьте прочитать о типовых / типовых рабочих процессах или рабочих сценариях с SVN.

1 голос
/ 13 мая 2010

Вы commit изменения в хранилище

Слияние полезно, когда вам нужно поддерживать две ветви хранилища. Например, v1.x с последними исправлениями безопасности и альфа-версией 2. Это позволяет вам вносить исправления в код 1.x с полученным двоичным кодом для существующих клиентов, и вы можете объединить изменения в версию 2, чтобы исправить ошибки, которые еще не были обнаружены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...