В данном случае я внес два независимых изменения в один файл: например. добавил новый метод и изменил другой метод.
Я часто хочу фиксировать оба изменения не как одну фиксацию, а как две независимые фиксации.
На репозиторий я хотел бы использовать в интерактивном режиме из GIT-дополнения (1) , чтобы разделить кусок на более мелкие:
git add --patch
Какой самый простой способ сделать это с помощью Subversion? (Возможно, даже с использованием подключаемого модуля Eclipse)
Обновление:
в The Thing About Git Райан называет это: «Запутанная проблема рабочей копии».
Ответы:
С помощью git-svn вы можете создать локальный репозиторий GIT для удаленного репозитория SVN, работать с ним, используя полный набор функций GIT (включая частичные коммиты), а затем отправить все это обратно в репозиторий SVN.
git-svn (1)
источник
Tortoise SVN 1.8 теперь поддерживает это с помощью функции «Восстановить после фиксации». Это позволяет вам вносить изменения в файл, причем все изменения отменяются после фиксации.
Согласно документации:
источник
Я сделал это с помощью TortoiseSVN .
Встроенная утилита слияния позволяет вам показать разницу между версией репозитория и вашей рабочей копией.
Используйте функцию создания резервной копии утилиты diff
Теперь вы должны зафиксировать все свои изменения, используя две отдельные фиксации.
источник
Попробуйте использовать,
svn diff > out.patch
затем скопируйтеout.patch
файл вout.patch.add
иout.patch.modify
Только если у вас есть рабочий файл патча, верните исходный файл, используя
svn revert out.c
.Отредактируйте файлы патчей вручную, чтобы они содержали только блоки для добавления или изменения. Примените их к исходному файлу с помощью
patch
команды, проверьте, сработало ли добавление, затемsvn commit
добавление.Повторение промывки и полоскания для
out.patch.modify
пластыря.Если изменения внесены отдельно в файл, как указано в вашем первоначальном вопросе - добавлен новый метод, изменен существующий метод - это сработает.
Это очень утомительное решение, хотя я не уверен, что у вас должна быть причина для разделения ваших коммитов.
Вы также могли проверить несколько рабочих копий одного и того же источника, чтобы применить свою работу к:
Обязательно проверьте
svn up
и убедитесь, что все в порядке.источник
Это возможно с помощью TortoiseSvn (Windows) начиная с версии 1.8.
В Linux я бы попробовал http://webstaff.itn.liu.se/~karlu20/div/blog/2013-05-31_SVNPartialCommit.php . Хотя сам еще не пробовал.
источник
Раньше я так делал:
Это упрощенный подход, предполагающий, что один набор изменений достаточно легко отменить. В более сложных ситуациях я бы отказался и зафиксировал оба изменения, не беспокоясь об этом.
Теперь, когда я использую git, надеюсь, мне больше никогда не придется это делать!
источник
Я использую либо локальное репо darcs, либо просто постепенно сливаю изменения. С помощью слияния (opendiff открывает FileMerge, программу слияния, которая поставляется с Xcode; замените вашим любимым инструментом слияния):
объединить связанные изменения, сохранить объединение, выйти из программы объединения
если в файле более одного несвязанного фрагмента, промойте и повторите (но зачем вам так долго ждать перед фиксацией ?!)
Кроме того, если вы знаете git, вы можете использовать git-svn для поддержки локального репозитория git и синхронизации ваших коммитов с главным сервером svn; отлично работает в моем ограниченном опыте.
источник
Попробуйте VisualSVN для Visual Studio . В последней версии 6.1 представлена функция QuickCommit. Вы можете частично зафиксировать выбранные изменения в файле с помощью новых команд контекстного меню « Зафиксировать этот блок» и « Зафиксировать выделение» в редакторе Visual Studio.
источник
Это немного рискованнее, чем полное предложение Спайка, но может быть проще. Также убедитесь, что вы сначала попробовали его на чем-то другом, поскольку некоторые редакторы откажутся сохранять файл, который изменился из-под них, если вы не перезагрузите этот файл (потеряв все ваши изменения).
источник
Я думаю, что более простым вариантом, чем создание файлов различий, возврат и т. Д., Было бы извлечение двух копий репозитория и использование инструмента визуального сравнения, такого как DeltaWalker, для копирования фрагментов из одного в другой.
Первая копия будет той, над которой вы действительно работаете, а вторая - только для этой цели. После того, как вы внесли массу изменений в первый, вы можете скопировать один раздел во второй, зафиксировать его, скопировать другой раздел, зафиксировать его и т. Д.
источник
svn diff
.svn revert
.patch
инструмента, либо путем ручного редактирования, или как-то еще.diff
После этого запустите, чтобы сравнить вашу рабочую копию с резервной копией, чтобы убедиться, что вы правильно применили патч-части.источник