bzr: Восстановление удаленного файла после некоторых фиксаций с базаром

[ Видят также этот вопрос ]

, я изменил ответ Marc, чтобы использовать фактические случайные числа и на самом деле сделать ту же работу во всех случаях.

Результаты:

         for      foreach
Array : 1575ms     1575ms (+0%)
List  : 1630ms     2627ms (+61%)
         (+3%)     (+67%)

(Checksum: -1000038876)

Скомпилированный как Выпуск под VS 2008 SP1. Работая, не отлаживая на Q6600@2.40GHz.NET 3,5 SP1.

Код:

class Program
{
    static void Main(string[] args)
    {
        List list = new List(6000000);
        Random rand = new Random(1);
        for (int i = 0; i < 6000000; i++)
        {
            list.Add(rand.Next());
        }
        int[] arr = list.ToArray();

        int chk = 0;
        Stopwatch watch = Stopwatch.StartNew();
        for (int rpt = 0; rpt < 100; rpt++)
        {
            int len = list.Count;
            for (int i = 0; i < len; i++)
            {
                chk += list[i];
            }
        }
        watch.Stop();
        Console.WriteLine("List/for: {0}ms ({1})", watch.ElapsedMilliseconds, chk);

        chk = 0;
        watch = Stopwatch.StartNew();
        for (int rpt = 0; rpt < 100; rpt++)
        {
            int len = arr.Length;
            for (int i = 0; i < len; i++)
            {
                chk += arr[i];
            }
        }
        watch.Stop();
        Console.WriteLine("Array/for: {0}ms ({1})", watch.ElapsedMilliseconds, chk);

        chk = 0;
        watch = Stopwatch.StartNew();
        for (int rpt = 0; rpt < 100; rpt++)
        {
            foreach (int i in list)
            {
                chk += i;
            }
        }
        watch.Stop();
        Console.WriteLine("List/foreach: {0}ms ({1})", watch.ElapsedMilliseconds, chk);

        chk = 0;
        watch = Stopwatch.StartNew();
        for (int rpt = 0; rpt < 100; rpt++)
        {
            foreach (int i in arr)
            {
                chk += i;
            }
        }
        watch.Stop();
        Console.WriteLine("Array/foreach: {0}ms ({1})", watch.ElapsedMilliseconds, chk);
        Console.WriteLine();

        Console.ReadLine();
    }
}

9
задан Matthew 1 January 2010 в 23:01
поделиться

3 ответа

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


Вот что я считаю наиболее чистым методом:

  1. Создайте ветку:

    bzr branch mytree repair-path

  2. cd в ремонтную ветку

  3. Revert только отсутствующий файл в его последней редакции (например, 287 в этом примере):

    bzr revert -r 287 lost.file

  4. Зафиксировать изменение

    bzr commit -m "Отключить мою ногу"

  5. cd назад в основную ветку

  6. слияние в исправлении

    bzr merge repair-path

  7. Когда все будет готово, зафиксируйте слияние и удалите ветвь восстановления.

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

0
ответ дан 4 December 2019 в 13:03
поделиться

Если вы знаете номер ревизии при удалении этого файла (вы можете просмотреть историю с помощью bzr log -v ), вы можете воскресить этот файл с помощью команды слияния. Итак, для файла foo и номера ревизии N вам необходимо выполнить команду:

bzr merge foo -r N..N-1

Например, для ревизии 287:

bzr merge foo -r 287..286

Эта команда восстановит ваш файл, как в ревизии 287. Вам необходимо чтобы зафиксировать это изменение, и все готово.

4
ответ дан 4 December 2019 в 13:03
поделиться

Самый простой способ - просто использовать bzr revert с номером версии перед удалением файла:

bzr revert -rX path/to/file
bzr commit -m 'Bringing path/to/file back'

Вам не нужно ничего объединять.

]
12
ответ дан 4 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

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