Переименованный файл, теперь 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

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


person froadie    schedule 05.02.2014    source источник
comment
Аналогичная проблема при переименовании каталога: stackoverflow.com/questions/29563635/   -  person user1717259    schedule 10.04.2015
comment
Windows нечувствительна к регистру, если вы переименуете свой файл, изменив только регистр, вы получите эту ошибку, поэтому переименуйте свой файл в другое имя (например, file2), зафиксируйте, затем переименуйте в имя, которое вы действительно хотите, и зафиксируйте снова.   -  person Loenix    schedule 31.10.2016
comment
@Loenix: Тем временем TortoiseSVN должен обрабатывать этот особый случай, поэтому использование двух переименований больше не требуется в Windows.   -  person blerontin    schedule 07.04.2020


Ответы (11)


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

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

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

person gbjbaanb    schedule 05.02.2014
comment
Я думал об этом, но я хотел зафиксировать только один файл из многих в каталоге. Но теперь я понял, что если я выберу фиксацию для всей папки, я могу снять все остальные файлы и просто оставить исходный файл и переименованный файл... Спасибо! - person froadie; 05.02.2014
comment
Отлично, это было проще, чем я думал! - person Ian Campbell; 07.02.2014
comment
Связанная проблема была решена путем 1) фиксации только папки 2) возврата файла со статусом «добавлено» 3) (обновление) 4) переименования файла в черепахе 5) успешной фиксации. - person JaBe; 18.09.2014
comment
Этот ответ неверен. Если вы работаете с самим svn (т. е. с svn из командной строки), нижеприведенный ответ rkiko будет правильным. То есть: вы указываете старое имя файла в своем коммите. Это позволяет вам точно фиксировать только те переименования, которые вы хотите, когда вы не хотите фиксировать все изменения в каталоге. Кроме того, вы НЕ вносите изменения в каталог, как если бы это был список текстовых файлов! - person Len; 15.03.2019

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

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

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

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

person Ray Ackley    schedule 11.12.2014
comment
Разве нет разумного вокруг этого даже сейчас? Кажется совершенно безумным иметь эту проблему в 2016 году :( - person Richard Griffiths; 30.11.2016
comment
Я все еще застреваю на этом! GRR почему, ну почему это так ужасно в Visual Studio? на самом деле стоит перейти на Git, я думаю, я не могу найти хорошее решение, и это тратит часы времени. - person Richard Griffiths; 31.01.2017
comment
стоило того, прежде чем вы столкнулись с этой проблемой :) - person Nearoo; 22.11.2017

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

person Bhuvanesh Narayanasamy    schedule 01.07.2016
comment
Это полностью путь - person Ghost; 22.10.2020

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

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

person Paul Cuddihy    schedule 12.01.2015
comment
Я попытался просто нажать кнопку «Синхронизировать» в представлении «Синхронизация», но это не сработало. Этот трюк работает, спасибо. - person Marco Sulla; 26.01.2016
comment
Итак, шаг за шагом, что мне делать? Щелкните правой кнопкой мыши проект и синхронизировать с репозиторием? Что дальше? - person Line; 21.01.2019

svn commit 'R:\myPath\My-New-File-Name.cfm' 'R:\myPath\My-Old-File-Name.cfm' -m "сообщение"

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

person rkiko    schedule 22.01.2017
comment
Это правильный ответ при работе с необработанной SVN из командной строки, и вы не хотите фиксировать весь каталог. - person Len; 15.03.2019

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

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

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

person Tad Macy    schedule 29.03.2016

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

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

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

person MCollard    schedule 30.06.2016
comment
Весь вопрос в переименовании файлов. - person Len; 15.03.2019
comment
О, я вижу. Я допустил ошибку. Остальная часть ответа может быть действительной. - person MCollard; 01.04.2019

Если что-то действительно запуталось, самое простое решение — удалить папку из репозитория, а затем добавить ее обратно в ее нынешнем виде.

SVN стереть и заменить:

  1. Скопируйте папку, содержащую все ваши изменения, во временное место.
  2. Используйте SVN Delete в папке, а затем зафиксируйте.
  3. Скопируйте резервную копию обратно в рабочую копию и зафиксируйте.
person Preston McCormick    schedule 10.06.2015
comment
Это отключит вашу историю для каждого файла в этом каталоге. Я не думаю, что ты хочешь этого делать. - person Ben; 18.03.2016

Если вы используете IntelliJ IDEA и выполняете фиксацию с помощью TortoiseSVN, иногда бывает так, что папка не удаляется IDEA, и Subversion выдает эту ошибку.

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

person Chavjoh    schedule 05.09.2017

sudo svn rm нарушительный файл --force

sudo svn совершить -m ''

Сделанный

person Jay Lepore    schedule 12.04.2020

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

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

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

person BruceWang    schedule 06.11.2015
comment
Это отрезает историю файла. Гораздо лучше использовать svn rename и зафиксировать родительскую папку. - person Ben; 18.03.2016