Як працює нерекурсивний вчинок Черепахи?


110

Я перевірив локально копію гілки SVN (моя гілка), до якої я об'єднався з іншої гілки (яка має зовсім іншу структуру папок). Так що в основному є багато видалень (старих файлів) та доповнень (нових файлів).

Коли я намагаюся здійснити злиття для сховища (до моєї гілки), говорить Черепаха

Ця фіксація не є рекурсивною, і є переміщені / перейменовані папки, вибрані для фіксації. Такі переміщення / перейменування завжди виконуються рекурсивно в сховищі. Ви хочете взяти на себе зобов’язання?

Чи добре продовжувати виконання цього зобов’язання? Якщо ні, то що мені робити, щоб не виникло проблем?

Також для деяких файлів, які я додав, я додав зміни після додавання (якщо це впливає на природу).

Відповіді:


129

Google знайшов, як це виправити: натисніть F5 у вікні фіксації (а не у "спливаючому вікні")

Докладні відомості див. На веб-сторінці http://tortoisesvn.tigris.org/ds/viewMessage.do?dsForumId=757&dsMessageId=2831045 .

26.08.2011 22:39 Райан Дж Оллос написав:

Вже декілька місяців я бачу, як з’являється наступне діалогове вікно, коли починається Коміт Це часто трапляється під час спроби здійснити після об'єднання.

Що я помітив останнім часом, це те, що якщо я скасую і потім вручну оновіть список файлів (F5), я не побачу повідомлення знову при ініціюванні фіксації вдруге. Здається, що це зробити вдало, і без додаткових проблем.

Діалогове вікно фіксації контролює робочу копію у фоновому потоці для отримання сповіщень про зміни. Такі повідомлення надсилаються ОС у разі зміни файлів / переміщення / перейменування / ... Якщо таке повідомлення отримано, діалогове вікно фіксації спочатку робить кілька перевірок, щоб він міг скинути більшість із них. Якщо в повідомленні вказується, що файл, який не перевіряється і не видно у діалоговому вікні фіксації, якимось чином змінився, він переходить до нерекурсивного виконання. Це тому, що якщо у вас є, наприклад, файл, відкритий в іншому редакторі, і збережіть свої зміни, поки відкрито діалогове вікно фіксації, то цей файл також буде заповнений, навіть якщо ви не перевірили його в діалозі фіксації (він не відображається поки ви не оновите діалогове вікно з F5).

Тож якщо ви часто бачите це діалогове вікно попередження, перевірте, чи працює інший інструмент / додаток, який змінює файли у вашій робочій копії.

І як ви помітили: якщо ви натиснете F5, цей "нерекурсивний прапор" скидається, оскільки після оновлення ви знову бачите всі файли - навіть ті, які ви змінили після початку діалогу.

Стефан


1
Посилання у відповіді, здається, мертве. Ось дійсний з Інтернет-архіву web.archive.org/web/20150306224932/http://…
buzz3791

1
Я просто спробував натиснути F5. Ефект полягає в тому, що зараз список діалогових файлів фіксації показує більшість моїх файлів двічі (з точно однаковим шляхом та назвою), і попереджувальне повідомлення все ще з’являється при спробі здійснення.
АБО Mapper

26

У мене була та сама проблема, але я її вирішив, повернувши зміни до файлів, які я позначав як "ігнорувати при здійсненні"

Як тільки я повернув ці файли, то tortoisesvn зміг зробити всі інші файли злиття


що є фактичною причиною? чому або як ці файли викликають проблему?
Mannoj

5

Чи добре, якщо я продовжую це завдання?

Ні, ваша комісія ігнорує всі зміни в дереві WC і відображатиме лише зміни на кореневому рівні (порушене злиття).

Ви зробили помилку під час початкової перевірки нерекурсивного. Ви можете спробувати виконати хорошу, повну фіксацію, використовуючи --depth infinityпараметр у CLI або знайти цей перемикач у графічному інтерфейсі TortoiseSVN.

svn commit --depth infinity . -m "Merge"

1
"Ви помилилися, спочатку перевіряючи нерекурсивну." Ні, не обов’язково. Я перевірив свій туалет так само, як я завжди, але у мене все ще є раптом ця проблема. Насправді, це, мабуть, не стосується жодного з альтернативних рішень нижче.
Кіт М

Це абсолютно помилково. Я отримую це повідомлення час від часу, і я перевіряв свою робочу копію рекурсивно так само, як це робив я завжди
1800 ІНФОРМАЦІЯ

1

Також для деяких файлів, які я додав SVN, я додав зміни після додавання (Якщо це впливає на природу).

У моєму випадку саме це і спричинило появу повідомлення, навіть я не вибрав ці файли для фіксації.

Некрасиве рішення, яке працює безпечно, лише якщо зачеплені кілька файлів:

  1. Створіть копію змінених файлів
  2. Поверніть змінені файли
  3. Здійснити злиття / реінтеграцію
  4. Скопіюйте змінені файли на початкове місце

Нагадування про себе: реінтегруйте гілку лише у тому випадку, якщо ціль (стовбур) чиста.


1

Схоже, TortoiseSVN виконує певну перевірку дійсності перед тим, як викликати фіксацію. Добре, але повідомлення про помилку дуже незрозуміле.

Коли я зіткнувся з цією проблемою, я повернувся до використання командного рядка svn для здійснення. Здійснення помилок не вдалося з причини того, що одна з папок не була оновлена. Оновивши саме цю папку, я знову запустив "svn commit" і це пройшло.

Редагувати: PS: Перш ніж використовувати, спробуйте це, переконайтесь, що у вас немає файлів, позначених як "ігнорувати при здійсненні". "Ігнорувати при здійсненні" є специфічним для черепахи, і SVN фіксація також вибирає ці зміни.


1

Просто думав, що опублікую це, бо це працювало на мене ...

Причина цього сталася через те, що я частково перейменував один із створених мною нових проектів, і чомусь усі вони відображалися як "відсутні" на екрані фіксації.

Після того, як я видалив проект і папку (на яку SVN поставив галочку) і знову поставив її як новий проект, раптом усе "Відсутнє" перетворилося на "Додане", і комісія закінчилася, не попереджаючи мене ні про що .

Сподіваюся, це допомагає!


1

Я бачив цю проблему, і причиною було кілька доданих файлів, які не мали статусу доданого без видимих ​​причин. Вони були "нормальними", хоча батьківська папка правильно показала "додано". Я повернув ці "звичайні" зміни, а потім вручну повторив їх. Це призвело до того, що кожен доданий елемент відображається двічі у списку комісій, але він усунув помилку, і все, здається, зараз працює в робочому стані.

Це не мало нічого спільного з ігноруванням при здійсненні, як і в іншій відповіді, це просто здавалося помилкою в TortoiseSVN.


З того, що я можу сказати, TortoiseSVN не рекурсивно переміщує файли. Переміщення папки змінює історію папок, але не файли в ній. Це означає, що для переміщення папок із TortoiseSVN вам потрібно відтворити папку в потрібному місці призначення, додати папку, а потім перемістити вміст вихідної папки до нової. Або просто скористайтеся командним рядком.
Бредлі Зінгер

Я вважаю, що це було злиттям, а не ходом. Якщо це не подібні операції, я не слідкую.
Кріс

0

Проблема може полягати в тому, що ваша інформація про злиття хтось або автоматично видаляє, оскільки інформація перемістилася вгору по дереву. Якщо ви знову збираєте їх, це спрацює на даний момент. Але всі інші отримають проблеми зі своїми не об'єднаними гілками. SVN втратить деякий код і знову об'єднає вже поданий код.

Тож повернення цих файлів та їх повторна зміна може спрацювати, але не слід просто вносити зміни.


0

У мене просто було те саме питання. Замість того, щоб вибрати всі файли, я натиснув версію і все спрацювало добре. У моєму випадку варіант з варіантом вибрав усі файли, тому зараз все нормально.


-4

Я не знаю варіант для tortoisesvn, але ви можете використовувати командний рядок

svn commit --non-recursive [folder]

це могло б працювати так само, як вам подобається працювати привітанням


Інші відповіді говорять, що це не призведе до того, що ви насправді хочете здійснити.
Кіт М
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.