Risolvere i conflitti in una richiesta di pull in unAWS CodeCommitmagazzino - AWS CodeCommit

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à.

Risolvere i conflitti in una richiesta di pull in unAWS CodeCommitmagazzino

Se la richiesta di pull presenta dei conflitti e non può essere unita, è possibile provare a risolvere i conflitti in uno dei seguenti modi:

  • Sul computer locale, è possibile utilizzare il comando git diff per trovare i conflitti tra i due rami e apportare modifiche per risolverli. È inoltre possibile utilizzare uno strumento delle differenze o altri prodotti software per aiutare i clienti a individuare e risolvere le differenze. Una volta trovata una soluzione, è possibile effettuare il push del ramo di origine con le modifiche che contengono i conflitti risolti, per aggiornare la richiesta di pull. Per ulteriori informazioni su git diff e git difftool, consulta la documentazione di Git.

  • Nella console, è possibile scegliere Resolve conflicts (Risolvi conflitti). Si apre un editor di testo normale che mostra i conflitti in modo analogo al comando git diff. È possibile rivedere manualmente i conflitti in ogni file che li contiene, apportare le modifiche e quindi aggiornare la richiesta con le modifiche apportate.

  • In AWS CLI, è possibile utilizzare l'AWS CLI per ottenere informazioni sui conflitti di unione e creare un commit di unione senza riferimenti per testare un'unione.

Risolvi i conflitti in una richiesta pull (console)

È possibile utilizzare la console CodeCommit per risolvere i conflitti in una richiesta di pull in un repository CodeCommit.

  1. Aprire la console CodeCommit all'indirizzo.https://console.aws.amazon.com/codesuite/codecommit/home.

  2. In Repositories (Repository), scegliere il nome del repository.

  3. Nel riquadro di navigazione, selezionare Pull requests (Richieste pull).

  4. Per impostazione predefinita, viene visualizzato l'elenco di tutte le richieste pull aperte. Scegliere la richiesta di pull aperta da unire ma questa contiene i conflitti.

  5. Nella richiesta di pull, scegliere Resolve conflicts (Risolvi conflitti). Questa opzione è disponibile solo se non ci sono conflitti che devono essere risolti prima che la richiesta di pull possa essere unita.

    Una richiesta di pull indicante conflitti che devono essere risolti prima di poter essere uniti.
  6. Si apre una finestra di risoluzione dei conflitti che mostra un elenco di tutti i file che presentano conflitti da risolvere. Scegliere ogni file nell'elenco per rivedere i conflitti e apportare le modifiche necessarie finché tutti i conflitti saranno stati risolti.

    L'editor di risoluzione dei conflitti mostra un file con i conflitti che non sono stati ancora risolti.
    • È possibile scegliere di utilizzare i contenuti del file di origine, i contenuti del file di destinazione oppure se il file non è un file binario, per modificare manualmente i contenuti di un file in modo che contenga solo le modifiche desiderate. I marker git diff standard vengono utilizzati per visualizzare i conflitti tra la destinazione (HEAD) e i rami di origine nel file.

    • Se un file è un file binario, un modulo secondario Git oppure se esiste un conflitto di nome file/cartella, è necessario scegliere di utilizzare il file di origine o il file di destinazione per risolvere i conflitti. Non è possibile visualizzare o modificare i file binari nella console CodeCommit.

    • Se non ci sono conflitti di modalità dei file, viene visualizzata l'opzione per risolvere il conflitto grazie alla possibilità di scegliere tra la modalità file del file di origine e la modalità file del file di destinazione.

    • Se si decide di ignorare le modifiche per un file e ripristinarne lo stato in conflitto, scegliere Reset file (Ripristina file). In questo modo sarà possibile risolvere i conflitti in modo diverso.

  7. Se si è soddisfatti delle modifiche, scegliere Update pull request (Aggiorna pull di richiesta).

    Nota

    È necessario risolvere tutti i conflitti in tutti i file prima di aggiornare con successo la richiesta di pull con le modifiche apportate.

  8. La richiesta di pull viene aggiornata con le modifiche e può essere unita. Viene visualizzata la pagina di unione. È possibile scegliere di unire la richiesta di pull in questo momento oppure è possibile tornare all'elenco delle richieste di pull.

Risolvere i conflitti in una richiesta di pull (AWS CLI)

Per utilizzareAWS CLIcomandi con CodeCommit, installa ilAWS CLI. Per ulteriori informazioni, consultare Guida di riferimento alla riga di comando.

Nessuna singolaAWS CLIconsente di risolvere i conflitti in una richiesta di pull e unire tale richiesta. Tuttavia, è possibile utilizzare i comandi individuali per individuare i conflitti, tentare di risolverli e verificare se una richiesta di pull può essere unita. È possibile utilizzare:

  • get-merge-options, per conoscere quali opzioni di unione sono disponibili per una unione tra due specificatori di commit.

  • get-merge-conflicts, per restituire un elenco di file con conflitti di unione in un'unione tra due specificatori di commit.

  • batch-describe-merge-conflicts, per ottenere informazioni su tutti i conflitti di unione nei file in una unione tra due commit utilizzando una strategia di unione specificata.

  • describe-merge-conflicts, per ottenere informazioni dettagliate su conflitti di unione per un determinato file tra due commit utilizzando una strategia di unione specificata.

  • create-unreferenced-merge-commit, per testare il risultato dell'unione di due specificatori di commit utilizzando una strategia di unione specificata.

  1. Per scoprire quali opzioni di unione sono disponibili per una fusione tra due specificatori di commit, eseguire il comando get-merge-options, specificando:

    • Uno specificatore di commit per l'origine dell'unione (con l'opzione --source-commit-specifier).

    • Uno specificatore di commit per la destinazione dell'unione (con l'opzione --destination-commit-specifier).

    • Il nome del repository (con l'opzione --repository-name).

    • (Facoltativo) Una strategia di risoluzione dei conflitti da utilizzare (con l'opzione --conflict-resolution-strategy).

    • (Facoltativo) Il livello di dettaglio delle informazioni sui conflitti (con l'opzione --conflict-detail-level).

    Ad esempio, per determinare le strategie di unione disponibili per l'unione di un ramo di origine denominatobugfix-1234con un ramo di destinazione denominatoprincipalein un repository denominatoMyDemoRepo:

    aws codecommit get-merge-options --source-commit-specifier bugfix-1234 --destination-commit-specifier main --repository-name MyDemoRepo

    Se il comando viene eseguito correttamente, verrà visualizzato un output simile al seguente:

    { "mergeOptions": [ "FAST_FORWARD_MERGE", "SQUASH_MERGE", "THREE_WAY_MERGE" ], "sourceCommitId": "d49940adEXAMPLE", "destinationCommitId": "86958e0aEXAMPLE", "baseCommitId": "86958e0aEXAMPLE" }
  2. Per ottenere un elenco dei file contenenti i conflitti di unione in un'unione tra due specificatori di commit, eseguire il comando get-merge-conflicts, specificando:

    • Uno specificatore di commit per l'origine dell'unione (con l'opzione --source-commit-specifier).

    • Uno specificatore di commit per la destinazione dell'unione (con l'opzione --destination-commit-specifier).

    • Il nome del repository (con l'opzione --repository-name).

    • L'opzione di unione da utilizzare (con l'opzione --merge-option).

    • (Facoltativo) Il livello di dettaglio delle informazioni sui conflitti (con l'opzione --conflict-detail-level).

    • (Facoltativo) Una strategia di risoluzione dei conflitti da utilizzare (con l'opzione --conflict-resolution-strategy).

    • (Facoltativo) Il numero massimo di file con conflitti da restituire (con l'opzione --max-conflict-files).

    Ad esempio, per ottenere un elenco di file che contengono i conflitti in una unione tra un ramo di origine denominato feature-randomizationfeature e uno di destinazione denominato main utilizzando la strategia di unione a tre vie in un repository denominato MyDemoRepo:

    aws codecommit get-merge-conflicts --source-commit-specifier feature-randomizationfeature --destination-commit-specifier main --merge-option THREE_WAY_MERGE --repository-name MyDemoRepo

    Se il comando viene eseguito correttamente, verrà visualizzato un output simile al seguente:

    { "mergeable": false, "destinationCommitId": "86958e0aEXAMPLE", "sourceCommitId": "6ccd57fdEXAMPLE", "baseCommitId": "767b6958EXAMPLE", "conflictMetadataList": [ { "filePath": "readme.md", "fileSizes": { "source": 139, "destination": 230, "base": 85 }, "fileModes": { "source": "NORMAL", "destination": "NORMAL", "base": "NORMAL" }, "objectTypes": { "source": "FILE", "destination": "FILE", "base": "FILE" }, "numberOfConflicts": 1, "isBinaryFile": { "source": false, "destination": false, "base": false }, "contentConflict": true, "fileModeConflict": false, "objectTypeConflict": false, "mergeOperations": { "source": "M", "destination": "M" } } ] }
  3. Per ottenere informazioni sui conflitti di unione in tutti i file o in un sottoinsieme di file in una unione tra due specificatori di commit, eseguire il comando batch-describe-merge-conflicts, specificando:

    • Uno specificatore di commit per l'origine dell'unione (con l'opzione --source-commit-specifier).

    • Uno specificatore di commit per la destinazione dell'unione (con l'opzione --destination-commit-specifier).

    • L'opzione di unione da utilizzare (con l'opzione --merge-option).

    • Il nome del repository (con l'opzione --repository-name).

    • (Facoltativo) Una strategia di risoluzione dei conflitti da utilizzare (con l'opzione --conflict-resolution-strategy).

    • (Facoltativo) Il livello di dettaglio delle informazioni sui conflitti (con l'opzione --conflict-detail-level).

    • (Facoltativo) Il numero massimo di hunk di unione da restituire (con l'opzione --max-merge-hunks).

    • (Facoltativo) Il numero massimo di file con conflitti da restituire (con l'opzione --max-conflict-files).

    • (Facoltativo) il percorso dei file di destinazione da utilizzare per descrivere i conflitti (con l'opzione --file-paths).

    Ad esempio, per determinare i conflitti di unione per l'unione di un ramo di origine denominatofunzionalità di randomizzazione delle funzionalitàcon un ramo di destinazione denominatoprincipaleutilizzando ilTHREE_WAY_MERGEstrategia in un repository denominatoMyDemoRepo:

    aws codecommit batch-describe-merge-conflicts --source-commit-specifier feature-randomizationfeature --destination-commit-specifier main --merge-option THREE_WAY_MERGE --repository-name MyDemoRepo

    Se il comando viene eseguito correttamente, verrà visualizzato un output simile al seguente:

    { "conflicts": [ { "conflictMetadata": { "filePath": "readme.md", "fileSizes": { "source": 139, "destination": 230, "base": 85 }, "fileModes": { "source": "NORMAL", "destination": "NORMAL", "base": "NORMAL" }, "objectTypes": { "source": "FILE", "destination": "FILE", "base": "FILE" }, "numberOfConflicts": 1, "isBinaryFile": { "source": false, "destination": false, "base": false }, "contentConflict": true, "fileModeConflict": false, "objectTypeConflict": false, "mergeOperations": { "source": "M", "destination": "M" } }, "mergeHunks": [ { "isConflict": true, "source": { "startLine": 0, "endLine": 3, "hunkContent": "VGhpcyBpEXAMPLE==" }, "destination": { "startLine": 0, "endLine": 1, "hunkContent": "VXNlIHRoEXAMPLE=" } } ] } ], "errors": [], "destinationCommitId": "86958e0aEXAMPLE", "sourceCommitId": "6ccd57fdEXAMPLE", "baseCommitId": "767b6958EXAMPLE" }
  4. Per ottenere informazioni dettagliate su qualsiasi conflitto di unione per un determinato file in un'unione tra due specificatori di commit, eseguire il comando describe-merge-conflicts, specificando:

    • Uno specificatore di commit per l'origine dell'unione (con l'opzione --source-commit-specifier).

    • Uno specificatore di commit per la destinazione dell'unione (con l'opzione --destination-commit-specifier).

    • L'opzione di unione da utilizzare (con l'opzione --merge-option).

    • Il percorso dei file di destinazione da utilizzare per descrivere i conflitti (con l'opzione --file-path).

    • Il nome del repository (con l'opzione --repository-name).

    • (Facoltativo) Una strategia di risoluzione dei conflitti da utilizzare (con l'opzione --conflict-resolution-strategy).

    • (Facoltativo) Il livello di dettaglio delle informazioni sui conflitti (con l'opzione --conflict-detail-level).

    • (Facoltativo) Il numero massimo di hunk di unione da restituire (con l'opzione --max-merge-hunks).

    • (Facoltativo) Il numero massimo di file con conflitti da restituire (con l'opzione --max-conflict-files).

    Ad esempio, per determinare i conflitti di unione per un file denominatoreadme.mdin un ramo di origine denominatofunzionalità di randomizzazione delle funzionalitàcon un ramo di destinazione denominatoprincipaleutilizzando ilTHREE_WAY_MERGEstrategia in un repository denominatoMyDemoRepo:

    aws codecommit describe-merge-conflicts --source-commit-specifier feature-randomizationfeature --destination-commit-specifier main --merge-option THREE_WAY_MERGE --file-path readme.md --repository-name MyDemoRepo

    Se il comando viene eseguito correttamente, verrà visualizzato un output simile al seguente:

    { "conflictMetadata": { "filePath": "readme.md", "fileSizes": { "source": 139, "destination": 230, "base": 85 }, "fileModes": { "source": "NORMAL", "destination": "NORMAL", "base": "NORMAL" }, "objectTypes": { "source": "FILE", "destination": "FILE", "base": "FILE" }, "numberOfConflicts": 1, "isBinaryFile": { "source": false, "destination": false, "base": false }, "contentConflict": true, "fileModeConflict": false, "objectTypeConflict": false, "mergeOperations": { "source": "M", "destination": "M" } }, "mergeHunks": [ { "isConflict": true, "source": { "startLine": 0, "endLine": 3, "hunkContent": "VGhpcyBpEXAMPLE==" }, "destination": { "startLine": 0, "endLine": 1, "hunkContent": "VXNlIHRoEXAMPLE=" } } ], "destinationCommitId": "86958e0aEXAMPLE", "sourceCommitId": "6ccd57fdEXAMPLE", "baseCommitId": "767b69580EXAMPLE" }
  5. Per creare un commit non referenziato che rappresenta il risultato dell'unione di due specificatori di commit, eseguire il comando create-unreferenced-merge-commit, specificando:

    • Uno specificatore di commit per l'origine dell'unione (con l'opzione --source-commit-specifier).

    • Uno specificatore di commit per la destinazione dell'unione (con l'opzione --destination-commit-specifier).

    • L'opzione di unione da utilizzare (con l'opzione --merge-option).

    • Il nome del repository (con l'opzione --repository-name).

    • (Facoltativo) Una strategia di risoluzione dei conflitti da utilizzare (con l'opzione --conflict-resolution-strategy).

    • (Facoltativo) Il livello di dettaglio delle informazioni sui conflitti (con l'opzione --conflict-detail-level).

    • (Facoltativo) Il messaggio di commit da includere (con l'opzione --commit-message).

    • (Facoltativo) Il nome da utilizzare per il commit (con l'opzione --name).

    • (Facoltativo) L'indirizzo e-mail da utilizzare per il commit (con l'opzione --email).

    • (Facoltativo) Per mantenere le cartelle vuote (con l'opzione --keep-empty-folders).

    Ad esempio, per determinare i conflitti di unione per l'unione di un ramo di origine denominatobugfix-1234con un ramo di destinazione denominatoprincipaleutilizzo della strategia ACCEPT_SOURCE in un repository denominatoMyDemoRepo:

    aws codecommit create-unreferenced-merge-commit --source-commit-specifier bugfix-1234 --destination-commit-specifier main --merge-option THREE_WAY_MERGE --repository-name MyDemoRepo --name "Maria Garcia" --email "maria_garcia@example.com" --commit-message "Testing the results of this merge."

    Se il comando viene eseguito correttamente, verrà visualizzato un output simile al seguente:

    { "commitId": "4f178133EXAMPLE", "treeId": "389765daEXAMPLE" }