Подтвердить что ты не робот

Есть ли способ зафиксировать файл "частично" в TortoiseSVN?

Я хочу сделать только часть файла с помощью TortoiseSVN, есть ли способ сделать это?

Я приведу пример, чтобы прояснить, почему я хочу это сделать.

У меня есть файл с некоторыми определениями, которые заменяются в процессе сборки, примерно так:

#define SOME_PATH "[SOME_PATH]"

Этот тэг [SOME_PATH] заменяется в процессе сборки, но когда я кодирую, я должен изменить его так, что фактический путь на моей машине.

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

Есть ли способ сказать TortoiseSVN "игнорировать" некоторые изменения, например, строки X, Y и Z?

4b9b3361

Ответ 1

Верхний проголосовавший ответ устарел.

С сайта tortoiseSVN: http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-commit.html

Фиксировать только части файлов

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

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

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

Ответ 2

Нет. Subversion работает на уровне файла.

Ответ 3

Нет.

Лучший способ сделать это - проверить в каком-либо файле, например build_paths.h.default, а затем на каждой платформе сборки скопировать его в build_paths.h, изменить его в соответствии, а затем передать SVN в IGNORE build_paths.h, И, наконец, #include "buiild_paths.h" в вашей программе.

Ответ 4

Краткая версия: НЕТ. Subversion - это система "все или ничего" (как и все системы управления версиями, о которых я знаю)

Более длинная версия: Нет, однако, если вы используете что-то вроде NANT для создания, вы можете использовать xmlpoke или подобное для перезаписи частей файла при сборке. Работает для нас:) Мы переписываем около 6 файлов web.config и других файлов конфигурации приложения при сборке (ну, при создании пакета развертывания)....

Ответ 5

Решение вашей проблемы заключается не в том, чтобы получить подрывную деятельность, чтобы сделать это для вас, а для настройки вашего приложения, чтобы детали, специфичные для среды (такие как значение [SOME_PATH]) были сохранены "извне" в код, который отмечен в.

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

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

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

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

Ответ 6

В общем да! Функциональность была добавлена ​​в последней версии torroise svn (1.8). См. примечания к выпуску. К сожалению, это ручная процедура, которая может быть не настолько подходящей для вашего конкретный вариант использования - более полезен для "Я нахожусь в середине новой функции и заметил ошибку и хочу зафиксировать ситуацию с исправлением ошибок".

В вашей ситуации я использую файл шаблона, который используется в процессе сборки для создания фактического используемого файла (этот файл создается только из файла шаблона, ничего больше не присутствует). У меня есть файл tempalte в svn, но acutal файл игнорируется. Это означает, что мне нужно только создать один раз после новой проверки, а затем моя рабочая копия в порядке - но значения для тегов не выполняются. Если мне нужно добавить новые теги, я делаю это в файле tempalte и перестраиваю свою рабочую копию.

Ответ 7

Вы также можете определить:

  • крюк предварительной фиксации, который позаботится об откате для вас,
  • и перехват post-commit для восстановления вашего файла.

Ой... на самом деле это не очень хорошая идея, согласно Руководство SVN.

  • Все триггеры выполняются на стороне сервера (а не на стороне клиента, как это имеет место для ClearCase)
  • Subversion хранит кеши на стороне клиента определенных битов данных репозитория, и если вы меняете транзакцию фиксации таким образом, эти кеши становятся незаметно устаревшими. Эта несогласованность может привести к неожиданному и неожиданному поведению. Вместо того, чтобы изменять транзакцию, вы должны просто проверить транзакцию в привязке до фиксации и отклонить фиксацию, если она не соответствует требуемым требованиям.

A возможный путь - это изменить ваш файл в post-commit script, а затем зафиксировать этот файл как независимое изменение, прежде чем восстанавливать его в другой пост-фиксации script...

Ответ 8

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