Отслеживание третьей стороны кодирует с Мерзавцем

Используйте словарь для хранения предполагаемых значений

// dictionary
const guessDictionary = {};

//guess higher or lower logic
function guessHighOrLow(min, max){
  min = Math.ceil(min); // eg: 40
  max = Math.floor(max); // eg: 99
  
  // generating a unique key for dictionary eg: "40-99"
  const key = [min, max].join('-');
  
  // generates and store computerGuess if not in dictionary
  if(guessDictionary[key] === undefined) {
    guessDictionary[key] = Math.floor(Math.random() * (max - min + 1)) + 
min;
  } 
  
  // always return from dictionary
  return guessDictionary[key];
}


//Computer generates number from 1-99
function generateFirstGuess(){
  randomNumber = Math.floor(Math.random() * 100);
  return randomNumber;
}


//computer guesses higher if guess too low

function guessHigher(){
  alert(guessHighOrLow(randomNumber, 100));
}

function guessLower(){
  alert (guessHighOrLow(1, randomNumber));
}

24
задан Assaf Lavie 24 March 2009 в 13:29
поделиться

3 ответа

Здесь существует две отдельных проблемы:

  1. Как Вы поддерживаете локальные ветвления удаленных проектов, и
  2. Как Вы сохраняете копию удаленных проектов в Вашем собственном дереве?

Проблема 1 довольно легка отдельно. Просто сделайте что-то как:

git clone git://example.com/foo.git
cd foo
git remote add upstream git://example.com/foo.git
git remote rm origin
git remote add origin ssh://.../my-forked-foo.git
git push origin

Можно затем обычно работать над разветвленным репозиторием. Когда Вы хотите объединиться в восходящих изменениях, работать:

git pull upstream master

Что касается проблемы 2, одна опция состоит в том, чтобы использовать подмодули. Для этого, CD в Ваш основной проект, и выполненный:

git submodule add ssh://.../my-forked-foo.git local/path/for/foo

Если я использую подмодули мерзавца, что я должен знать?

Можно найти, что подмодули мерзавца время от времени немного хитры. Вот некоторые вещи иметь в виду:

  1. Всегда фиксируйте подмодуль прежде, чем фиксировать родителя.
  2. Всегда продвигайте подмодуль прежде, чем продвинуть родителя.
  3. Удостоверьтесь, что ГОЛОВА подмодуля указывает на ответвление перед согласием на него. (Если Вы - пользователь удара, я рекомендую использовать завершение мерзавца, чтобы поставить текущее имя ответвления в Вашей подсказке.)
  4. Всегда выполняемый 'подмодуль мерзавца обновляет' после переключения ответвлений или получения по запросу изменений.

Можно работать приблизительно (4) до некоторой степени при помощи псевдонима, созданного одним из моих коллег:

git config --global alias.pull-recursive '!git pull && git submodule update --init'

... и затем выполнение:

git pull-recursive

Если подмодули мерзавца так хитры, каковы преимущества?

  1. Можно проверить основной проект, не проверяя подмодули. Это полезно, когда подмодули огромны, и Вам не нужны они на определенных платформах.
  2. При испытании пользователей мерзавца возможно иметь несколько ветвлений подмодуля и связать их с различными ветвлениями основного проекта.
  3. Когда-нибудь, кто-то мог бы на самом деле зафиксировать подмодули мерзавца для работы более корректно. Самые глубокие части реализации подмодуля на самом деле довольно хороши; это - просто инструменты верхнего уровня, которые повреждаются.

подмодули мерзавца не для меня.Что дальше?

Если Вы не хотите использовать подмодули мерзавца, Вы могли бы хотеть изучить стратегию поддерева слияния мерзавца. Это сохраняет все в одном репозитории.

Что, если восходящий репозиторий использует Подверсию?

Это довольно легко, если Вы знаете, как использовать мерзавца svn:

git svn clone -s https://example.com/foo
cd foo
git remote add origin ssh://.../my-forked-foo.git
git push origin

Затем настройте локальное ответвление отслеживания в мерзавце.

git push origin master:local-fork
git checkout -b local-fork origin/local-fork

Затем для слияния от восходящего потока работайте:

git svn fetch
git merge trunk

(Я не протестировал этот код, но это более или менее, как мы поддерживаем один подмодуль с восходящим репозиторием SVN.)

Не используйте мерзавца svn переоснова, потому что она сделает очень трудным использовать подмодуль мерзавца в родительском проекте, не теряя данные. Просто рассматривайте ответвления Подверсии как зеркала только для чтения восходящего потока и слияние от них явно.

Если необходимо получить доступ к восходящему репозиторию Подверсии на другой машине, попробуйте:

git svn init -s https://example.com/foo
git svn fetch

Необходимо затем смочь объединить изменения от восходящего потока как прежде.

27
ответ дан 29 November 2019 в 00:01
поделиться

Я озирался немного больше и наткнулся на Оплетку. Это - инструмент, который автоматизирует ответвления поставщика в Мерзавце. Это может использовать Мерзавца или SVN repos.

Путем проверки через источник я узнал, что он использует стратегию поддерева. И, кажется, делает это действительно простым! Плюс, это, кажется, выполняет все мои требования!

Прежде чем я буду вскакивать и буду использовать его: у кого-либо здесь есть опыт с Оплеткой? Я хотел бы узнать о возможных недостатках, если существует кто-либо. Кроме того, если Вы не использовали Оплетку, но имеете некоторые экспертные знания в Мерзавце, что Вы думаете об этом на первый взгляд?

3
ответ дан 29 November 2019 в 00:01
поделиться

Я использую подмодули мерзавца для отслеживания допускающих повторное использование приложений в моих проектах Django, но это довольно грязно в конечном счете.

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

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

зернышко: http://pip.openplans.org/ и работающий с pip/virtualenv: http://www.b-list.org/weblog/2008/dec/15/pip/

1
ответ дан 29 November 2019 в 00:01
поделиться
Другие вопросы по тегам:

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