1

Я нахожусь в ситуации, когда клиент предоставил нам компьютер, который я могу использовать для VPN в своей сети, чтобы получить доступ к своему репозиторию SVN. Но мы не можем все заниматься разработкой на этом компьютере, поэтому мы экспортировали "нашу ветку", а затем импортировали ее в наше собственное хранилище SVN. Поскольку клиенту на самом деле нет дела до нашей повседневной работы, мы планируем просто добавить большие наборы изменений в удобное время. Это все будет работать, я уверен в этом.

В последнее время мне стало интересно, есть ли какой-нибудь простой способ получить набор изменений (то есть diff + message) из нашего SVN, а затем воспроизвести его в SVN клиента. Подобно тому, что позволяют git format-patch и git am .

Посмотрев на svn log --diff похоже, что это было бы возможно, но мне пришлось бы создать некоторый скрипт, чтобы разделить вывод на патч (для применения с помощью svn patch) и сообщение коммита (для передачи в svn commit -F). Я надеюсь, что есть решение, которое не требует от меня написания такого скрипта;)

2 ответа2

3
  1. LAST_MOVED - последний перемещенный коммит. в начале это 0, позже это увеличится.

  2. получить список коммитов:

    svn log -q -r $LAST_MOVED:HEAD | grep -o ^r[0-9]*

    это будет производить что-то вроде

    r10
    r12
    r16
    r22

  3. для каждого пересмотра вам нужно получить diff:

    svn diff -c $REVISION > $ REVISION.diff

    и зафиксировать сообщение:

    svn log -c $REVISION | tail -n -2 | head -n -1 > $ REVISION.txt

    у вас будет:

    r10.diff
    r10.txt

    r12.diff
    r12.txt

    r16.diff
    r16.txt

    r22.diff
    r22.txt

  4. получить эти файлы на целевой машине,

  5. запустить svn update

  6. для каждого r*.diff и r*.txt выполните:

    • patch -p0 -i r{number}.diff

    • svn commit -a -m --file r{number}.txt

Существует проблема в том, что svn не различает двоичные данные, поэтому любые двоичные данные не будут переданы с использованием этого метода. За каждый двоичный файл вы получите:

Индекс: путь / к / файлу / что-то.jar
================================================== =================
Невозможно отобразить: файл помечен как двоичный тип.
SVN: MIME-тип = приложение / октет-поток

Вы должны обнаружить эту строку в файлах diff, и для этих файлов вы можете использовать внешнюю команду diff, описанную в https://stackoverflow.com/a/2255846/146745

0

устарел, см. мой другой ответ

  1. изменить файлы
  2. запустить svn add *
  3. запустите svn diff > file.diff
  4. скопировать файл file.diff на компьютер клиента
  5. на клиентском ПК запустить svn update
  6. запустить patch -p0 -i file.diff
  7. запустить svn commit -a
  8. наслаждаться!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .