47

Вопрос по svn, commit – Переименовал файл, теперь SVN не позволяет мне фиксировать?

Я разрабатываю сайт ColdFusion с использованием Aptana. Мы используем SVN для контроля версий.

Я переименовал несколько файлов и сейчас пытаюсь зафиксировать один из них, но получаю следующую ошибку:

'SVN Commit' has encountered a problem.
org.apache.subversion.javahl.ClientException: Illegal target for the requested operation
svn: Commit failed (details follow):
svn: Cannot commit 'R:\myPath\My-New-File-Name.cfm' because it was moved from 'R:\myPath\My-Old-File-Name.cfm' which is not part of the commit; both sides of the move must be committed together

Кажется, это указывает на то, что мне нужно зафиксировать как предыдущий файл (который был переименован), так и новый переименованный файл вместе. Как я могу зафиксировать файл, который больше не существует ...?

Windows нечувствительна к регистру, если вы переименуете свой файл, изменяя только регистр, вы получите эту ошибку, поэтому переименуйте ваш файл в другое имя (например, file2), подтвердите, затем переименуйте в действительно нужное имя и подтвердите снова.

от Loenix

Аналогичная проблема, если вы переименуете каталог:stackoverflow.com/questions/29563635/...

от user1717259
10 ответов
83

Зафиксируйте каталог, а не файл.

Представьте каталог как текстовый файл, содержащий список файлов, которые он содержит, и вы увидите, что для успешной фиксации вам нужно обновить сам каталог, чтобы он мог удалить старую запись и добавить новую запись. Это будет отображаться в SVN как удаление старого и добавление нового файла (т.е. 2 изменения в каталоге, а не 1 изменение в файле)

Если вы хотите зафиксировать только 1 файл, вам нужно будет временно добавить другие измененные файлы в список игнорирования.

Сделал мой день. Я боролся с этим часами ..

от Dev.K.

Этот ответ не правильный. Если вы работаете с самим svn (то есть с командной строкой svn), ответ rkiko ниже верен. То есть: вы указываете старое имя файла в вашем коммите. Это позволяет вам точно фиксировать только те переименования, которые вы хотите, когда вы не хотите фиксировать все изменения в каталоге. Кроме того, вы НЕ вносите изменения в каталог, как будто это список текстовых файлов!

от Len

Я думал об этом, но я хотел зафиксировать только один файл из многих в каталоге. Но теперь я понял, что если я выберу фиксацию для всей папки, я могу снять все остальные файлы и просто оставить исходный файл и переименованный файл ... Спасибо!

от froadie

Связанная проблема была решена путем 1) фиксации только одной папки 2) возврата файла со статусом> добавлено <3) (обновление) 4) переименования файла в черепахе 5) фиксации успешной.

от JaBe

Прекрасно, это было проще, чем я думал.

от Ian Campbell
12

Различные клиенты, кажется, справляются с этим лучше, чем другие.

AnkhSVN для Visual Studio обнаруживает эту ошибку и не может ее устранить.

TortiseSVN (расширение оболочки) работает, хотя - он знает, чтобы удалить старый файл и добавить новый.

Поэтому, если вы работаете в Windows, простой способ обойти это - использовать TortiseSVN из Explorer для фиксации каталога (который удаляет старое имя файла и добавляет новое).

стоило того, прежде чем вы столкнулись с этой проблемой :)

от Nearoo

Я все еще застреваю на этом! GRR О, почему это так ужасно в Visual Studio? на самом деле это будет стоить того, чтобы перейти на Git, я думаю, я не могу найти хорошее решение, и это тратит часы времени.

от Richard Griffiths

Разве нет разумного вокруг этого даже сейчас? Кажется, совершенно безумно иметь этот вопрос в 2016 году :(

от Richard Griffiths
6

В затмении с подрывной деятельностью я смог обойти эту запутанную ошиб

ку, выполнив команду Team-> синхронизация в папке на достаточно высоком уровне в проекте, которая охватывала как старые, так и новые имена и расположения файлов. Если вы переместили и переименовали свои файлы или не можете понять, что именно происходит, синхронизация на самом верхнем уровне вашего проекта не помешает.

Когда я сделал это, старые версии переименованных файлов обнаружились в представлении синхронизации. Как только я использовал «переопределить и зафиксировать» их, они снова исчезли. На данный момент, новые, наконец, зафиксируются правильно.

Итак, шаг за шагом, что я должен делать? Щелкните правой кнопкой мыши по проекту и «Синхронизировать с репозиторием»? Что дальше?

от Line

Я попытался просто нажать кнопку «Синхронизировать» в представлении «Синхронизировать», но это не сработало. Этот трюк работает, спасибо.

от Marco Sulla
6

Добавьте файл со старым именем и сделайте коммит

затем снова удалите файл, сделайте коммит.

1

Есть вероятность, что один из файлов переименован.

Посмотрите на имена файлов в ошибке и посмотрите, совпадает ли это с вашими файлами.

Если имена файлов не совпадают, переименуйте ваш файл в файл с ошибкой и зафиксируйте все файлы, которые вы хотели зафиксировать. После этого вы можете переименовать ваш файл и зафиксировать снова.

О, я вижу. Я допустил ошибку. Остальная часть ответа все еще может быть действительной.

от MCollard

Весь вопрос о переименовании файлов.

от Len
1

svn commit &#39

R: \ myPath \ My-New-File-Name.cfm' 'R: \ myPath \ My-Old-File-Name.cfm' -m "message"

работает для меня. Вам также нужно включить удаленный файл.

Это правильный ответ, когда вы работаете с необработанным SVN командной строки, и вы не хотите фиксировать весь каталог.

от Len
0

Для Visual Studio 2015 я остановился на исправлении для Ankh SVN. В мо

ем случае ошибка была вызвана переименованием «Form1.cs» во время разработки (и, возможно, его перемещением). Это вызвало проблемы со старыми и новыми файлами .resx.

Выделите проект в обозревателе решений, чтобы открыть окно просмотра ожидающих изменений,Выберите «Файл»> «Subversion»> «Ожидающие изменения».Снимите флажокПроверьте два или более файлов, которые нужны Subversion. Если «нового» нет в списке, измените его содержимое неразрушающим способом, чтобы оно появилось в списке.Запустите коммит.

Надеюсь, что это работает для вас.

0

Если вы используете IntelliJ IDEA и делаете коммит с TortoiseSVN

иногда бывает, что папка не удалена IDEA и Subversion делает эту ошибку.

В этом случае это означает"пожалуйста, не фиксируйте папку / файл, который вы пометили как удаленный"

-1

Если что-то действительно испортилось

самое простое решение - удалить папку из репозитория, а затем добавить ее обратно в ее текущую форму.

SVN Протрите и замените:

Скопируйте папку, содержащую все ваши изменения, во временную папку.Используйте SVN Delete в папке и затем подтвердите.Скопируйте резервную копию обратно в вашу рабочую копию и подтвердите.

Это отрежет вашу историю для каждого файла в этом каталоге. Я не думаю, что вы хотите сделать это.

от Ben
-2

TortiseSVN открыть файл в проводнике Windows. выберите файл

щелкните правой кнопкой мыши, используйтеTortiseSVN->развернуть и добавить в список игнорируемых

тогда файл избавится от SVN , станет обычным файлом. Таким образом, вы можете выполнить операцию, чтобы добавить файл в SVN и отправить его.

Я использую решение решить проблему.

Это отрежет историю файла. Намного лучше использоватьsvn rename и зафиксируйте родительскую папку.

от Ben

Похожие вопросы