¿Cómo puedo diferenciar dos ramas de git en la canalización de bitbucket?

3 minutos de lectura

avatar de usuario de evexoio
evexoio

Fondo

Quiero asegurarme de que todos los mensajes de confirmación en la rama empujada tengan una hora de inicio de sesión

es decir. add readme /spend 5m

Problema

Quiero obtener la diferencia de confirmación entre dos ramas de git en la canalización de bitbucket,

esta es la configuración de mi canalización yaml:

pipelines:
  default:
    - step:
        script:
          - git log $BITBUCKET_BRANCH --oneline --not master

$BITBUCKET_BRANCH es la rama en la que actúa la canalización.

pero la canalización devuelve un error al intentar comparar con el maestro

+ git log $BITBUCKET_BRANCH --oneline --not master
fatal: ambiguous argument 'master': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

Tenga en cuenta que el paso de configuración en la tubería (esto está predefinido por bitbucket y no puedo cambiarlo)

git clone --branch="abdullah-s/bitbucketpipelinesyml-created-online-wit-1489917130851" --depth 50 https://x-token-auth:$REPOSITORY_OAUTH_ACCESS_TOKEN@bitbucket.org/abdullah-s/webook.git $BUILD_DIR;
git reset --hard ac61f080a28428bdd885735374164577a2b0aa43;
git remote set-url origin git@bitbucket.org:abdullah-s/webook.git

en el primer comando de la configuración, bitbucket está clonando solo una rama de mi repositorio

lo que probé

Traté de tirar del maestro

- git checkout -b master
- git pull origin master
- git log $BITBUCKET_BRANCH --oneline --not master

pero obtuve un error

+ git pull origin master
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

Pregunta

¿Cómo puedo comparar dos sucursales en la canalización de bitbucket?

Como señala correctamente, las canalizaciones de Bitbucket solo clonarán la rama específica que activó la compilación.

Como tal, el RefSpec se establecerá en la rama específica y no podrá fusionar o diferenciar otras ramas.

Por ejemplo, si la compilación se activó en la rama de desarrollo, se establecerá la siguiente especificación de referencia:

[remote "origin"]
    url = git@bitbucket.org:xxxxxx
    fetch = +refs/heads/develop:refs/remotes/origin/develop
[branch "develop"]
    remote = origin
    merge = refs/heads/develop

Si miras las sucursales disponibles verás esto:

+ git branch -a
* develop
  remotes/origin/develop

Puede ejecutar el siguiente comando:

git fetch origin "+refs/heads/*:refs/remotes/origin/*"

para extraer todas las demás ramas/etiquetas

From bitbucket.org:xxxx/xxxxx
 * [new branch]      master     -> origin/master
 * [new branch]      release    -> origin/release
 * [new tag]         xxxx -> xxxx

  • Gracias esto funcionó como un encanto! También agregué estos dos comandos a mi bitbucket-pipelines.yml expediente: - git fetch origin "+refs/heads/*:refs/remotes/origin/*" - git diff --name-status origin/master origin/development Suponiendo que la rama adicional a comparar fuera “desarrollo”

    – Marco Z.

    9 sep 2019 a las 23:22


  • todavía tengo fatal: ambiguous argument 'master': unknown revision or path not in the working tree. cuando hago un git diff master ./someFile.txt

    – Chris F.

    10 de diciembre de 2019 a las 0:23


  • Esta respuesta me ha salvado de un pozo de desesperación. ¡Gracias!

    – mikelong

    23 de octubre de 2020 a las 6:45

  • Debería marcarse como respuesta correcta, ¡muchas gracias!

    – artístico

    6 de febrero a las 20:55

No tengo la respuesta completa para su pregunta, pero solo una pista: puede evitar el problema de permisos almacenando su contraseña como variable de entorno SECRET y luego identificar la tubería como usted mismo cuando extraiga.

https://confluence.atlassian.com/bitbucket/environment-variables-794502608.html

  • Lo intentaré cuando vuelva y te respondo, gracias

    – evexoio

    04/04/2017 a las 10:45

¿Ha sido útil esta solución?