Creando una list de todas las confirmaciones desde las cuales se ha creado una twig usando bash

Estoy buscando una list que contenga:

  • Fecha
  • Nombre de la twig

Para todas las twigs que salen de 'desarrollar' con 'liberación' en el nombre.

Similar a

2014-03-11 10:52:04 +0100 9 months ago release-1.0 2014-03-28 10:33:23 +0100 8 months ago release-2.0 2014-04-02 10:40:59 +0200 8 months ago release-3.0 2014-04-18 17:01:54 +0200 8 months ago release-3.0.1 2014-05-05 15:25:31 +0200 7 months ago release-3.0.2 

He encontrado varias respuestas que realmente me han ayudado, y ahora estoy tropezando con la syntax. La información útil fue:

  • Encontrar la queue
  • Mostrar twigs git activas por date (tenga en count que estoy buscando la confirmación en la que se realizó la twig)
  • Este comentario en otra publicación

Hasta ahora tengo lo siguiente como un alias en bash

 for k in `git branch|sed s/^..//`; do echo -e `git log -1 --pretty=format:"%Cgreen%ci %Cblue%cr %Creset" <(`diff -u <(git rev-list --first-parent "$k") <(git rev-list --first-parent develop)|sed -ne '"'"'s/^ //p'"'"'|head -1`) --`\\t"$k"; done|sort;' 

ejecutar cada parte de esto funciona individualmente. Pero no del todo.

Entonces estos funcionan:

  • git branch|sed s/^..//
  • git log -1 --pretty=format:"%Cgreen%ci %Cblue%cr %Creset" release-3.0
  • diff -u <(git rev-list --first-parent release-3.0) <(git rev-list --first-parent develop)

Pero no cuando los puse juntos.

¿Ayuda?

No puede anidar commands backtick como este:

 echo `echo foo `echo bar` baz` 

Para anidar necesitas usar la syntax de $() más preferible).

Tampoco necesitas backticks dentro de un <( ... )

a less que desee que la sustitución ejecute la salida del command ... lugar del command ... mismo.

Intente algo más así:

 for k in $(git branch|sed s/^..//); do echo -e $(git log -1 --pretty=format:"%Cgreen%ci %Cblue%cr %Creset" <(`diff -u <(git rev-list --first-parent "$k") <(git rev-list --first-parent develop)|sed -ne '"'"'s/^ //p'"'"'|head -1`) --)\\t"$k"; done|sort;' 

O sin los <() backticks

 for k in $(git branch|sed s/^..//); do echo -e $(git log -1 --pretty=format:"%Cgreen%ci %Cblue%cr %Creset" <(diff -u <(git rev-list --first-parent "$k") <(git rev-list --first-parent develop)|sed -ne '"'"'s/^ //p'"'"'|head -1) --)\\t"$k"; done|sort;' 

Además, no creo que deba usar echo -e aquí, ya que probablemente solo pueda poner \t$k en la cadena de formatting de git log directamente.

 for k in $(git branch|sed s/^..//); do git log -1 --pretty=format:"%Cgreen%ci %Cblue%cr %Creset"$'\t'"$k" <(diff -u <(git rev-list --first-parent "$k") <(git rev-list --first-parent develop)|sed -ne '"'"'s/^ //p'"'"'|head -1) --; done|sort;' 

Lo cual, suponiendo que lo haya hecho bien, parece que está intentando alimentar a git log la revisión para que se registre desde la input estándar, pero no creo que git log tome la input de esa manera. Entonces, necesitarías convertirlo en un argumento.

 for k in $(git branch|sed s/^..//); do git log -1 --pretty=format:"%Cgreen%ci %Cblue%cr %Creset"$'\t'"$k" "$(diff -u <(git rev-list --first-parent "$k") <(git rev-list --first-parent develop)|sed -ne '"'"'s/^ //p'"'"'|head -1)" --; done|sort;' 

Y probablemente también puedas deshacerte de ese colgante.