Jak zresetować repozytorium Heroku git do stanu początkowego?

Mam aplikację webową w repozytorium git. Z przyczyn historycznych aplikacja webowa nie znajduje się w katalogu głównym repozytorium, lecz znajduje się w folderze o nazwie website. Poza tym są jeszcze inne foldery, więc mam następującą strukturę:

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

Strona jest prowadzona na Heroku. Ponieważ Heroku domaga się, aby Twoja aplikacja webowa znajdowała się w katalogu głównym repozytorium git, do tej pory używałem procesu budowania, który skopiował folder website do zupełnie innego (zewnętrznego) folder z własnym repozytorium git. Potem udało mi się przerzucić stamtąd do Heroku i wszystko było w porządku.

Teraz, ponieważ git zawiera polecenie subtree, nie jest to już konieczne, ponieważ mogłem bezpośrednio wypchnąć z mojego początkowego folderu, ale tylko website pod-folder, używając:

git subtree push --prefix=website heroku master

Zasadniczo, to działa idealnie. Mam tylko jeden problem: ponieważ poprzednie commity do Heroku pochodzą z zupełnie innego repozytorium git, historia obu tych commitów nie pasuje do siebie - więc Heroku wykrywa Nie-szybkie pchnięcie do przodu i odrzuca pchnięcie subtree.

Jak sobie z tym poradzić?
  • Idea 1: pchanie siÅ‚Ä…. PróbowaÅ‚em, ale nie dziaÅ‚a, ponieważ git subtree push nie ma opcji --force (lub czegoÅ› podobnego).
  • Idea 2: Wyczyść repozytorium Heroku i zacznij od nowa.

Chciałbym wybrać pomysł 2, ale nie mam pojęcia, jak to osiągnąć.

Moim pierwszym podejściem było uruchomienie git push heroku :master, ale Heroku wykrywa to i zaprzecza to.

Oczywiście, mógłbym zniszczyć aplikację i odtworzyć ją, ale wtedy wszystkie przypisania domeny i Dodatki również zniknęły, i chciałbym tego uniknąć.

Jakieś inne pomysły?
 18
Author: Golo Roden, 2012-09-28

2 answers

Możesz zagnieżdżać polecenia git, aby wykonać force push.

W Twoim przypadku komenda będzie brzmiała:

git push heroku `git subtree split --prefix website master`:master --force
 42
Author: Ivan Saskor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-15 18:10:58

Dla tych, którzy przychodzą tutaj z Poradnika rozmieszczenia Yeoman (brak) {23]}, jest o wiele lepsze i łatwiejsze rozwiązanie {23]} opracowane przez X1011 {23]} i zachęcam was wszystkich, abyście ułatwili sobie życie i z niego korzystali!

W przeciwieństwie do już podatnej na problemy metody poddrzew, ten skrypt w rzeczywistości zachowuje historię zmian delty na Twoim dist/build/release branch - i nie musisz nawet śledzić folderu dist w swoim rozwoju gałęzie.

Proces konfiguracji może wyglądać onieśmielająco, ale uwierz mi, nie jest. Konfiguracja zajęła mi mniej niż 10 minut i po prostu działała zgodnie z obietnicą przy pierwszym uruchomieniu, nawet na komputerze z systemem Windows.

Jeśli chcesz zautomatyzować go za pomocą Grunt, jest to całkiem proste. Tak to zrobiłem:

  1. najpierw pobierz x1011 deploy.sh do głównego folderu projektu.
  2. postępuj zgodnie z krótkim przewodnikiem konfiguracji i konfiguracji.
  3. zainstaluj grunt-shell z node za pomocą tego polecenia: npm install grunt-shell --save-dev (--save-dev doda grunt-shell do zależności dev twojego projektu, jeśli jeszcze nie wiesz). Możesz również użyć grunt-exec, W zasadzie robią to samo, AFAIK.
  4. W Gruntfile.js Dodaj następujący obiekt do initConfig:

Dodaj do initConfig obiekt

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

5 . Zarejestruj nowe zadanie lub dodaj je do istniejącego zadania build (Upewnij się, że zadeklarowałeś parametr target):

Dodaj do istniejÄ…cego zadania budowania jako grunt build:deploy

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

Samodzielne zadanie grunt deploy, także pozwala na flagę --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');
  }
});
 2
Author: pilau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-04 07:21:18