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
.
- 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?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
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.
Jeśli chcesz zautomatyzować go za pomocą Grunt, jest to całkiem proste. Tak to zrobiłem:
- najpierw pobierz x1011
deploy.sh
do głównego folderu projektu. - postępuj zgodnie z krótkim przewodnikiem konfiguracji i konfiguracji.
- zainstaluj
grunt-shell
z node za pomocÄ… tego polecenia:npm install grunt-shell --save-dev
(--save-dev
dodagrunt-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. - W
Gruntfile.js
Dodaj następujący obiekt doinitConfig
:
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');
}
});
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