Преименуван файл, сега 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

Трябва да добавите options като публичен атрибут във вашия клас модел. След това трябва да го зададете като безопасно във вашите правила:

public function rules() {
    ...
    [['options'], 'integer'],
    [['options'], 'optValidation', 'on' => 'update'],
    [['options'], 'safe'],
    ...

И накрая, ще трябва да генерирате входа точно като други входове, свързани с вашия модел, дори ако той не съществува във вашата DB таблица, имате нужда от него във вашия модел:

<?php echo $form->field($model, 'options')->checkboxList('options', $selected_options, $options, ['class' => 'checkbox']); ?>
- 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 от Explorer, за да направите ангажимент в директорията (което изтрива старото име на файла и добавя новото).

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 файлове.

  • Маркирайте проекта в Solution Explorer, за да отворите прозореца за изглед на чакащи промени,
  • Изберете Файл > 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 commit -m ''

Свършен

person Jay Lepore    schedule 12.04.2020

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

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

използвам решението за решаване на проблема.

person BruceWang    schedule 06.11.2015
comment
Това ще отреже историята на файла. Много по-добре е да използвате svn rename и да ангажирате родителската папка. - person Ben; 18.03.2016