Предлагаемый Курс Молодого Бойца:

  1. Достать рабочую копию (checkout)
    $ svn co \
      https://svn.local/svn/test/trunk
  2. Создать приватную ветку (copy)
    $ svn cp \
      https://svn.local/svn/test/trunk \
      https://svn.local/svn/test/branches/private_vnaum
    

    Как любая операция, изменяющая репозитарий, эта потребует commit message. Будет запущен $EDITOR. Введите осмысленное сообщение. Пример: "Creating private branch private_vnaum for testing"

  3. Переключить копию на приватную ветку (switch)
    $ svn switch \
      https://svn.local/svn/test/branches/private_vnaum
    
  4. Добавить файл (add)
    $ date > QQ
    $ svn add QQ
    A         QQ
    
  5. Изменить файл (не тот, что добавили)
    $ date >> ZZ
    
  6. Посмотреть состояние копии (stat)
    $ svn stat
    A      QQ
    M      ZZ
    

    QQ - локально добавлен, ZZ - локально изменён.

  7. Посмотреть сделанные изменения копии (diff)
    $ svn diff
    Index: QQ
    ===================================================================
    --- QQ  (revision 0)
    +++ QQ  (revision 0)
    @@ -0,0 +1 @@
    +Thu Jan  4 13:42:28 OMST 2007
    ...
    
  8. Записать изменения рабочей копии в репозитарий (commit)
    $ svn commit
    
  9. Изменить файл
    $ date >> QQ
    
  10. Посмотреть сделанные изменения копии (diff)
    $ svn diff
    
  11. Отменить изменения (revert)
    $ svn revert -R .
    
  12. Сложное (на пятёрку): слияние веток
    1. Определить changeset (набор изменений, которые будем переносить)

      Для этого проще всего сначала переключиться на ветку, с которой будем переносить изменения, а там воспользоваться svn log. Мы будем переносить с вашей приватной ветки, на которой сейчас и находимся.

      Смотрим svn log:

      $ svn log --stop-on-copy
      ------------------------------------------------------------------------
      r7 | vnaum | 2007-01-04 14:13:19 +0600 (Thu, 04 Jan 2007) | 2 lines
      
      test edits
      
      ------------------------------------------------------------------------
      r6 | vnaum | 2007-01-04 12:59:31 +0600 (Thu, 04 Jan 2007) | 1 line
      
      Creating private branch
      ------------------------------------------------------------------------
      

      --stop-on-copy - это чрезвычайно полезная опция к svn log, которая покажет log только до момента создания вашей ветки.

      Итак, видим, что наши изменения произошли с r6 до r7 (r6:7) на ветке https://svn.local/svn/test/branches/private_vnaum (Если вы вдуг забыли, с какой ветки ваша рабочая копия - к вашим услугам всегда svn info).

    2. Создать ещё одну ветку
      $ svn cp \
        https://svn.local/svn/test/trunk \
        https://svn.local/svn/test/branches/private_vnaum_merge_target
      

      (Мы создаём её ещё раз как копию trunk - там нет никаких изменений).

    3. Переключиться на целевую ветку
      $ svn switch \
        https://svn.local/svn/test/branches/private_vnaum_merge_target
      D  QQ
      U  ZZ
      Updated to revision 10.
      

      Забыли название ветки? Не беда! svn list покажет содержимое любого каталога в репозитарии:

      $ svn list https://svn.local/svn/test/branches
      private_vnaum/
      private_vnaum_merge_target/
      
    4. Накатить changeset:

      Для этого нам надо знать две вещи: с какой ветки мы будем брать изменения (private_vnaum) и собственно changeset (с какой по какую версии). Изменения накатываются на рабочую копию.

      $ svn merge \
        -r 6:7 \
        https://svn.local/svn/test/branches/private_vnaum
      A  QQ
      U  ZZ
      

      Как видим, добавился новый файл, изменился имеющийся.

    5. Закоммитить изменения
      $ svn commit \
        -m "Merged changeset 6:7 from private_vnaum (test changes)" 

      В commit message ОБЯЗАТЕЛЬНО укажите, какой changeset и откуда замержили!

      Неплохо бы также вкратце рассказать, что это были за изменения.