Subversion: игнорировать изменения файла локально только на одном клиенте

Можно ли игнорировать изменения файла в Subversion локально только на одном клиенте, не распространяя игнорирование на весь репозиторий?

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

Однако я не хочу устанавливать svn: ignore, потому что я считаю, что это приведет к сохранению игнорирования в репозитории, хотя важно сохранить там файл make.


person fuad    schedule 21.05.2009    source источник
comment
По сути, я думаю, вы пытаетесь решить не ту проблему. Почему бы не изменить ваши файлы Makefile для правильной работы в обеих средах?   -  person Nicholas Knight    schedule 22.05.2009
comment
Николас, даже если fuad не использует лучший подход к своей проблеме, я почти уверен, что есть законные причины для создания игнорирования, применимого только к вашей рабочей копии.   -  person allyourcode    schedule 02.07.2009
comment
Я согласен с allyourcode. Разработчик (пользователь svn) может не иметь права или желания изменять фундаментальные принципы. Я тоже хотел бы решение этой проблемы. У нас есть файлы свойств среды, зарегистрированные в нашем репо. Когда я меняю их локально, мне приходится вручную снимать с них отметку при проверке. Когда я забуду снять галочку с них, это только вопрос времени. Я согласен с тем, что эти файлы НЕ должны быть в нашем репо, но у меня нет полномочий принимать это решение, поэтому мне действительно нужен обходной путь.   -  person andersonbd1    schedule 14.08.2009


Ответы (4)


Как и во многих других аспектах svn, с черепахой все очень просто. Фактически, я считаю, что tortoise действительно добавляет функции, систематически используя существующие функции svn. Тогда я понимаю, что это только окна, но, возможно, некоторые люди похожи на меня и все еще используют окна. Во всплывающем окне «Проверить наличие изменений» просто щелкните файлы правой кнопкой мыши и выберите «Переместить в список изменений» -> «Игнорировать при фиксации». Теперь, когда вы регистрируетесь с помощью черепахи, она сегментирует ваши изменения по различным спискам изменений, чтобы вы, по крайней мере, могли визуально сказать, что вы хотите зафиксировать, а что не хотите фиксировать.

person andersonbd1    schedule 17.08.2009
comment
Хороший ! но файл (и, следовательно, папка) по-прежнему отображается как измененный. - person Loda; 29.06.2010
comment
Да, у меня такая же проблема. Все это предотвращает случайное обновление / фиксацию. - person Sled; 15.02.2012
comment
Как уже говорилось ранее, это все идеально, за исключением того, что он показывает, что файл был изменен. Однако это лучше, чем снимать флажки со всех этих файлов каждый раз, когда я совершаю коммит. - person Andrew Larsson; 07.05.2012
comment
для версии этой функции для командной строки см. ответ AH на заголовок stackoverflow.com/questions/8644379/ - person PMorganCA; 24.07.2015
comment
У меня это сработало, но только для файлов. Есть решение для папок? - person machinery; 03.02.2016

если вы используете Subversion 1.5.x или выше, вы можете использовать списки изменений:

svn cl COMMIT /path/to/project/*

svn cl NOT_COMMIT /path/to/project/Makefile

Примечание: второй командой Makefile будет удален из первого списка изменений. Вы можете игнорировать предупреждение.

Не фиксируйте второй список изменений.

делать коммиты через:

svn ci --cl COMMIT -m"<LOG MESSAGE HERE>" 

Важно: если вы сделаете фиксацию без опции --cl, ВСЕ ваши изменения будут зафиксированы.

person Peter Parker    schedule 22.05.2009
comment
svn cl может быть не лучшим вариантом, потому что он не поддерживает добавление каталогов в списки изменений. Это проблема, если есть каталоги, которые вы добавили в svn и которые хотите добавить в коммит. - person allyourcode; 03.07.2009
comment
списки изменений кажутся полезными, но я не думаю, что они действительно применимы здесь. Это другой вариант использования. Они могли бы работать, если бы команды по умолчанию игнорировали файлы, которые были в списке изменений - это было бы действительно полезно. Но если я не ошибаюсь, это не так. Если вы не укажете список изменений в команде, она будет вести себя так, как будто списков изменений не существует, верно? Так что даже если бы списки изменений поддерживали каталоги, это не было бы идеальным решением. Вам придется вручную переместить файлы, которые вы действительно хотите зарегистрировать, в список изменений. Я бы предпочел только вручную отмечать файлы, которые НЕ хочу проверять. - person andersonbd1; 14.08.2009

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

person Gleb    schedule 21.05.2009
comment
Как это помогает? Когда вы захотите выполнить слияние обратно в транк, у вас возникнет другая (хуже?) Проблема: НЕ объединение файлов, которые вы хотели игнорировать. - person allyourcode; 03.07.2009
comment
Вы можете зафиксировать свое личное изменение в своей личной ветке с сообщением «не объединять» и следите за этим сообщением при объединении, оно все равно скоро будет похоронено под более поздними изменениями; вы даже можете пометить эту ревизию как уже объединенную, что должно предотвратить случайное объединение. Кстати, я не знал о списках изменений, и они определенно лучше, чем ветка для этой цели. - person Gleb; 09.07.2009

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

http://svnbook.red-bean.com/en/1.0/re10.html

edit: Однако я считаю, что это нужно делать для каждого каталога, поэтому вам придется несколько реорганизовать свои файлы.

В настоящий момент я не могу это проверить, но поможет ли вам здесь редкая проверка?

http://svnbook.red-bean.com/nightly/en/svn.advanced.sparsedirs.html

person John Carter    schedule 21.05.2009
comment
Не работает, все еще является частью репозитория и отображается как измененный - person fuad; 22.05.2009
comment
Я не уверен, что можно экспортировать файлы в каталог с версией. - person John Carter; 22.05.2009
comment
Я не уверен, почему за это так сильно проголосовали. Это работает в ряде ситуаций, когда другие решения не работают. В частности, это работает для меня, потому что у меня было два дополнительных требования. 1) Нет TortoiseSVN (я использую OS X) 2) Я не хочу изменять свои привычки для учета списков изменений. Изменить: протестировано и работает внутри версионного каталога, кстати. Вы можете удалить данный каталог (изнутри каталога) с помощью svn update. --set-depth = empty, а затем вам нужно снова проверить это с помощью svn export --force svnrepopath / directory. - person radicaledward101; 03.12.2013