Решение, которое не игнорирует изменения в свойствах каталога
Я пытался использовать решение, основанное на changelist
, но у меня есть пара проблем с ним. Во-первых, в моем хранилище тысячи файлов, поэтому список изменений, который нужно зафиксировать, огромен, и мой вывод svn status
стал слишком длинным и его нужно было проанализировать, чтобы быть полезным. Наиболее важным является то, что я хотел зафиксировать изменения, которые произошли от слияния, что означает, что они включают изменения свойств. При фиксации списка изменений свойства svn, прикрепленные к каталогу, не фиксируются, поэтому мне пришлось сделать дополнительную фиксацию:
svn ci --cl work -m "this commits files from the work changelist only"
svn up
svn ci --depth empty DIR . -m "record merge properties"
Возможно, вам придется сделать это для нескольких каталогов (здесь я записываю свойства DIR
и текущего каталога .
), в основном те, которые имеют M
во втором столбце при выдаче команды svn status
.
Решение
Я использовал патчи и svn patch
. В псевдокоде:
svn diff $IGNORE_FILES > MYPATCH # get the mods to ignore
svn patch --reverse-diff MYPATCH # remove the mods
svn ci -m "message" # check-in files and directory properties
svn patch MYPATCH # re-apply the mods
Как и другие постеры, в итоге я использую скрипт для ведения списка игнорируемых файлов:
#! /usr/bin/env bash
finish() {
svn patch MYPATCH # re-apply the mods
}
trap finish EXIT
IGNORE_FILES="\
sources/platform/ecmwf-cca-intel-mpi.xml \
runtime/classic/platform/ecmwf-cca.job.tmpl \
runtime/classic/platform/ecmwf-cca-intel.xml"
svn diff $IGNORE_FILES > MYPATCH # get the mods to ignore
svn patch --reverse-diff MYPATCH # remove the mods
svn "$@"
Обычно я использовал его с ci
и revert -R .
.