Extrae la URL de la respuesta remota de git push

Cuando envío mis cambios a nuestro server Bitbucket, junto con las statistics habituales, el server responde con varias líneas precedidas por 'remote:'. Una de esas líneas contiene una URL a pocas diferencias para la twig presionada y crea una request de extracción. Actualmente, destaco la URL y la copio / pego en una window del browser para crear mi request de extracción, pero estoy buscando acelerar ese process. ¿Hay alguna forma de extraer la URL y pasarla a 'clip' para savela en el portapapeles como parte de un alias git?

También pensé en tratar de volver a crear la URL usando una combinación del nombre de la sucursal actual y la URL remota, pero hay varias diferencias entre la URL remota y la URL de la request de extracción por lo que parecía más fácil extraer la URL en lugar de volver crearlo

Counting objects: 47, done. Delta compression using up to 8 threads. Compressing objects: 100% (45/45), done. Writing objects: 100% (47/47), 12.81 KiB | 0 bytes/s, done. Total 47 (delta 40), reused 3 (delta 2) remote: remote: Create pull request for feature/somefeature: remote: https://code.ourbitbucketserver.com/projects/myteam/repos/somerepo/compare/commits?sourceBranch=refs/heads/feature/somefeature remote: To https://code.ourbitbucketserver.com/scm/myteam/somerepo.git * [new branch] feature/somefeature -> feature/somefeature Branch feature/somefeature set up to track remote branch feature/somefeature from origin. 

Solución

 bcurrent = "!git rev-parse --abbrev-ref HEAD" publishold = "!f() { git push -u ${1-origin} $(git bcurrent); }; f" publishnew = "!f() { git push -u ${1-origin} $(git bcurrent) --progress 2>&1 | awk '/^remote:.*compare/ { system(\"echo \" $2 \" | clip\") } { print }'; }; f" 

Los alias bcurrent y publishold son los que comencé con reference.

La respuesta aceptada me puso en la dirección correcta. Me encontré con algunos problemas en el path que quiero explicar.

  1. git push muestra parte del post (incluida la url) sobre stderr en lugar de stdout. Entonces tenemos que networkingirigir stderr con 2>&1 . También se agregó el indicador de --progress para que git --progress stderr incluso si no está conectado a la console, ya que estamos conectando la salida a awk. Ver la salida de git stderr no puede canalizar
  2. clip no acepta parameters en la command-line y la input debe ser canalizada dentro de ella.
  3. Como mi git alias es una function de shell, tuve que escaping de las comillas dobles en la llamada al system .

Puedes usar awk en tu alias. Lo siguiente imprimirá la salida por completo y adicionalmente llamará al clip con la URL como argumento:

 echo 'Counting objects: 47, done. Delta compression using up to 8 threads. Compressing objects: 100% (45/45), done. Writing objects: 100% (47/47), 12.81 KiB | 0 bytes/s, done. Total 47 (delta 40), reused 3 (delta 2) remote: remote: Create pull request for feature/somefeature: remote: https://code.ourbitbucketserver.com/projects/myteam/repos/somerepo/compare/commits?sourceBranch=refs/heads/feature/somefeature remote: To https://code.ourbitbucketserver.com/scm/myteam/somerepo.git * [new branch] feature/somefeature -> feature/somefeature Branch feature/somefeature set up to track remote branch feature/somefeature from origin.' | awk '/^remote:.*compare/ { system("clip " $2) } { print }'