Есть ли способ зафиксировать файл "частично" в TortoiseSVN?
Я хочу сделать только часть файла с помощью TortoiseSVN, есть ли способ сделать это?
Я приведу пример, чтобы прояснить, почему я хочу это сделать.
У меня есть файл с некоторыми определениями, которые заменяются в процессе сборки, примерно так:
#define SOME_PATH "[SOME_PATH]"
Этот тэг [SOME_PATH] заменяется в процессе сборки, но когда я кодирую, я должен изменить его так, что фактический путь на моей машине.
Поэтому каждый раз, когда я беру на себя обязательство, мне нужно сделать резервную копию некоторых строк, вернуть их, зафиксировать, а затем восстановить резервную копию, и это немного раздражает.
Есть ли способ сказать TortoiseSVN "игнорировать" некоторые изменения, например, строки X, Y и Z?
Ответы
Ответ 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.