С помощью TortoiseSVN я могу переместить файл в список изменений ignore-on-commit, чтобы при фиксации всего дерева изменения в этом файле не фиксировались.
Есть ли способ сделать что-то подобное с помощью инструмента командной строки svn?
РЕДАКТИРОВАТЬ: Спасибо за предложения, чтобы использовать svn:ignore
, но это не совсем то, что я искал.
svn:ignore
влияет на такие вещи, как svn add
& svn import
. Это дает ему список шаблонов имен файлов, которые следует игнорировать.
У меня есть файл, который уже находится под контролем исходного кода, но я хочу внести временные изменения в этот файл, которые я не хочу принимать позже, когда я фиксирую все дерево исходных текстов. Я делаю множество других изменений, и я могу прикрепить заметку на моем мониторе, в которой говорится, что нужно вернуть этот файл перед тем, как я фиксирую дерево, но было бы неплохо, если бы svn мог автоматически пропустить этот файл.
источник
Ответы:
Subversion не имеет встроенной функции «не фиксировать» / «игнорировать при фиксации», по состоянию на февраль 2016 г. / версия 1.9. Этот ответ - неидеальный обход командной строки
Как указывает OP, TortoiseSVN имеет встроенный список изменений «ignore-on-commit», который автоматически исключается из коммитов. У клиента командной строки этого нет, поэтому вам нужно использовать несколько списков изменений, чтобы выполнить то же поведение (с оговорками) :
Поскольку у TortoiseSVN есть прецедент, я использую «ignore-on-commit» в моих примерах для файлов, которые я не хочу фиксировать. Я буду использовать «работу» для файлов, которые я делаю, но вы можете выбрать любое имя, которое захотите.
Сначала добавьте все файлы в список изменений с именем «работа». Это должно быть запущено из корня вашей рабочей копии:
Это добавит все файлы в рабочей копии рекурсивно в список изменений с именем "work". В этом есть недостаток - поскольку новые файлы добавляются в рабочую копию, вам нужно будет специально добавлять новые файлы, иначе они не будут включены. Во-вторых, если вам придется запустить это снова, вам нужно будет снова добавить все ваши файлы «ignore-on-commit». Не идеально - вы можете начать поддерживать свой собственный список игнорирования в файле, как это сделали другие.
Затем для файлов, которые вы хотите исключить:
Поскольку файлы могут быть только в одном списке изменений, запуск этого дополнения после предыдущего «рабочего» добавления приведет к удалению файла, который вы хотите игнорировать, из списка «рабочих» изменений и внесению его в список изменений «ignore-on-commit».
Когда вы будете готовы зафиксировать ваши измененные файлы, которые вы хотите зафиксировать, вы просто добавите «--cl work» к вашему коммиту:
Вот как выглядит простой пример на моей машине:
Альтернативой было бы просто добавить каждый файл, который вы хотите зафиксировать, в «рабочий» список изменений, и даже не поддерживать список игнорирования, но это тоже большая работа. Действительно, единственное простое, идеальное решение - если / когда это будет реализовано в самом SVN. Существует давняя проблема об этом в системе отслеживания проблем Subversion, SVN-2858 , на случай, если это изменится в будущем.
источник
$svn st --- Changelist 'ignore-on-commit': M database.php M config.php
и тем не менее, они были отправлены в репозиторий при коммите. Есть идеи, что я сделал не так?Я последовательно нашел себя в этой ситуации тоже: и не группы изменений работать для меня - я хочу , чтобы сделать короткий список файлов , которые я не хочу совершать, а не поддерживать массовый список файлов , которые я сделать покупку совершать!
Я работаю с командной строкой Linux: поэтому я решил создать скрипт / usr / bin / svnn (да, с двумя 'n'!) Следующим образом:
Очевидно, это приспособлено к моей ситуации, но просто измените DIR и IGNORE_FILES в соответствии с вашими настройками разработчика. Помните, чтобы изменить сценарий на исполняемый с:
..то вы просто используете «svnn» вместо «svn» для запуска subversion, не опасаясь проверять локальные изменения файлов в списке IGNORE_FILES. Надеюсь, это поможет!
источник
svnn ignore configs/*
- с подстановочными знаками, а также с наворотами. Я думаю, что сам напишу что-то подобное, а потом вернусь сюда!svnn
, подумайте над тем, чтобы вызвать егоsvn
и поместить этот скрипт во что-то, что может быть в начале вашей PATH, например${HOME}/bin
. Из самого скрипта вы бы потом позвонили/usr/bin/svn
.Я не верю, что есть способ игнорировать файл в хранилище. Мы часто сталкиваемся с этим с помощью web.config и других файлов конфигурации.
Хотя это и не идеально, решение, которое я чаще всего вижу и использую, состоит в том, чтобы иметь файл .default и задачу Nant для создания локальных копий.
Например, в репо есть файл с именем по
web.config.default
умолчанию. Затем создайте задачу nant, которая переименует всеweb.config.default
файлы,web.config
которые затем можно настроить на локальные значения. Эта задача должна вызываться при получении новой рабочей копии или запуске сборки.Вам также нужно будет игнорировать
web.config
созданный файл, чтобы он не фиксировался в хранилище.источник
Проверьте списки изменений , которые могут предоставить вам возможность отфильтровать файлы, которые вы изменили, но не хотите фиксировать. SVN не будет автоматически пропускать файл, пока вы не скажете ему - и способ, которым вы говорите, что этот файл чем-то отличается от других файлов, - это поместить его в список изменений.
Это требует больше работы для вас, и вы можете применить список изменений только к вашей рабочей копии (очевидно, представьте, какой хаос может возникнуть, если вы примените свойство «никогда не обновлять» к ревизии!).
источник
Я пришел к этой теме в поисках способа сделать «атомарную» фиксацию только из нескольких файлов, и вместо игнорирования некоторых файлов при фиксации я пошел другим путем и зафиксировал только те файлы, которые хотел:
Может быть, это кому-то поможет.
источник
svn ci
это просто псевдонимsvn commit
. Команда commit позволяет сделать конкретный коммит из указанных файловРебята я только что нашел решение. Учитывая, что TortoiseSVN работает так, как мы хотим, я попытался установить его под Linux - что означает запуск на Wine. Удивительно, но это работает! Все, что вам нужно сделать, это:
(Причина, по которой нужно исключать файлы с помощью CLI, заключается в том, что пункт меню для этого не был найден, не знаю почему. В любом случае, это прекрасно работает!)
источник
Конфликтующие файлы не могут быть зафиксированы. Вы можете воспользоваться этим, чтобы ваши личные изменения не попадали в хранилище. Это лучше всего работает с небольшим количеством файлов.
Чтобы получить конфликт
a-file
, ваша рабочая копия (WC) не имеет обновленийa-file
из хранилища, и чтоa-file
в вашем WC есть изменения, которые находятся в том же месте, что и изменения в хранилище (изменения, которые вы не обновляли) до сих пор). Если вы не хотите ждать вышеуказанных условий, вы можете создать конфликт,a-file
например, такой:В рабочей копии 1 (WC1) добавьте строку текста вверху
a-file
, например, «создать конфликт здесь» . Используйте необходимый синтаксис, чтобы не нарушать хранилище. Зафиксироватьa-file
из WC1. В WC2 добавьте другую строку текста вверхуa-file
, например: «Я хочу конфликт» . Обновление с WC2, и теперь a-файл должен конфликтовать.источник
Вместо этого я бы написал вспомогательный bash-скрипт, который запускает
svn commit
все нужные вам файлы и ни один из тех, которые вам не нужны. Таким образом, у вас гораздо больше контроля.Например, с одной линией, вы можете совершить все файлы с расширением
.h
и.cpp
к которому были внесены изменения (и который не приведет к конфликту):Изменить / добавить расширения к
[h|cpp]
детали. Добавьте сообщение журнала между кавычками,-m ""
если это необходимо.источник
Некоторые из предложенных идей могут быть реализованы следующим образом:
На Windows в PowerShell
добавить все в default.ps1
добавить, чтобы игнорировать list.ps1
Теперь вы можете использовать псевдоним,
svn ci --changelist default
чтобы вам не приходилось указывать его каждый раз. Дополнительным преимуществом является то, что вы можете хранить список игнорируемых при фиксации (если хотите) в хранилище.Я делаю это для некоторых файлов, которые постоянно восстанавливаются, но редко меняются вручную. Например, я добавляю номер ревизии в мои файлы конфигурации на определенных заполнителях, чтобы файлы менялись при каждом коммите, но ручное изменение редко.
источник
Я устал ждать, пока это встроится в SVN. Я использовал tortoiseSVN с ignore-on-commit, но при этом появляется диалоговое окно пользователя, которое вы не можете отключить из командной строки, и когда я запускаю свой скрипт сборки и собираюсь выпить чашку чая, я ненавижу его, когда Я возвращаюсь и обнаруживаю, что он ждет ввода пользователя 10% пути.
Итак, вот скрипт Windows PowerShell, который фиксирует только файлы, которых нет в списке изменений:
источник
Обновление скрипта user88044.
Идея состоит в том, чтобы поместить файлы в список изменений "не делать" и запустить скрипт зла.
Сценарий извлекает файлы do-not-commit из команды: svn status --changelist 'do-not-commit'
Скрипт находится в / usr / bin / svnn (sudo chmod + x / usr / bin / svnn)
svnn status, svnn commit и т.д ...
источник
Вы можете настроить список изменений "ignore-on-commit" напрямую с TortoiseSVN. Нет необходимости настраивать любой другой список изменений, включая все остальные файлы
1) Нажмите «SVN Commit ...» (мы не будем фиксировать, это просто способ найти графическое меню для списка изменений). 2) В списке Щелкните правой кнопкой мыши файл, который вы хотите исключить. 3) Меню: перейти к списку изменений> игнорировать при фиксации
В следующий раз, когда вы выполните SVN Commit ... Файлы будут отображаться в конце списка, в категории ignore-on-commit.
Протестировано с: TortoiseSVN 1.8.7, сборка 25475 - 64-битная, 2014/05/05 20:52:12, Subversion 1.8.9, -релиз
источник
Это поздно для игры, но я нашел самую удивительную команду командной строки для этой проблемы. Закончено с использованием bash. Наслаждаться.
Итак, вот объяснение команды. Некоторые вещи необходимо будет изменить в зависимости от вашего варианта использования.
Я получаю список всех файлов. Все они начнутся с этих символов статуса (?,!, A и т. Д.). У каждого свои линии
Я использую grep для фильтрации списка. Он может использоваться как обычно (для включения), так и с флагом -v (для исключения). В этом случае он используется для исключения, а фраза «исключение» - это то, что будет исключено.
Теперь я удаляю символ статуса и пробел в начале каждой строки, а затем цитирую каждую строку, используя sed. В некоторых моих именах файлов есть пробелы, отсюда и цитата.
Используя tr, я заменяю все символы новой строки пробелами. Теперь весь мой список файлов для фиксации находится в одной строке.
Наконец, я использую xargs для выполнения моей команды commit с сообщением. Он выполняет фиксацию и удаляет мой цитируемый список файлов в качестве последнего аргумента.
В результате все в конечном итоге работает так, как я хочу. Я все еще ненавижу svn за то, что заставлял меня прыгать через эти проклятые обручи, но я могу с этим смириться. Я думаю.
источник
Поскольку я столкнулся с той же самой проблемой, и мой поиск в Google продолжал давать мне ничего, я думаю, что нашел обходной путь. Вот то, что я сделал, похоже, у меня работает, но поскольку я застрял со старой версией SVN (<1.5, поскольку у нее нет опции --keep-local), и я не эксперт в этом Я не могу быть уверен, что это универсальное решение. Если это работает и для вас, пожалуйста, дайте мне знать!
Я имел дело с установкой Prestashop, которую я получил из SVN, так как другие люди уже начали работать над ней. Поскольку настройки БД были выполнены для другого сервера, я изменил их в каком-то файле в папке / config. Поскольку эта папка уже была версионной, установка ее в svn: ignore не помешает моим локальным изменениям на ней быть зафиксированными. Вот что я сделал:
Теперь я могу запустить svn add --force. в корне репо без добавления моего конфига, даже если он не соответствует версии репо (я думаю, мне пришлось бы пройти через все это снова, если бы я изменил его еще раз, не тестировал). Я также могу обновить svn, не перезаписывая файлы и не получая ошибок.
источник
Решение, которое не игнорирует изменения в свойствах каталога
Я пытался использовать решение на основе
changelist
, но у меня есть несколько проблем с ним. Во-первых, в моем хранилище тысячи файлов, поэтому список изменений, который нужно зафиксировать, огромен, и мойsvn status
вывод стал слишком длинным и его нужно было проанализировать, чтобы быть полезным. Наиболее важным является то, что я хотел зафиксировать изменения, которые произошли от слияния, что означает, что они включают изменения свойств. При фиксации списка изменений свойства svn, прикрепленные к каталогу, не фиксируются, поэтому мне пришлось сделать дополнительную фиксацию:Возможно, вам придется сделать это для нескольких каталогов (здесь я записываю свойства
DIR
и текущего каталога.
), в основном те, которыеM
во втором столбце содержатsvn status
команду a при вводе команды.Решение
Я использовал патчи и
svn patch
. В псевдокоде:Как и другие постеры, я в конечном итоге использую скрипт для ведения списка игнорируемых файлов:
Я обычно использовал это с
ci
иrevert -R .
.источник
svn:ignore
это твой ответ.Пример:
источник
*.xml
является образцом игнорируемых файлов; Вы также можете использовать имена каталогов здесь.источник