липсва чист svn-base файл

Опитвам се да svn update моето SVN работно копие с TortoiseSVN, но актуализацията е неуспешна, като първо искам да извърша почистването.

Въпреки това, svn cleanup също се проваля, заявявайки, че \.svn\pristine\20\20long-namecbf.svn-base file cannot be found.

Вече се опитах да освободя ключалката, но и това не работи.

Имате ли идея как да продължа?


person Alexander Serebrenik    schedule 03.09.2012    source източник


Отговори (7)


Можете да използвате SmartSVN, за да възстановите изгубен непокътнат файл.
Изтеглете и го инсталирайте. Не е безплатно, но 30-дневен безплатен пробен период би трябвало да е достатъчен, за да поправите вашето хранилище.
Отворете работното си копие в SmartSVN. За да поправите, изберете Промяна > Проверка на административната област...
Насладете се!

person duccom    schedule 02.10.2012
comment
Моля, добавете как, видях няколко препратки към SmartSVN, но всички не успяват да обяснят как. - person Christopher Bonitz; 05.09.2015
comment
Благодаря ти duccom, това има много повече смисъл. - person Christopher Bonitz; 23.11.2015

Този проблем:

не може да намери файла .svn\pristine\24\24fd530d4bd82341fb514ab912c9e10adbc4ad89.svn-base

Копирах svn-base от друг файл и го преименувах с 24fd530d4bd82341fb514ab912c9e10adbc4ad89.svn-base. И извършете операция за почистване. След това срещнах друг липсващ файл. Използвах по същия начин и най-накрая поправих този проблем.

От команден ред на Windows с инсталиран SilkSVN:

cd project directory
svn status

Това ще генерира грешка. Изберете и копирайте текста на директорията и името на файла, след което поставете:

echo > .svn\pristine\<paste>

Например:

echo > 24\24fd530d4bd82341fb514ab912c9e10adbc4ad89.svn-base

С тези знания в ръка би било сравнително тривиално да напишете пакетен файл, който може да коригира тези проблеми автоматично за всички. Командата svn ще генерира стойност %ERRORLEVEL%, която може да бъде проверена за грешка.

person chunguiw    schedule 23.07.2013
comment
Това ме доведе до още по-просто решение: просто създайте празен файл с даденото име на файл и стартирайте svn cleanup. (Между другото това трябва да е приетият отговор.) - person Csq; 25.02.2016
comment
Това предизвика по-късно несъответствие на контролната сума при сливането на клона. Така че трябваше да взема копие и да заменя липсващия svn-base файл. Започнах да проверявам пълния проект, но го отмених, когато получих липсващ svn-base файл. - person Vasiliy Zverev; 13.07.2018
comment
Подейства като чар за мен, благодаря. Това трябва да е приетият отговор. - person Caspian Canuck; 04.09.2018
comment
Първичните файлове са резервно копие на оригиналния файл (който липсва). Ако създадете празен файл с име като ‹file-guid.svn-base›, тогава почистването ще успее, но също така ще копира вашия празен файл във файла, който липсва. В моя случай липсващият файл беше заразен с вируси, следователно както оригиналният файл в моята директория на проекта, така и резервният .svn-base файл в девствената директория бяха премахнати и след това Update/Commit/Cleanup се използва, за да даде тази грешка. - person Anshuman Chatterjee; 07.04.2021

Реших това с

  1. Създаване на празен файл /workingdirectory/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601800afd80009.svn-base

  2. Стартирайте svn cleanup

person Nawwar Elnarsh    schedule 26.03.2017

Измъкнах се, като замених .svn директорията със същата от току-що изтеглено копие. За мое щастие локалното копие беше в същата ревизия като репото. Не съм сигурен какви биха били последиците, ако не беше така.

person Asa    schedule 01.02.2013

За мен файлът беше там, но имаше (1), добавен към името. (Копие) ff4c7be3da460bb91144d6761cc5743536c983f4 (1).svn-база

Премахнах "(1)" и почистването вървеше добре ff4c7be3da460bb91144d6761cc5743536c983f4.svn-base

person Sirentec    schedule 03.08.2014

Взех отговора на chunguiw и написах скрипт на Python (2.7) за него, в случай че някой се интересува.

Следва процедурата: опитайте почистване, анализирайте изхода, докоснете липсващия файл, повторете, докато приключите.

import os
import sys
import subprocess
import re

def touch(fname, times=None):
    with open(fname, 'a'):
        os.utime(fname, times)


svnbase_regex = re.compile(r"svn: E720002: Can't open file \'([^']+)\':")


if __name__ == "__main__":
    # Can pass SVN working copy's root folder as a parameter, otherwise runs on CWD
    try:
        root_folder = sys.argv[1]
    except IndexError:
        root_folder = "."
    root_folder = os.path.abspath(root_folder)
    os.chdir(root_folder)
    count = max_times = 10
    # Repeats file touching at most N times (the number above)
    while count > 0:
        count -= 1
        try:
            svn_output = subprocess.check_output("svn cleanup", stderr=subprocess.STDOUT)
        except subprocess.CalledProcessError, e:
            svn_output = e.output
        regex_match = svnbase_regex.search(svn_output)
        if not regex_match:
            break
        touch(regex_match.group(1))
        print "Done %s" % regex_match.group(1)
    print "Exited, fixed up %s missing entries." % (max_times - count)
    print "last SVN output:"
    print svn_output
person Virgult    schedule 28.02.2019

Това също ще го направи като едноредов:

while [ 1 ] ; do OUTPUT=`svn cleanup 2>&1 | sed 's/^.* open file //' | sed 's/:.*$//' | sed "s/'//g"`;if [ "X${OUTPUT}" == "X" ] ; then   break; fi; echo $OUTPUT;touch $OUTPUT;done
person Greg Saylor    schedule 18.04.2020