Импорт/экспорт истории от SVN до TFS

Object.keys (obj): Array

извлекает все строкозначные ключи всех перечислимых собственных (не наследуемых) свойств.

blockquote>

So он дает тот же список ключей, что и вы, путем тестирования каждого ключа объекта с помощью hasOwnProperty. Вам не нужна эта дополнительная тестовая операция, чем и Object.keys( obj ).forEach(function( key ){}), как предполагается, быстрее. Докажем это:

var uniqid = function(){
			var text = "",
					i = 0,
					possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
			for( ; i < 32; i++ ) {
					text += possible.charAt( Math.floor( Math.random() * possible.length ) );
			}
			return text;
		}, 
		CYCLES = 100000,
		obj = {}, 
		p1,
		p2,
		p3,
		key;

// Populate object with random properties
Array.apply( null, Array( CYCLES ) ).forEach(function(){
	obj[ uniqid() ] = new Date()
});

// Approach #1
p1 = performance.now();
Object.keys( obj ).forEach(function( key ){
	var waste = obj[ key ];
});

p2 = performance.now();
console.log( "Object.keys approach took " + (p2 - p1) + " milliseconds.");

// Approach #2
for( key in obj ) {
	if ( obj.hasOwnProperty( key ) ) {
		var waste = obj[ key ];
	}
}

p3 = performance.now();
console.log( "for...in/hasOwnProperty approach took " + (p3 - p2) + " milliseconds.");

В моем Firefox у меня есть следующие результаты

  • Подход Object.keys 40.21101451665163 миллисекунд.
  • для подхода ... in / hasOwnProperty принято 98.26163508463651 миллисекунд.

PS. на Chrome разница еще больше http://codepen.io/dsheiko/pen/JdrqXa

PS2: В ES6 (EcmaScript 2015) вы можете повторить итерируемый объект более приятным:

let map = new Map().set('a', 1).set('b', 2);
for (let pair of map) {
    console.log(pair);
}

// OR 
let map = new Map([
    [false, 'no'],
    [true,  'yes'],
]);
map.forEach((value, key) => {
    console.log(key, value);
});
5
задан abatishchev 11 November 2012 в 03:29
поделиться

4 ответа

К сожалению, Вы, вероятно, не получили ответ, потому что нет хорошего предлагаемого...

Я изучил это пару раз прежде, первоначально для первых Бет TFS. (В то время, когда мы стремились переехать от VSS при ожидании TFS для чтения... компромисса, с которым мы закончили, затем должен был использовать SVN тем временем, но использовал рычаг фиксации сообщения, который сохранил репозиторий VSS в синхронизации для обеспечения того миграционного пути к TFS.)

Эти парни (ComponentSource) были вокруг тогда с VSS к преобразователю TFS и добавили SVN к TFS один, но, кажись, с тех пор прекратили продукт.

У этих парней (Kyrosoft) могло бы быть некоторое обещание, но я обеспокоен, что они не объявляют цены и действительно отправляют список клиентов (два). Если у кого-либо есть опыт с продуктом, давайте знать.

Позже Инструментарий Миграции и Синхронизации TFS был выпущен на CodePlex, но до настоящего времени никто не имеет, выпускают плагин SVN для него (существует 66 голосов за запрос),

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

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

В конце я подозреваю, что большинство команд заканчивает тем, что решило только к системам коммутации в подходящее время (например, новая версия или проект), и вручную имеет дело с разветвленным поиском истории в течение этих 6-12 месяцев, это остается особенно проблематичным...

2
ответ дан 18 December 2019 в 13:21
поделиться

Я не знаю, интересно ли Вам все еще, но я просто прошел это со своим текущим работодателем (мой проект использовал SVN, и они хотели переместить его в TFS на другом сайте).

Это следующие шаги, которые я использовал:

  1. Выполненные svndump на Вашем текущем repo, и берут файл к намеченной цели
  2. Используя svn сервер (например, локальный репозиторий) импортируют файл - для этого я использовал Сервер VisualSVN.
  3. Контроль репозиторий SVN к локальному каталогу (например. svn co <url> Proj_SVN)
  4. Выполните SvnBridge (из CodePlex) на той же машине
  5. Контроль репозиторий TFS к локальному каталогу (например. svn co http:// localhost:8080/<tfs_server>/<project_repo_path> Proj_TFS)
  6. Используя Svn2Svn (от codeplex) я выполняю следующее: svn2svn /s:c:\temp\src\Proj_SVN /d:c:\temp\src\Proj_TFS /r:<start_rev>:<end_rev>

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

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

7
ответ дан 18 December 2019 в 13:21
поделиться

Используйте KryoSoft. ComponentSource в основном банкротом.

1
ответ дан 18 December 2019 в 13:21
поделиться

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

1
ответ дан 18 December 2019 в 13:21
поделиться
Другие вопросы по тегам:

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