SVN на коммит добавляет дополнительные файлы - PullRequest
1 голос
/ 12 января 2012

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

Пример:

svn st

Это показывает file1 как измененное

svn commit

Это загружает изменения в file1, а также file2, file3, file4

Это всегда происходит с теми же файлами

file2, file3, file4

Как я могу остановить это?

Версия SVN:

Клиент командной строки Subversion, версия 1.6.6

Ответы [ 2 ]

1 голос
/ 12 января 2012

Какую версию клиента Subversion вы используете?

В клиентах до Subversion 1.7 Subversion определяет изменения файла, просматривая содержимое файла и сохраненную базу в каталоге .svn.Subversion сравнивает как свойства, так и содержимое самого файла, чтобы определить любые изменения.Например:

$ svn up
U file1
U file2
U file3

В этом примере вы увидите как минимум следующие шесть файлов:

.svn/text-base/file1.svn-base
.svn/text-base/file2.svn-base
.svn/text-base/file3.svn-base
.svn/prop-base/file1
.svn/prop-base/file2
.svn/prop-base/file3

Он не смотрит на отметку времени, чтобы определить, имеет ли файлизменен (как это сделал бы Makefile).

Оба svn up и svn commit используют один и тот же алгоритм, чтобы определить, следует ли записывать файл как измененный.

Есть также файлназывается .svn/entries, который содержит список записей, которые есть в каталоге.Это позволяет Subversion отслеживать добавления и удаления, но не используется для обнаружения изменений.

Я вижу проблемы во время слияния, когда неизмененный файл фиксируется.Тем не менее, это всегда проявляется при выполнении svn status, и содержимое файла не изменилось, но свойство svn:merge info было.

Ваша проблема, похоже, совсем другая.Во-первых, вы не видите изменений при выполнении svn status, но они фиксируются.Что делать, если вы делаете svn -v log в каталоге?Файлы отображаются как измененные?Что делать, если вы делаете svn status -v?Это покажет все файлы, включая те, которые были проигнорированы, и те, которые не были изменены.

Клиент сообщает серверу, какие файлы были изменены, а не сервер, определяющий, какие файлы зафиксировать.Поэтому проблема связана с вашим клиентом Subversion:

Какой у вас клиент Subversion и какая у вас ОС?Я знаю, что Cgywin может быть проблематичным, особенно если вы делитесь своим рабочим каталогом с клиентом Windows Subversion.Могут возникнуть некоторые проблемы с разделением рабочего каталога между двумя разными типами клиентов (такими как клиент с графическим интерфейсом и клиент командной строки).Например, клиент AnkSvn VisualStudio создает каталоги _svn.TortoiseSVN может использовать их (если вы настроите его правильно), но не стандартную командную строку Subversion.

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

Извините, я не смог предоставитьдальнейшая помощь.Может быть, я дал вам кое-что для продолжения?Дайте мне знать ваш клиент Subversion и ОС, и это может помочь.Также дайте мне знать, если вы используете несколько клиентов Subversion в одном каталоге.Это тоже может быть подсказкой.

Я пытался зайти в $HOME/.subversion/conf, чтобы посмотреть, есть ли какие-то настройки, которые могли бы изменить ситуацию, но я не нашел ничего, что могло бы вызвать такое поведение.

0 голосов
/ 12 января 2012

Ну, если вы хотите всегда игнорировать файлы, которые вы можете использовать svn: ignore , но если это файлы, которые вы иногда изменяете, и вам нужно, чтобы они были под контролем исходного кода, я бы сделал svn diff file1 и идти оттуда. К какому типу они относятся и каковы результаты сравнения?

...