Базар, Подвижный или другой для управления версиями отдельного пользователя? [закрытый]

Это на самом деле довольно легко с ожиданием () и notifyAll ().

Первый, определите объект блокирования. (Можно использовать любой класс для этого, но мне нравится быть явным):

package com.javadude.sample;

public class Lock {}

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

package com.javadude.sample;

public class Worker extends Thread {
    private Lock lock_;
    private long timeToSleep_;
    private String name_;
    public Worker(Lock lock, String name, long timeToSleep) {
        lock_ = lock;
        timeToSleep_ = timeToSleep;
        name_ = name;
    }
    @Override
    public void run() {
        // do real work -- using a sleep here to simulate work
        try {
            sleep(timeToSleep_);
        } catch (InterruptedException e) {
            interrupt();
        }
        System.out.println(name_ + " is done... notifying");
        // notify whoever is waiting, in this case, the client
        synchronized (lock_) {
            lock_.notify();
        }
    }
}

Наконец, можно записать клиенту:

package com.javadude.sample;

public class Client {
    public static void main(String[] args) {
        Lock lock = new Lock();
        Worker worker1 = new Worker(lock, "worker1", 15000);
        Worker worker2 = new Worker(lock, "worker2", 10000);
        Worker worker3 = new Worker(lock, "worker3", 5000);
        Worker worker4 = new Worker(lock, "worker4", 20000);

        boolean started = false;
        int numNotifies = 0;
        while (true) {
            synchronized (lock) {
                try {
                    if (!started) {
                        // need to do the start here so we grab the lock, just
                        //   in case one of the threads is fast -- if we had done the
                        //   starts outside the synchronized block, a fast thread could
                        //   get to its notification *before* the client is waiting for it
                        worker1.start();
                        worker2.start();
                        worker3.start();
                        worker4.start();
                        started = true;
                    }
                    lock.wait();
                } catch (InterruptedException e) {
                    break;
                }
                numNotifies++;
                if (numNotifies == 4) {
                    break;
                }
                System.out.println("Notified!");
            }
        }
        System.out.println("Everyone has notified me... I'm done");
    }
}
14
задан Joel Coehoorn 9 December 2011 в 19:02
поделиться

10 ответов

Bazaar очень хорош для ваших нужд, и я сомневаюсь, что вы обнаружили проблемы со скоростью в ваших проектах. Bazaar имеет очень красивый интерфейс с графическим интерфейсом под названием Bazaar Explorer , который я бы рекомендовал вместо TortoiseBzr. (Bazaar Explorer теперь включен в стандартный установщик 2.0.)

Конечно, если вы выберете Mercurial, вы мало что потеряете.

Так что вам лучше протестировать одно и другое и сделать свой выбор. Каждый фанат порекомендует вам своего фаворита.

6
ответ дан 1 December 2019 в 06:53
поделиться

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

Я сам разработчик Mercurial и, конечно, порекомендую это :-) Мне нравится, что в Mercurial есть одна центральная концепция: граф наборов изменений. Граф находится внутри репозитория (клона). В одном клоне может быть несколько линий развития. Это может быть несколько заголовков, возможно, отмеченных расширением закладок , или именованных ветвей. Вы также можете использовать несколько клонов, чтобы разделять вещи, или вы можете двигаться вперед и назад: легко отделить комбинированный клон (используйте hg clone -r REV , чтобы получить часть графа ревизий). См. Эту запись в блоге для получения красивых картинок.

Для Windows (и других платформ тоже) у вас есть TortoiseHg , что дает вам очень красивый графический интерфейс. TortoiseHg также интегрируется со многими отличными плагинами для Mercurial, в частности, с расширением записи , которое позволяет вам выбирать отдельные изменения из файла при фиксации. Используя это, вы можете редактировать несколько файлов, а затем фиксировать эти изменения как несколько независимых ревизий.

Наконец, вы также должны знать о Mercurial: The Definitive Guide , бесплатной онлайн-книге о Mercurial.

16
ответ дан 1 December 2019 в 06:53
поделиться

Если вы пользователь Windows, ничто IMO не сможет победить TortoiseSVN с точки зрения удобства и простоты использования.

5
ответ дан 1 December 2019 в 06:53
поделиться

Определенно Subversion ....

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

Вы можете просто загрузить TortoiseSVN ( http: // tortoisesvn. tigris.org/) ru начните его использовать .... Для начала больше ничего не требуется, потому что в tortoisesvn, как мне кажется, встроена функция Subversion ....

4
ответ дан 1 December 2019 в 06:53
поделиться

Я довольно широко использовал SVN, Git и Bzr в различных проектах. В настоящее время я использую Bzr в однопользовательском проекте, и его очень легко настроить и использовать. Нет необходимости настраивать сервер и поставляется с TortoiseBzr, который работает хорошо, он может быть не таким полным, как TortoiseSVN, но для проекта одного человека у вас должно быть все, что вам нужно. Не хватает нескольких вещей, таких как возможность пометить ревизию, и в этом случае вам нужно прибегнуть к использованию интерфейса командной строки. Я рассматривал Mercurial около года назад, но я еще не использовал его в реальной ситуации, поэтому я не смог бы сравнить. Я отказался от этого, потому что TortoiseHG в то время не казался очень зрелым, и я надеюсь, что с тех пор он будет улучшаться.

3
ответ дан 1 December 2019 в 06:53
поделиться

Я уже давно пользуюсь Bazaar, и мне это очень понравилось. Несмотря на всю шумиху вокруг git , я попробовал. И хотя у него довольно сложные концепции, я могу только сказать, что переход стоил того. Сейчас я использую его во всех своих проектах. Неважно насколько маленький. И я думаю, что TortoiseGit стал достаточно хорошим, чтобы его можно было использовать.

Я вижу в нем следующие положительные моменты:

  • Это быстро
  • Ветвление и слияние настолько просты, что можно даже сказать, что это fun
  • В нем есть фанковые команды, которых я больше нигде не видел (например: stash и rebase)
  • Это раздуто. Следовательно, сообщество довольно активно, и вы можете найти о нем много материала
  • Вы можете взять копию gitorious , чтобы управлять своими проектами в частном порядке

Некоторые вещи мне не нравятся так сильно:

  • отображение ветки в gitk "кажется" мне странным
1
ответ дан 1 December 2019 в 06:53
поделиться

Мне очень нравится darcs , он использует так называемую теорию исправлений, которая, насколько мне известно, уникальна для программ управления версиями.

2
ответ дан 1 December 2019 в 06:53
поделиться

Я использую git , и он отлично мне подходит. Я использую msysgit в Windows.

0
ответ дан 1 December 2019 в 06:53
поделиться

Я всегда буду рекомендовать Git. Это быстро, не требует сервера, отличное ветвление и слияние. Для Windows вам необходимо получить MsysGit .

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

0
ответ дан 1 December 2019 в 06:53
поделиться

Я поигрался со всеми из них.

Главное, что привлекло меня в Bazaar, - это его гибкость.

Хочу работать в централизованном режиме (аля SVN) ? Вы можете сделать это. Хотите работать в распределенном режиме (аля Mercurial или git)? Вы можете это сделать.

И вот что становится лучше: вы можете делать и то, и другое. Допустим, вы работаете с парнем, который пришел из SVN, и ему совсем немного не нравится распределенная концепция. Хорошо. Пусть он работает в централизованном режиме, а остальная команда работает в распределенном режиме. Если он находится вдали от центрального репозитория, он может даже отключить свою кассу и выполнять автономные коммиты, пока его нет. Затем он сможет зафиксировать их все, когда вернется.

Хотя в некоторых других системах есть способы приблизить различные модели,

4
ответ дан 1 December 2019 в 06:53
поделиться
Другие вопросы по тегам:

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