

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Copiar paquetes entre repositorios
<a name="copy-package"></a>

Puede copiar versiones de paquetes de un repositorio a otro en CodeArtifact. Esto puede resultar útil en situaciones como los flujos de trabajo de promoción de paquetes o el intercambio de versiones de paquetes entre equipos o proyectos. Los repositorios de origen y destino deben estar en el mismo dominio para copiar versiones de paquetes.

## Permisos de IAM necesarios para copiar paquetes
<a name="copypackageversions-iam-actions"></a>

Para copiar las versiones de los paquetes CodeArtifact, el usuario que realiza la llamada debe tener los permisos de IAM necesarios y la política basada en recursos asociada a los repositorios de origen y destino debe tener los permisos necesarios. Para obtener más información sobre las políticas de permisos y los repositorios basados en recursos, consulte. CodeArtifact [Políticas de repositorios](repo-policies.md)

El usuario que realiza la llamada a `copy-package-versions` debe tener el permiso `ReadFromRepository` en el repositorio de origen y el permiso `CopyPackageVersions` en el repositorio de destino.

El repositorio de origen debe tener permiso el `ReadFromRepository` y el repositorio de destino debe tener el permiso `CopyPackageVersions` asignado a la cuenta de IAM o al usuario que copia los paquetes. Las siguientes políticas son ejemplos de políticas de repositorio que se deben añadir al repositorio de origen o al repositorio de destino con el comando `put-repository-permissions-policy`. *111122223333*Sustitúyalo por el identificador de la cuenta que realiza la llamada. `copy-package-versions`

**nota**  
La llamada `put-repository-permissions-policy` sustituirá a la política de repositorio actual, si existe alguna. Puede usar el comando `get-repository-permissions-policy` para comprobar si existe una política; para obtener más información, consulte [Leer una política](repo-policies.md#reading-a-policy). Si existe una política, es posible que desee agregarle estos permisos en lugar de reemplazarla.

**Ejemplo de política de permisos del repositorio de origen**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "codeartifact:ReadFromRepository"
            ],
            "Effect": "Allow",
            "Principal": {
                 "AWS": "arn:aws:iam::111122223333:root"
            },
            "Resource": "*"
        }
    ]
}
```

------

**Ejemplo de política de permisos del repositorio de destino**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "codeartifact:CopyPackageVersions"
            ],
            "Effect": "Allow",
            "Principal": {
                 "AWS": "arn:aws:iam::111122223333:root"
            },
            "Resource": "*"
        }
    ]
}
```

------

## Copiar versiones de los paquetes
<a name="copy-package-versions"></a>

Use el `copy-package-versions` comando in CodeArtifact para copiar una o más versiones de paquetes de un repositorio de origen a un repositorio de destino del mismo dominio. El siguiente ejemplo copiará las versiones 6.0.2 y 4.0.0 de un paquete npm denominado `my-package` del repositorio `my_repo` al repositorio `repo-2`.

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository my_repo \
 --destination-repository repo-2 --package my-package --format npm \
 --versions 6.0.2 4.0.0
```

Puede copiar varias versiones del mismo nombre de paquete en una sola operación. Para copiar versiones de distintos nombres de paquetes, debe llamar a `copy-package-versions` para cada una.

El comando anterior producirá el siguiente resultado, suponiendo que ambas versiones se hayan copiado correctamente.

```
{
   "successfulVersions": {
        "6.0.2": {
            "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        },
        "4.0.0": {
            "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        }
    },
    "failedVersions": {}
}
```

## Copiar un paquete de los repositorios originales
<a name="copy-package-upstream"></a>

Normalmente, `copy-package-versions` solo busca en el repositorio especificado por la opción `--source-repository` las versiones que desee copiar. Sin embargo, puede copiar versiones tanto del repositorio de origen como de sus repositorios anteriores mediante la opción `--include-from-upstream`. Si usas el CodeArtifact SDK, llama a la `CopyPackageVersions` API con el `includeFromUpstream` parámetro establecido en true. Para obtener más información, consulte [Trabajar con repositorios ascendentes en CodeArtifact](repos-upstream.md).

## Copiar un paquete npm con alcance
<a name="copying-a-scoped-npm-package"></a>

 Para copiar una versión del paquete npm en un alcance, utilice la opción `--namespace` para especificar el alcance. Por ejemplo, para copiar el paquete `@types/react`, utilice `--namespace types`. Se debe omitir el símbolo `@` cuando se utilice `--namespace`.

```
aws codeartifact copy-package-versions  --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \
 --destination-repository repo-2 --format npm --namespace types \
 --package react --versions 0.12.2
```

## Copiar las versiones de los paquetes de Maven
<a name="copying-a-maven-package"></a>

Para copiar versiones de paquetes de Maven entre repositorios, especifique el paquete que desea copiar pasando el ID de grupo de Maven con la opción `--namespace` y el Maven ArtifactID con la opción `--name`. Por ejemplo, para copiar una sola versión de `com.google.guava:guava`:

```
 aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333  \
 --source-repository my_repo --destination-repository repo-2 --format maven --namespace com.google.guava \
 --package guava --versions 27.1-jre
```

Si se copia correctamente la versión del paquete, el resultado será similar al que se incluye a continuación.

```
{
    "successfulVersions": {
        "27.1-jre": {
            "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        }
    },
    "failedVersions": {}
}
```

## Versiones que no existen en el repositorio de origen
<a name="versions-that-do-not-exist-in-the-source-repository"></a>

Si especifica una versión que no existe en el repositorio de origen, se producirá un error en la copia. Si existen algunas versiones en el repositorio de origen y otras no, no se copiarán todas las versiones. En el siguiente ejemplo, la versión 0.2.0 del paquete npm `array-unique` está presente en el repositorio de origen, pero la versión 5.6.7 no:

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \
         --source-repository my_repo --destination-repository repo-2 --format npm \
         --package array-unique --versions 0.2.0 5.6.7
```

El resultado en esta situación será similar al siguiente.

```
{
    "successfulVersions": {},
    "failedVersions": {
        "0.2.0": {
            "errorCode": "SKIPPED",
            "errorMessage": "Version 0.2.0 was skipped"
        },
        "5.6.7": {
            "errorCode": "NOT_FOUND",
            "errorMessage": "Could not find version 5.6.7"
        }
    }
}
```

El código de error `SKIPPED` se usa para indicar que la versión no se copió en el repositorio de destino porque no se pudo copiar otra versión. 

## Versiones que ya existen en el repositorio de destino
<a name="versions-that-already-exist-in-the-destination-repository"></a>

 Cuando la versión de un paquete se copia en un repositorio donde ya existe, CodeArtifact compara los activos del paquete y los metadatos a nivel de versión del paquete en los dos repositorios.

 Si los activos y los metadatos de la versión del paquete son idénticos en los repositorios de origen y destino, no se realiza una copia, pero la operación se considera correcta. Esto significa que `copy-package-versions` es idempotente. Cuando esto ocurre, la versión que ya estaba presente en los repositorios de origen y destino no aparecerá en la salida de `copy-package-versions`.

En el siguiente ejemplo, hay dos versiones del paquete npm `array-unique` en el repositorio de origen `repo-1`. La versión 0.2.1 también está presente en el repositorio de destino `dest-repo` y la versión 0.2.0 no.

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \
         --source-repository my_repo --destination-repository repo-2 --format npm --package array-unique \
         --versions 0.2.1 0.2.0
```

El resultado en esta situación será similar al siguiente.

```
{
    "successfulVersions": {
        "0.2.0": {
            "revision": "Yad+B1QcBq2kdEVrx1E1vSfHJVh8Pr61hBUkoWPGWX0=",
            "status": "Published"
        }
    },
    "failedVersions": {}
}
```

La versión 0.2.0 aparece en la lista `successfulVersions` porque se copió correctamente del repositorio de origen al de destino. La versión 0.2.1 no se muestra en la salida porque ya estaba presente en el repositorio de destino.

 Si los activos o los metadatos de la versión del paquete difieren en los repositorios de origen y destino, la operación de copia fallará. Puede usar el parámetro `--allow-overwrite` para forzar una sobrescritura. 

Si existen algunas versiones en el repositorio de destino y otras no, no se copiarán todas las versiones. En el siguiente ejemplo, la versión 0.3.2 del paquete npm `array-unique` está presente en los repositorios de origen y de destino, pero el contenido de la versión del paquete es diferente. La versión 0.2.1 está presente en el repositorio de origen pero no en el de destino.

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \
         --source-repository my_repo --destination-repository repo-2 --format npm --package array-unique \
         --versions 0.3.2 0.2.1
```

El resultado en esta situación será similar al siguiente.

```
{
    "successfulVersions": {},
    "failedVersions": {
        "0.2.1": {
            "errorCode": "SKIPPED",
            "errorMessage": "Version 0.2.1 was skipped"
        },
        "0.3.2": {
            "errorCode": "ALREADY_EXISTS",
            "errorMessage": "Version 0.3.2 already exists"
        }
    }
}
```

La versión 0.2.1 está marcada como `SKIPPED` porque no se copió en el repositorio de destino. No se copió porque la copia de la versión 0.3.2 falló porque ya estaba presente en el repositorio de destino, pero no era idéntica en los repositorios de origen y destino.

## Especificación de una versión de paquete
<a name="specify-package-version-revision"></a>

 La revisión de la versión de un paquete es una cadena que especifica un conjunto específico de activos y metadatos para una versión de paquete. Puede especificar una revisión de la versión del paquete para copiar las versiones del paquete que se encuentran en un estado específico. Para especificar una revisión de la versión del paquete, utilice el parámetro `--version-revisions` para pasar una o más versiones del paquete separadas por comas y los pares de revisión de la versión del paquete al comando `copy-package-versions`. 

**nota**  
Debe especificar el parámetro `--versions` o `--version-revisions` con `copy-package-versions`. No puede especificar ambos. 

El siguiente ejemplo solo copiará la versión 0.3.2 del paquete `my-package` si está presente en el repositorio de origen con la versión revisada del paquete `REVISION-1-SAMPLE-6C81EFF7DA55CC`.

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \
 --destination-repository repo-2 --format npm --namespace my-namespace \
 --package my-package --version-revisions 0.3.2=REVISION-1-SAMPLE-6C81EFF7DA55CC
```

En el siguiente ejemplo, se copian dos versiones del paquete `my-package`, la 0.3.2 y la 0.3.13. La copia solo se realizará correctamente si en el repositorio de origen la versión 0.3.2 de `my-package` tiene una revisión `REVISION-1-SAMPLE-6C81EFF7DA55CC` y la versión 0.3.13 tiene una revisión `REVISION-2-SAMPLE-55C752BEE772FC`.

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \
 --destination-repository repo-2 --format npm --namespace my-namespace \
 --package my-package --version-revisions 0.3.2=REVISION-1-SAMPLE-6C81EFF7DA55CC,0.3.13=REVISION-2-SAMPLE-55C752BEE772FC
```

 Para buscar las revisiones de una versión de paquete, utilice el comando `describe-package-version` o `list-package-versions`. 

 Para obtener más información consulte [Revisión de la versión del paquete](codeartifact-concepts.md#welcome-concepts-package-version-revision) y [CopyPackageVersion](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_CopyPackageVersions.html) en la *Referencia de la API de CodeArtifact *. 

## Copiar paquetes npm
<a name="copying-npm-packages"></a>

 Para obtener más información sobre `copy-package-versions` el comportamiento de los paquetes npm, consulta las [etiquetas npm y](npm-tags.md#tags-and-cpv) la API. CopyPackageVersions 