Подтвердить что ты не робот

Как reset хранилище Heroku git в исходное состояние?

У меня есть веб-приложение в репозитории git. По историческим причинам веб-приложение не находится в корне репозитория, оно находится в папке с именем website. Кроме того, есть несколько других папок, так что у меня есть следующая структура:

myApp
+- .git
+- otherFolder1
+- otherFolder2
+- otherFolder...
+- otherFolderN
+- website

Веб-сайт работает на Heroku. Поскольку Heroku требует, чтобы ваше веб-приложение находилось в корне репозитория git, до сих пор я использовал процесс сборки, который скопировал папку website в совершенно другую (внешнюю) папку со своим собственным хранилищем git. Тогда я смог оттолкнуть оттуда в Хереку, и все было в порядке.

Теперь, поскольку git включает в себя команду subtree, это больше не нужно, поскольку я мог напрямую нажать из своей начальной папки, но только подпапку website, используя:

git subtree push --prefix=website heroku master

В принципе, это работает отлично. У меня только одна проблема: поскольку предыдущие коммиты в Heroku пришли из совершенно другого репозитория git, история обоих не совпадает друг с другом - поэтому Heroku обнаруживает непереходное нажатие и отклоняет subtree толчок.

Итак, как мне с этим справиться?

  • Идея 1: принудительное нажатие. Пробовал это, но не работает, поскольку git subtree push не имеет опции --force (или ничего подобного).
  • Идея 2: Очистить хранилище Heroku и начать с нуля.

Мне бы хотелось пойти с идеей 2, но я понятия не имею, как этого добиться.

Мой первый подход состоял в том, чтобы запустить git push heroku :master, но Heroku обнаруживает это и отрицает его.

Конечно, я мог бы уничтожить приложение и воссоздать его, но тогда все назначения и дополнения домена исчезли, и я хотел бы избежать этого.

Любые другие идеи?

4b9b3361

Ответ 1

Вы можете вложить команды git для принудительного нажатия.

В вашем случае команда будет:

git push heroku `git subtree split --prefix website master`:master --force

Ответ 2

Для тех, кто приехал сюда из Yeoman (отсутствует) руководство по развертыванию, там намного, намного лучше и проще решение, разработанное X1011, и я призываю всех вас упростить вашу жизнь и использовать ее!

В отличие от уже подверженного методу поддерева, этот script на самом деле сохраняет историю развития дельта-истории развития на ветке dist/build/release - и, вы даже не нужно отслеживать папку dist в ветвях разработки.

Процесс установки может выглядеть пугающе, но, поверьте, это не так. Мне потребовалось менее 10 минут, чтобы настроить, и он просто работал как обещано в первом запуске даже на машине под Windows.

Если вы хотите автоматизировать его с помощью Grunt, это довольно просто. Вот как я это сделал:

  • Сначала загрузите X1011 deploy.sh в свою основную папку проекта.
  • Следуйте краткой инструкции по настройке и настройке.
  • Установите grunt-shell с помощью node с помощью этой команды: npm install grunt-shell --save-dev (--save-dev добавит grunt-shell к вашим зависимостям проекта dev, если вы еще этого не знаете). Вы также можете использовать grunt-exec, они в основном делают то же самое, AFAIK.
  • В Gruntfile.js добавьте следующий объект в initConfig:

Добавить в initConfig объект

    shell: {
        deployverbose: {
          command: 'sh deploy.sh -v',
          options: {
              stdout: true,
              stderr: true
          }
        },
        deploy: {
          command: 'sh deploy.sh',
          options: {
              stdout: true,
              stderr: true
          }
        }
    }

5. Зарегистрируйте новую задачу или добавьте ее в существующую задачу build (убедитесь, что вы объявили параметр target):

Добавить в существующую задачу сборки как grunt build:deploy

if (target && target.indexOf('deploy') > -1) {
  tasks.push('deploy');
}

Автономная задача grunt deploy, также позволяет флаг --verbose:

grunt.registerTask('deploy', 'standalone deploy command', function () {
  if (grunt.option.flags().indexOf('--verbose') > -1) {
    grunt.task.run('shell:deployverbose');
  } else {
    grunt.task.run('shell:deploy');
  }
});