Вопрос

Учитывая то дело, которое я выдвинул два независимых изменения в один файл:например.добавлен новый метод и изменен другой метод.

Я часто не хочу фиксировать оба изменения как один совершать, но как два независимые коммиты.

В репозитории git я бы использовал Интерактивный режим из git-добавить(1) чтобы разделить ломоть на более мелкие:

 git add --patch

Какой самый простой способ сделать это с помощью Subversion?(Возможно, даже с использованием плагина Eclipse)

Обновить:
В Фишка В Git, Райан называет это: “Запутанная проблема с рабочей копией”.

Это было полезно?

Решение

С помощью git-svn вы можете создать локальный репозиторий GIT из удаленного репозитория SVN, работать с ним, используя полный набор функций GIT (включая частичные коммиты), а затем отправить все это обратно в репозиторий SVN.

git-svn (1)

Другие советы

Черепаха SVN 1.8 теперь поддерживает это с помощью функции "Восстановить после фиксации".Это позволяет вам вносить изменения в файл, при этом все изменения отменяются после фиксации

Согласно документации:

Фиксировать только те части файла, которые относятся к одной конкретной проблеме:

  1. в диалоговом окне фиксации щелкните правой кнопкой мыши на файле и выберите "восстановить после фиксации".
  2. отредактируйте файл, например, вЧерепашье слияние:отмените изменения, которые вы пока не хотите фиксировать
  3. сохраните файл
  4. зафиксируйте файл

Я сделал это с помощью TortoiseSVN.

Встроенная утилита слияния позволяет вам показать разницу между версией репозитория и вашей рабочей копией.

Используйте создать резервную копию функция утилиты diff

  1. Перейдите к фиксации вашего файла, как если бы вы собирались зафиксировать все свои изменения.
  2. В окне фиксации дважды щелкните файл, чтобы отобразить разницу.
  3. В настройках различий выберите опцию, чтобы создайте резервную копию исходного файла.
  4. Щелкните правой кнопкой мыши изменения, которые вам не нужны, и используйте команду выбрать использовать другой текстовый блок.
  5. Сохраните разницу ровно один раз.Резервная копия будет перезаписываться при каждом сохранении.Вот почему вы хотите сохранить только один раз.
  6. Зафиксируйте изменение.
  7. Замените оригинал созданным файлом .bak (в котором будут все ваши исходные изменения).
  8. Зафиксируйте ваш файл.

Теперь вы должны зафиксировать все свои изменения, используя два отдельных коммита.

Попробуйте использовать svn diff > out.patch затем скопируйте out.patch файл для out.patch.add и out.patch.modify

Только тогда, когда у вас есть рабочий файл исправления верните исходный файл, используя svn revert out.c.

Отредактируйте файлы исправлений вручную, чтобы они содержали только куски для добавления или изменения.Примените их к исходному файлу с помощью patch команда, проверьте, сработало ли дополнение, затем svn commit дополнение.

Промыть, ополоснуть, повторить для out.patch.modify патч.

Если изменения внесены в файл отдельно, как указано в вашем первоначальном вопросе - добавлен новый метод, изменен существующий метод - это сработает

Это очень утомительное решение, хотя я не уверен, что у вас должны быть какие-либо причины разделять ваши коммиты.

Вы также могли бы проверить несколько рабочих копий одного и того же источника, чтобы применить свою работу к ним:

svn co http://location/repository methodAdd

svn co http://location/repository methodModify

Будьте уверены, что svn up и протестируйте, чтобы убедиться, что все в порядке.

Это возможно с помощью TortoiseSVN (Windows) начиная с версии v1.8.

4.4.1.Диалоговое окно Фиксации

Если ваша рабочая копия обновлена и конфликтов нет, вы готовы зафиксировать свои изменения.Выберите любой файл и / или папки, которые вы хотите зафиксировать, затем TortoiseSVN → Зафиксировать....

<snip>

4.4.3.Фиксируйте только части файлов

Иногда вы хотите зафиксировать в файле только часть внесенных вами изменений.Такая ситуация обычно возникает, когда вы работаете над чем-то, но затем требуется срочное исправление , которое необходимо зафиксировать, и это исправление находится в том же файле, над которым вы работаете.

щелкните правой кнопкой мыши на файле и выберите Контекстное меню → Восстановить после фиксации.Это создаст копию файла таким, какой он есть.Затем вы можете отредактировать файл , напримерв TortoiseMerge и отмените все изменения, которые вы не хотите фиксировать .После сохранения этих изменений вы можете зафиксировать файл.

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

В Linux я бы дал http://webstaff.itn.liu.se /~karlu20/div/blog/2013-05-31_SVNPartialCommit.php попробовать.Хотя сам я этого еще не пробовал.

Я привык делать это:

  • В моем редакторе (я использую vim) отредактируйте файл так, чтобы появилось только одно из изменений
  • Сохраните файл (но не выходите из редактора).
  • Зафиксируйте измененный файл в svn
  • Нажмите "отменить" в редакторе достаточное количество раз, чтобы снова появился второй набор изменений
  • Сохраните файл еще раз
  • Зафиксируйте второй набор изменений.

Это упрощенный подход, который предполагает, что один набор изменений достаточно легко отменить.В более сложных ситуациях я бы сдался и зафиксировал оба изменения, не беспокоясь об этом.

Теперь, когда я использую git, я надеюсь, что мне больше никогда не придется этого делать!

Я использую либо локальное репозиторий darcs, либо просто постепенно объединяю изменения.С помощью слияния (opendiff открывает FileMerge, программу слияния, которая поставляется вместе с Xcode;замените с помощью вашего любимого инструмента слияния):

cp file file.new
svn revert file
opendiff file.new file -merge file

объедините соответствующие изменения, сохраните слияние, закройте программу слияния

svn ci -m 'first hunk' file
mv file.new file
svn ci -m 'second hunk' file

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

Кроме того, если вы знаете git, вы можете использовать git-svn поддерживать локальное репозиторий git и синхронизировать ваши коммиты с главным сервером svn;по моему ограниченному опыту, это отлично работает.

Попробуй VisualSVN для Visual Studio.Тот Самый последняя версия 6.1 вводится функция быстрой фиксации.Вы можете частично зафиксировать выбранные изменения в файле, используя новый Зафиксируйте этот блок и Выбор фиксации команды контекстного меню в редакторе Visual Studio.

enter image description here

  1. Откройте все файлы, которые вы хотите разделить, в выбранном редакторе
  2. Используя другой набор инструментов (в Win используйте предложение Спайка (старая версия)), верните второй набор
  3. Зафиксировать
  4. вернитесь к выбранному вами редактору и сохраните все файлы

Это немного рискованнее, чем полное предложение Спайка, но сделать это может быть проще.Также убедитесь, что вы сначала попробуете это на чем-то другом, поскольку некоторые редакторы откажутся сохранять файл, который был изменен из-под них, если вы не перезагрузите этот файл (потеряв все свои изменения).

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

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

  1. Скопируйте все соответствующие измененные файлы в резервные копии.
  2. Создайте исправление рабочего состояния, используя svn diff.
  3. Верните файлы обратно с помощью svn revert.
  4. Повторно примените части патча, которые вы хотите зафиксировать, либо используя patch инструментом, или путем ручного редактирования, или что-то еще.
  5. Бежать diff после этого сравните вашу рабочую копию с резервной, чтобы убедиться, что вы правильно применили исправления.
  6. Сборка и тестирование.
  7. Совершить.
  8. Скопируйте резервные копии обратно в свой репозиторий при извлечении.
  9. Повторите в 2 раза.(не на уровне 1.!) до готовности.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top