

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Copia i pacchetti tra i repository
<a name="copy-package"></a>

È possibile copiare le versioni dei pacchetti da un repository a un altro in. CodeArtifact Ciò può essere utile per scenari come i flussi di lavoro per la promozione dei pacchetti o la condivisione delle versioni dei pacchetti tra team o progetti. I repository di origine e di destinazione devono trovarsi nello stesso dominio per copiare le versioni dei pacchetti.

## Autorizzazioni IAM richieste per copiare i pacchetti
<a name="copypackageversions-iam-actions"></a>

Per copiare le versioni dei pacchetti CodeArtifact, l'utente chiamante deve disporre delle autorizzazioni IAM richieste e la policy basata sulle risorse allegata ai repository di origine e destinazione deve disporre delle autorizzazioni richieste. Per ulteriori informazioni sulle politiche e sugli archivi di autorizzazioni basati sulle risorse, consulta. CodeArtifact [Policy del repository](repo-policies.md)

L'utente che chiama `copy-package-versions` deve avere l'`ReadFromRepository`autorizzazione sul repository di origine e l'autorizzazione sul repository di destinazione. `CopyPackageVersions`

Il repository di origine deve disporre dell'`ReadFromRepository`autorizzazione e il repository di destinazione deve avere l'`CopyPackageVersions`autorizzazione assegnata all'account IAM o all'utente che copia i pacchetti. Le seguenti politiche sono esempi di politiche di repository da aggiungere al repository di origine o al repository di destinazione con il comando. `put-repository-permissions-policy` Sostituisci *111122223333* con l'ID dell'account chiamante. `copy-package-versions`

**Nota**  
La chiamata `put-repository-permissions-policy` sostituirà l'attuale politica del repository, se ne esiste una. Puoi usare il `get-repository-permissions-policy` comando per vedere se esiste una politica, per maggiori informazioni vedi[Leggi una politica](repo-policies.md#reading-a-policy). Se una politica esiste, potresti voler aggiungere queste autorizzazioni ad essa invece di sostituirla.

**Esempio di politica di autorizzazione del repository di origine**

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

****  

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

------

**Esempio di politica di autorizzazione del repository di destinazione**

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

****  

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

------

## Copia le versioni dei pacchetti
<a name="copy-package-versions"></a>

Usa il `copy-package-versions` comando in CodeArtifact per copiare una o più versioni del pacchetto da un repository di origine a un repository di destinazione nello stesso dominio. L'esempio seguente copierà le versioni 6.0.2 e 4.0.0 di un pacchetto npm denominato `my-package` dal repository al repository. `my_repo` `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
```

È possibile copiare più versioni dello stesso nome di pacchetto in un'unica operazione. Per copiare versioni di nomi di pacchetto diversi, è necessario chiamare ciascuno `copy-package-versions` di essi.

Il comando precedente produrrà l'output seguente, supponendo che entrambe le versioni possano essere copiate correttamente.

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

## Copia un pacchetto dai repository upstream
<a name="copy-package-upstream"></a>

Normalmente, cerca nel repository specificato dall'`--source-repository`opzione `copy-package-versions` solo le versioni da copiare. Tuttavia, è possibile copiare le versioni sia dal repository di origine che dai relativi repository upstream utilizzando l'opzione. `--include-from-upstream` Se utilizzi l' CodeArtifact SDK, chiama l'`CopyPackageVersions`API con il `includeFromUpstream` parametro impostato su true. Per ulteriori informazioni, consulta [Lavorare con i repository upstream in CodeArtifact](repos-upstream.md).

## Copia un pacchetto npm con ambito
<a name="copying-a-scoped-npm-package"></a>

 Per copiare una versione del pacchetto npm in un ambito, usa l'`--namespace`opzione per specificare l'ambito. Ad esempio, per copiare il pacchetto`@types/react`, usa`--namespace types`. Il `@` simbolo deve essere omesso durante l'utilizzo`--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
```

## Copia le versioni del pacchetto Maven
<a name="copying-a-maven-package"></a>

Per copiare le versioni dei pacchetti Maven tra i repository, specifica il pacchetto da copiare passando l'ID del gruppo Maven con l'`--namespace`opzione e il Maven ArtifactID con l'opzione. `--name` Ad esempio, per copiare una singola versione di: `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 la versione del pacchetto viene copiata correttamente, l'output sarà simile al seguente.

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

## Versioni che non esistono nel repository di origine
<a name="versions-that-do-not-exist-in-the-source-repository"></a>

Se si specifica una versione che non esiste nel repository di origine, la copia avrà esito negativo. Se alcune versioni esistono nel repository di origine e altre no, tutte le versioni non verranno copiate. Nell'esempio seguente, la versione 0.2.0 del pacchetto `array-unique` npm è presente nel repository dei sorgenti, ma la versione 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
```

L'output in questo scenario sarà simile al seguente.

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

Il codice `SKIPPED` di errore viene utilizzato per indicare che la versione non è stata copiata nel repository di destinazione perché non è stato possibile copiare un'altra versione. 

## Versioni già esistenti nel repository di destinazione
<a name="versions-that-already-exist-in-the-destination-repository"></a>

 Quando una versione del pacchetto viene copiata in un repository in cui esiste già, CodeArtifact confronta le risorse del pacchetto e i metadati a livello di versione del pacchetto nei due repository.

 Se le risorse e i metadati della versione del pacchetto sono identici negli archivi di origine e di destinazione, non viene eseguita una copia ma l'operazione viene considerata riuscita. Ciò significa che `copy-package-versions` è idempotente. Quando ciò si verifica, la versione che era già presente nei repository di origine e di destinazione non verrà elencata nell'output di. `copy-package-versions`

Nell'esempio seguente, due versioni del pacchetto npm `array-unique` sono presenti nel repository dei sorgenti. `repo-1` La versione 0.2.1 è presente anche nel repository di destinazione `dest-repo` e la versione 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
```

L'output in questo scenario sarà simile al seguente.

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

La versione 0.2.0 è elencata in `successfulVersions` quanto è stata copiata correttamente dal repository di origine a quello di destinazione. La versione 0.2.1 non viene mostrata nell'output in quanto era già presente nell'archivio di destinazione.

 Se le risorse o i metadati della versione del pacchetto differiscono negli archivi di origine e di destinazione, l'operazione di copia avrà esito negativo. È possibile utilizzare il `--allow-overwrite` parametro per forzare una sovrascrittura. 

Se alcune versioni esistono nel repository di destinazione e altre no, tutte le versioni non verranno copiate. Nell'esempio seguente, la versione 0.3.2 del pacchetto `array-unique` npm è presente sia nell'archivio di origine che in quello di destinazione, ma i contenuti della versione del pacchetto sono diversi. La versione 0.2.1 è presente nel repository di origine ma non in quello di destinazione.

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

L'output in questo scenario sarà simile al seguente.

```
{
    "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 versione 0.2.1 è contrassegnata come `SKIPPED` se non fosse stata copiata nel repository di destinazione. Non è stato copiato perché la copia della versione 0.3.2 non è riuscita perché era già presente nel repository di destinazione, ma non era identica nei repository di origine e di destinazione.

## Specificare una revisione della versione del pacchetto
<a name="specify-package-version-revision"></a>

 Una revisione della versione del pacchetto è una stringa che specifica un insieme specifico di risorse e metadati per una versione del pacchetto. È possibile specificare una revisione della versione del pacchetto per copiare le versioni del pacchetto che si trovano in uno stato specifico. Per specificare una revisione della versione del pacchetto, utilizzate il `--version-revisions` parametro per passare al comando una o più versioni del pacchetto separate da virgole e le coppie di revisione della versione del pacchetto. `copy-package-versions` 

**Nota**  
È necessario specificare il parametro o con`--versions`. `--version-revisions` `copy-package-versions` Non è possibile specificare entrambi. 

L'esempio seguente copierà la versione 0.3.2 del pacchetto solo `my-package` se è presente nell'archivio dei sorgenti con la revisione della versione del pacchetto. `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
```

L'esempio seguente copia due versioni del pacchetto`my-package`, 0.3.2 e 0.3.13. La copia avrà successo solo se nel repository di origine la versione 0.3.2 di `my-package` ha una revisione e la versione 0.3.13 ha una revisione`REVISION-1-SAMPLE-6C81EFF7DA55CC`. `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
```

 Per trovare le revisioni di una versione del pacchetto, usa il comando o. `describe-package-version` `list-package-versions` 

 Per ulteriori informazioni, consulta le pagine [Revisione della versione del pacchetto](codeartifact-concepts.md#welcome-concepts-package-version-revision) e [CopyPackageVersion](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_CopyPackageVersions.html) nella *Documentazione di riferimento dell'API CodeArtifact *. 

## Copia i pacchetti npm
<a name="copying-npm-packages"></a>

 Per ulteriori informazioni sul `copy-package-versions` comportamento con i pacchetti npm, consulta i [tag npm e](npm-tags.md#tags-and-cpv) l'API. CopyPackageVersions 