

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Copiar pacotes entre repositórios
<a name="copy-package"></a>

Você pode copiar versões de pacotes de um repositório para outro no CodeArtifact. Isso pode ser útil para cenários como fluxos de trabalho de promoção de pacotes ou compartilhamento de versões de pacotes entre equipes ou projetos. Os repositórios de origem e de destino devem ter o mesmo domínio para copiar versões de pacotes.

## Permissões obrigatórias do IAM para copiar pacotes
<a name="copypackageversions-iam-actions"></a>

Para copiar as versões do pacote CodeArtifact, o usuário chamador deve ter as permissões necessárias do IAM e a política baseada em recursos anexada aos repositórios de origem e destino deve ter as permissões necessárias. Para obter mais informações sobre políticas e CodeArtifact repositórios de permissões com base em recursos, consulte. [Políticas de repositório](repo-policies.md)

O usuário que está chamando `copy-package-versions` deve ter a permissão `ReadFromRepository` no repositório de origem e a permissão `CopyPackageVersions` no repositório de destino.

O repositório de origem deve ter a permissão `ReadFromRepository` e o repositório de destino deve ter a permissão `CopyPackageVersions` atribuída à conta do IAM ou ao usuário que copia pacotes. As políticas a seguir são exemplos de políticas de repositório a serem adicionadas ao repositório de origem ou ao repositório de destino com o comando `put-repository-permissions-policy`. *111122223333*Substitua pelo ID da conta que está ligando`copy-package-versions`.

**nota**  
Chamar `put-repository-permissions-policy` substituirá a política atual do repositório, se houver. Você pode usar o comando `get-repository-permissions-policy` para ver se existe uma política. Para obter mais informações, consulte [Ler uma política](repo-policies.md#reading-a-policy). Se existir uma política, talvez você queira adicionar essas permissões a ela em vez de substituí-la.

**Exemplo de política de permissões do repositório de origem**

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

****  

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

------

**Exemplo de política de permissões do repositório de destino**

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

****  

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

------

## Copiar versões do pacote
<a name="copy-package-versions"></a>

Use o `copy-package-versions` comando in CodeArtifact para copiar uma ou mais versões do pacote de um repositório de origem para um repositório de destino no mesmo domínio. O exemplo a seguir copiará as versões 6.0.2 e 4.0.0 de um pacote npm chamado `my-package` do repositório `my_repo` para o repositório `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
```

Copie várias versões do mesmo nome de pacote em uma única operação. Para copiar versões de nomes de pacotes diferentes, você deve chamar `copy-package-versions` para cada um deles.

O comando anterior produzirá a seguinte saída, supondo que ambas as versões possam ser copiadas com sucesso.

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

## Copiar um pacote dos repositórios upstream
<a name="copy-package-upstream"></a>

Normalmente, `copy-package-versions` só procura no repositório especificado pela opção `--source-repository` as versões a serem copiadas. No entanto, você pode copiar versões do repositório de origem e dos repositórios upstream usando a opção `--include-from-upstream`. Se você usa o CodeArtifact SDK, chame a `CopyPackageVersions` API com o `includeFromUpstream` parâmetro definido como true. Para obter mais informações, consulte [Trabalhando com repositórios upstream em CodeArtifact](repos-upstream.md).

## Copiar um pacote npm com escopo definido
<a name="copying-a-scoped-npm-package"></a>

 Para copiar uma versão do pacote npm em um escopo, use a opção `--namespace` para especificar o escopo. Por exemplo, para copiar o pacote `@types/react`, use `--namespace types`. O símbolo `@` deve ser omitido ao usar `--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 versões do pacote Maven
<a name="copying-a-maven-package"></a>

Para copiar versões do pacote Maven entre repositórios, especifique o pacote a ser copiado passando o ID do grupo Maven com a opção `--namespace` e o artifactID Maven com a opção `--name`. Por exemplo, para copiar uma única versão 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
```

Se a versão do pacote for copiada com sucesso, o resultado será semelhante ao seguinte.

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

## Versões que não existem no repositório de origem
<a name="versions-that-do-not-exist-in-the-source-repository"></a>

Se você especificar uma versão que não existe no repositório de origem, a cópia falhará. Se existirem algumas versões no repositório de origem e outras não existirem, nenhuma versão será copiada. No exemplo a seguir, a versão 0.2.0 do pacote npm do `array-unique` está presente no repositório de origem, mas a versão 5.6.7 não está:

```
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
```

A saída neste cenário será semelhante ao seguinte:

```
{
    "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"
        }
    }
}
```

O código de erro `SKIPPED` é usado para indicar que a versão não foi copiada para o repositório de destino porque outra versão não pôde ser copiada. 

## Versões que já existem no repositório de destino
<a name="versions-that-already-exist-in-the-destination-repository"></a>

 Quando uma versão do pacote é copiada para um repositório onde ela já existe, CodeArtifact compara os ativos do pacote e os metadados do nível da versão do pacote nos dois repositórios.

 Se os ativos e metadados da versão do pacote forem idênticos nos repositórios de origem e de destino, uma cópia não será executada, mas a operação será considerada bem-sucedida. Isso significa que `copy-package-versions` é idempotente. Quando isso ocorrer, a versão que já estava presente nos repositórios de origem e de destino não será listada na saída do`copy-package-versions`.

No exemplo a seguir, duas versões do pacote npm `array-unique` estão presentes no repositório de origem `repo-1`. A versão 0.2.1 também está presente no repositório de destino `dest-repo` e a versão 0.2.0 não está.

```
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
```

A saída neste cenário será semelhante ao seguinte:

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

A versão 0.2.0 está listada no `successfulVersions` porque foi copiada com sucesso do repositório de origem para o de destino. A versão 0.2.1 não é mostrada na saída, pois já estava presente no repositório de destino.

 Se os ativos ou metadados da versão do pacote forem diferentes nos repositórios de origem e de destino, a operação de cópia falhará. Você pode usar o parâmetro `--allow-overwrite` para forçar uma substituição. 

Se existirem algumas versões no repositório de destino e outras não existirem, nenhuma versão será copiada. No exemplo a seguir, a versão 0.3.2 do pacote npm `array-unique` está presente nos repositórios de origem e de destino, mas o conteúdo da versão do pacote é diferente. A versão 0.2.1 está presente no repositório de origem, mas não no 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
```

A saída neste cenário será semelhante ao seguinte:

```
{
    "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"
        }
    }
}
```

A versão 0.2.1 está marcada como `SKIPPED` porque não foi copiada para o repositório de destino. Ela não foi copiada porque a cópia da versão 0.3.2 falhou porque ela já estava presente no repositório de destino, mas não era idêntica nos repositórios de origem e de destino.

## Especificar uma revisão da versão do pacote
<a name="specify-package-version-revision"></a>

 A revisão da versão do pacote é uma string que especifica um determinado conjunto de ativos e metadados da versão de um pacote. Você pode especificar uma revisão da versão do pacote para copiar as versões do pacote que estão em um estado definido. Para especificar uma revisão da versão do pacote, use o parâmetro `--version-revisions` para passar uma ou mais versões do pacote separadas por vírgula e os pares de revisão da versão do pacote para o comando `copy-package-versions`. 

**nota**  
É necessário especificar o parâmetro `--versions` ou `--version-revisions` com `copy-package-versions`. Não é possível especificar ambos. 

O exemplo a seguir só copiará a versão 0.3.2 do pacote `my-package` se ela estiver presente no repositório de origem com a revisão da versão do pacote `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
```

O exemplo a seguir copia duas versões do pacote `my-package`, 0.3.2 e 0.3.13. A cópia só será bem-sucedida se, no repositório de origem, a versão 0.3.2 do `my-package` tiver revisão `REVISION-1-SAMPLE-6C81EFF7DA55CC` e a versão 0.3.13 tiver revisão `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 localizar as revisões de uma versão do pacote, use o comando `describe-package-version` ou `list-package-versions`. 

 Para obter mais informações, consulte [Revisão da versão do pacote](codeartifact-concepts.md#welcome-concepts-package-version-revision) e [CopyPackageVersion](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_CopyPackageVersions.html) na *Referência da API do CodeArtifact *. 

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

 Para obter mais informações sobre o `copy-package-versions` comportamento com pacotes npm, consulte as [tags npm e a CopyPackageVersions API](npm-tags.md#tags-and-cpv). 