Alias ​​no produce el resultado esperado

En mi .bashrc tengo la siguiente configuration de alias:

alias sitebuild='bundle exec jekyll build; git checkout gh-pages; git rm * && mkdir temp && mv * temp/ && mv temp/_site/* . && rm -rf temp && touch .nojekyll; git status; git add .; git commit -am "update"; git push --all origin' 

Un poco de explicación sobre por qué quiero hacer esto: estoy construyendo un sitio usando Jekyll y gh-pages , excepto que he comenzado a usar complementos no soportados por GitHub y entonces tengo que build el sitio localmente y empujarlo al repository (en lugar de dejar que GH construya el sitio para mí de forma remota).

Mi sistema es el siguiente: trabajo en mi sitio en la twig static_build , static_build mis commits y construyo _site/ (conteniendo todo el HTML final). Entonces necesito copyr el contenido de static_build:_site/ over a gh-pages:_site/ y presionar eso y solo .

Por lo que yo entiendo, el command anterior sitebuild debería hacer eso por mí (y de hecho lo hace cuando ejecuto cada argumento por separado en el shell ); sin embargo, no es así.

¿Alguna idea de por qué?


EDITAR: tengo la sensación de que podría tener que ver con

 mv * temp/ 

que, cuando ejecuto cada command individualmente, los resultados

 mv: rename temp to temp/temp: Invalid argument 

Parece que en este caso el terminal se queja pero sigue cumpliendo (muestra que solo queda temp en el directory), pero quizás esto ya no sea cierto cuando se ejecuta el alias.

EDIT 2: usando en su lugar

 mv `ls -A | grep -v temp` ./temp 

resuelve el error de mover la carpeta dentro de sí mismo, pero no el problema principal.

Como se señala en los comentarios, un problema (si no el problema) es el bash de mover la temp hacia sí mismo. Una forma de evitar eso (y replace su alias por una function de shell) es hacer de su directory temporal algo que * no coincidirá. Asumiendo que no estás usando la opción de dotglob bash :

 sitebuild () { bundle exec jekyll build git checkout gh-pages git rm * -r --ignore-unmatch && mkdir .temp && mv * .temp/ && mv .temp/_site/* . && rm -rf .temp && touch .nojekyll git status git add . git commit -am "update" git push --all origin } 

[automáticamente] construyendo un sitio usando Jekyll y gh-pages (…) localmente y enviándolo al repository

Problema de temp OP

primero, creo que el uso de la temp sí es una fuente susceptible de problemas

 mv * .temp/ && mv .temp/_site/* . # keep the generated _site folder && rm -rf .temp # and remove ALL the jekyll sources! && touch .nojekyll` 

ejecutar el command anterior desde la carpeta fuente eliminará todas las fonts necesarias para rebuild el sitio.

Solución general

  1. compilation desde la carpeta de origen: ./
  2. vaya a la carpeta de destino: _site/ , y _site/ su contenido a su deploy_branch: gh-pages
  3. opcionalmente, regrese a la carpeta fuente, twig fuente: static_build

con el siguiente command:

 # 1 bundle exec jekyll build # 2 && cd _site && git checkout -b gh-pages && touch .nojekyll && git add . && git commit -am "update" && git push origin gh-pages # 3 && cd ../ && git checkout -b static_build 

(a un lado: el command anterior debe ser de una sola línea, elimine el # y elimine el line break o escape con \ para que funcione)

para una explicación detallada de Cómo configurar GitHub para usar complementos de sitios Jekyll no compatibles, verifique esta respuesta SO

+ automatizar el process de implementación con Rake .

rake es un progtwig simple de creación de ruby, que le dará más control sobre las tareas de construcción. para que pueda salir temprano en caso de error, o no actualice si el repository de git está limpio.

  • agregue un Rakefile a la carpeta principal
  • definir sus tareas dentro de él (por ejemplo, deploy tarea)
  • implementar rake deploy o simplemente rake si definió "deploy" como tarea pnetworkingeterminada.

por ejemplo, un simple Rakefile que puede ayudarlo a hacer lo anterior.

 # == Helpers ====================================== # return `false` in case of error # `nil` if git output doesn't contain "clean" # "clean" (a truthy value) if it contains it def clean? puts status = `git status` clean = ($? == 0) && status.match(/clean/) end # == Tasks ======================================== task :build do system "bundle exec jekyll build" end task :deploy => [:build] do Dir.chdir("_site") do system "git checkout -b gh-pages" exit if clean? == false unless clean? system "git add . && git commit -am 'update'" end system "git push --all origin" end end