Внешний облик обновления подрывной деятельности на дату

Используйте which python и whereis python (where python в Windows) для отладки вопросов о том, где находятся исполняемые файлы. Вывод из них должен ответить на ваш вопрос. Ура!

39
задан Whatsit 25 March 2009 в 22:12
поделиться

8 ответов

Это неэффективно, поскольку вызывает обновление svn чаще, чем (обычно) требуется. В противном случае, коротко конфетка:

Unix:

find . -name .svn -execdir svn update -r {2010-08-30} \;

Windows:

forfiles /m .svn /s /c "cmd /c svn up -r {2010-08-30}"
38
ответ дан 27 November 2019 в 02:45
поделиться

У меня все еще нет идеального решения, но этот приближается:

svn propget svn:externals | sed -e 's/ .*$//g' | xargs svn up -r'{20090324}'

Это работает в моем случае, потому что нет никакого рекурсивного внешнего облика, и весь внешний облик определяется без пробелов в каталоге или числе пересмотра, таким образом, регулярное выражение может легко обрубить запаздывающий путь к репозиторию.

Я уверен, что существует лучший regex, который решит проблему в общем, все же.

Править: На самом деле, чем больше я думаю об этом, тем больше проблем я вижу. Самый большой из которых - то, что это использует svn:externals от текущей версии, а не svn:externals версии в указанную дату. Это еще более сложно, чем я сначала думал.

2
ответ дан Whatsit 27 November 2019 в 02:45
поделиться

При использовании svn:externals, это обычно - плохая идея использовать внешнее без числа пересмотра. Это означает, что становится трудно коррелировать версию внешнего с версией содержания проекта; я знаю это твердый путь от попытки разыскать некоторую историю в проекте, который содержал внешний облик, и я должен буду предположить, какой пересмотр соответствовал пересмотру в содержании проекта (иногда, это было ранее, потому что кто-то обновил внешний проект и затем обновил содержание проекта, иногда это было позже, потому что кто-то отредактировал файлы непосредственно во внешнем контроле и затем фиксировал его).

Вместо этого как предложено полем подсказки пара абзацев во внешний облик разделяют в книге подверсии, необходимо всегда фиксировать внешний облик с числом пересмотра. Тот путь, каждый раз, когда Вы проверяете конкретный пересмотр содержания проекта, соответствующего пересмотра внешнего, будет также проверен. Это действительно означает немного больше работы, поскольку необходимо обновить число пересмотра в svn:externals свойстве каждый раз (мы записали сценарий, чтобы сделать это автоматически), но в конечном счете это - намного лучшее решение.

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

desc 'Update external for this project (rake update_external r=17789)'
task :update_external do |t|
  rev = ENV['r']
  rev =~ /^\d+$/ or raise "Invalid SVN revision number: r=<#{rev}>"

  # Update the project.
  sh "svn update"

  URL = 'svn+ssh://example.com/external/trunk'
  sh "svn propset svn:externals 'external -r#{rev} #{URL}' containing/directory"

  # Update again -- to put the externals back to the right revision.
  sh "svn update"
end
8
ответ дан Pål Brattberg 27 November 2019 в 02:45
поделиться

Это хитро, и я боюсь, что не могу предложить хорошее решение Вашей текущей ситуации - но Brian дал ответ о том, как избежать его.

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

Путем указания на весь внешний облик на теги или определенные изменения, никакие изменения от них не могут появиться в основной истории проекта, не передавая изменение во внешней ссылке. Но если Вы укажете на внешнее на движущуюся соединительную линию, то изменение во внешнем не обнаружится во временной шкале основного проекта вообще - отъезд Вас в положении, в котором Вы находитесь.

Лично, я получил представление, что внешний облик нужно рассматривать и выпустить как независимые проекты, следовательно весь внешний облик указывает на теги. Во время тяжелой параллельной разработки хорошо 'переключать' внешнее, чтобы соединить магистралью или иметь нестабильное ответвление разработки, временно указывающее на внешнюю соединительную линию, но соединительная линия проекта магистрали всегда указывает на внешнюю конюшню, и это - сознательное решение обновить. Это представление может быть излишеством для Вашей ситуации, но это достойно внимания другие возможности.

1
ответ дан Jim T 27 November 2019 в 02:45
поделиться

KSvn мог бы иметь эту функцию. http://subversion.tigris.org/links.html#desktop-integrations

0
ответ дан Jonathan Parker 27 November 2019 в 02:45
поделиться

Пересмотр/дата/и т.д., к которому Вы обновляете основной туалет, не становится переданным до внешнего облика, когда они обновляются. В отсутствие определенного пересмотра, указанного в определении внешнего облика, они будут всегда отслеживать главу того, на что они указывают. Если Вы указываете пересмотр там, то это - единственный пересмотр, который Вы будете когда-либо получать. Я вполне уверен, что Вы пытаетесь сделать, невозможно - это - подход, который я пытался использовать для решения проблемы, которую я имел, как я описываю в этом вопросе. (Я никогда не решал ту проблему, хотя я думаю идея прокси, это упоминается, там мог сделать это. Это, вероятно, не поможет Вам хотя),

0
ответ дан Community 27 November 2019 в 02:45
поделиться

Этот - лучшее решение проблемы, которую я обнаружил на сегодняшний день (это сложная проблема - разработчики Subversions должны исправить ее в ядре). Этот пример касается, в частности, mplayer, но вы должны легко увидеть логику.

; fetch the rev I want without including the externals
svn checkout -r "$REV" --ignore-externals \
    svn://svn.mplayerhq.hu/mplayer/trunk

; grab the date of that rev from the svn info output
DATE=`svn info trunk|sed -n '/^Last Changed Date/s/.*: \(.*\) (.*/\1/p'`

; fetch the externals using that date
svn checkout -r "{$DATE}" \
        svn://svn.mplayerhq.hu/ffmpeg/trunk/libavutil \
        svn://svn.mplayerhq.hu/ffmpeg/trunk/libavformat \
        svn://svn.mplayerhq.hu/ffmpeg/trunk/libavcodec \
        svn://svn.mplayerhq.hu/ffmpeg/trunk/libpostproc
3
ответ дан 27 November 2019 в 02:45
поделиться

Приятная утилита, которая заморозит внешние внешние данные. Мы используем этот Util для замораживания внешних пункт после того, как мы создаем тег из багажника:

http://svnxf.codeplex.com/

1
ответ дан 27 November 2019 в 02:45
поделиться
Другие вопросы по тегам:

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