Как сбросить репозиторий Heroku git в исходное состояние?

17

У меня есть веб-приложение в репозитории 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 обнаруживает немедленный push-push и отклоняет push subtree .

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

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

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

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

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

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

    
задан Golo Roden 28.09.2012 в 19:43
источник

2 ответа

39

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

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

git push heroku 'git subtree split --prefix website master':master --force
    
ответ дан Ivan Saskor 15.11.2012 в 19:10
источник
2

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

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

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

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

  1. Сначала загрузите X1011 deploy.sh в основную папку проекта.
  2. Следуйте краткой инструкции по настройке и настройке.
  3. Установите grunt-shell с узлом с помощью этой команды: npm install grunt-shell --save-dev ( --save-dev добавит grunt-shell к зависимостям dev вашего проекта, если вы еще этого не знаете). Вы также можете использовать grunt-exec , они в основном делают то же самое, AFAIK.
  4. В 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');
  }
});
    
ответ дан pilau 15.10.2013 в 08:29
источник