Al subir un archivo azure devops usando Push API, el objeto '' no existe.' se muestra "typeName":"Microsoft.TeamFoundation. Git

Estoy tratando de añadir un archivo en la carpeta de respos usando debajo de API:

ado_req_headers_ATT = {'Content-Type':'application/octet-stream'}
Get_Branch_url = str(organization_url)+str('/_apis/git/repositories/')+str(ReposID)+str('/refs?filter=heads/&api-version=6.0')
print(Get_Branch_url)
Get_Branch_Details = requests.get(url=Get_Branch_url,headers=ado_req_headers_ATT,auth=('',ADO_AUTH_PAT))
#print(Get_Branch_Details.status_code)
print(Get_Branch_Details.text)
Get_Branch_Details=Get_Branch_Details.json()
for item in Get_Branch_Details["value"]:
    if item["name"] == **'refs/heads/XXX'**:
        old_object_ID = item["objectId"]
        old_object_name= item["name"]
print(old_object_name,":-",old_object_ID) **## Prints refs/heads/XXX : YYYYYYYYYYYYYYYYYYYYYY**

La respuesta para la url anterior incluye:

    {
  "value": [
{...
  **"name": "refs/heads/XXX",
  "objectId": "YYYYYYYYYYYYYYYYYYYYYY",**
  "creator": {
    "displayName": "AAAAAAAAAA",
    "url": "https://spsprodsin1.vssps.visualstudio.com/UUUUUU",
    "_links": {
      "avatar": {
        "href": "https://dev.azure.com/TTTTTT"
      }
    },
    "id": "MMMMMMMMM",
    "uniqueName": "PPPPPPPP",

Y tratar este ID de objetos: YYYYYYYYYYYYYYYYYYYYYYYYYYY como antiguo ObjectID y tratando de empujar un archivo en la ruta: refs/heads/XXX utilizando a continuación API:

###### Push a File in  Ref_Devops-dev ###############################
ado_req_headers_ATT = {"Content-Type":"application/json-patch+json"}
push_file_url = str(organization_url)+str('/_apis/git/repositories/')+str(ReposID)+str('/pushes?api-version=6.0')
Body_data = {"refUpdates": [{"name": refs/heads/XXX,"oldObjectId":YYYYYYYYYYYYYYYYYYYYYY}],"commits":[{"comment": "Added text file.","changes":[{"changeType": "add","item": {"path":"/test.txt"},"newContent": {"content": "# Tasks\n\n* Item 1\n* Item 2","contentType": "rawtext"}}]}]}
Body_data = json.dumps(Body_data)
print(Body_data)
Push_file= requests.post(url=push_file_url,headers=ado_req_headers_ATT,data=Body_data,auth=('',ADO_AUTH_PAT))
print(Push_file.json())
print(Push_file.status_code)
print(Push_file.text)

Pero la respuesta fue:

{"$id":"1","innerException":null,"message":"TF401035: The object 'YYYYYYYYYYYYYYYYYYYYYY' does not exist.","typeName":"Microsoft.TeamFoundation.Git.Server.GitObjectDoesNotExistException, Microsoft.TeamFoundation.Git.Server","typeKey":"GitObjectDoesNotExistException","errorCode":0,"eventId":3000}

Y sin duda perder un paso final también básico. Cualquier sugerencia pls

Pregunta hecha hace 3 años, 4 meses, 28 días - Por byteninja8245


4 Respuestas:

  • Sobre el error se puede eliminar haciendo referencia a la API de compromiso en lugar de la API mencionada "

    Respondida el Dec 18, 2020 a las 19:29 - por pixelprodigy50bb

    Votos positivos: 0 | Votos negativos: 0

  • obtener el último ID de confirmación.

    Respondida el Dec 18, 2020 a las 19:37 - por algorithmadeptc6cb

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás recibiendo indica que el objeto con el ID "YYYYYYYYYYYYYYYYYYYYYY" no existe en el repositorio de Git de Azure DevOps. Parece que estás intentando utilizar ese ID como el oldObjectId al realizar la operación de push de un archivo.

    Un posible problema podría estar en la forma en la que estás construyendo la URL y el cuerpo de la solicitud de push. Revisa detenidamente el código y asegúrate de que estás pasando correctamente el oldObjectId para que coincida con el objeto correcto en el repositorio.

    Por otro lado, en el cuerpo de la solicitud de push, asegúrate de que estás pasando correctamente el nombre de la referencia (en este caso refs/heads/XXX) como un string y rodeado por comillas dobles en {"name": "refs/heads/XXX"}.

    Además, verifica que tengas los permisos adecuados para realizar la operación de push en el repositorio.

    Finalmente, te recomendaría revisar la documentación de Azure DevOps API para asegurarte de que estás siguiendo correctamente los pasos y utilizando los parámetros requeridos en tu solicitud de push.

    Espero que esta información te sea útil y pueda ayudarte a resolver el problema. ¡Buena suerte!

    Respondida el Dec 19, 2020 a las 19:30 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El error "El objeto 'YYYYYYYYYYYYYYYYYYYYYY' no existe" indica que el objeto especificado como oldObjectId en la solicitud de inserción no existe en el repositorio. Esto puede suceder si el objeto fue eliminado o si se especificó un identificador de objeto incorrecto.

    Para resolver este problema, asegúrate de que el oldObjectId especificado sea correcto. Puedes obtener el oldObjectId correcto consultando la API de Git de Azure DevOps para el objeto correspondiente. Aquí tienes un ejemplo de cómo hacerlo:

    
    import requests
    
    

    Reemplaza estos valores con los tuyos

    organization_url = "https://dev.azure.com/your-organization" ReposID = "your-repo-id" ADO_AUTH_PAT = "your-ADO-personal-access-token" refs = "refs/heads/XXX" ado_req_headers = {'Content-Type':'application/octet-stream'} get_branch_url = f"{organization_url}/_apis/git/repositories/{ReposID}/refs?filter=heads/{refs}&api-version=6.0" get_branch_details = requests.get(url=get_branch_url, headers=ado_req_headers, auth=('', ADO_AUTH_PAT)) get_branch_details = get_branch_details.json() for item in get_branch_details["value"]: if item["name"] == refs: old_object_id = item["objectId"] break print("old_object_id:", old_object_id)

    Una vez que tengas el oldObjectId correcto, puedes utilizarlo en la solicitud de inserción. Aquí tienes un ejemplo actualizado de tu código:

    
    

    Reemplaza YYYYYYYYYYYYYYYYYYYYYYYYYY con el oldObjectId correcto

    Body_data = {"refUpdates": [{"name": "refs/heads/XXX","oldObjectId": "YYYYYYYYYYYYYYYYYYYYYY"}, ...]}

    Respondida el Dec 19, 2020 a las 19:35 - por Gemini

    Votos positivos: 0 | Votos negativos: 0