

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 中建立遞交 AWS CodeCommit
<a name="how-to-create-commit"></a>

當您為新儲存庫建立第一個遞交時，您可以使用 AWS CLI 和 **put-file**命令。這會建立第一個遞交，並允許您為新儲存庫建立和指定預設分支。您可以使用 Git 或 AWS CLI 在 CodeCommit 儲存庫中建立遞交。如果本機儲存庫連接到 CodeCommit 儲存庫，您可以使用 Git 將遞交從本機儲存庫推送到 CodeCommit 儲存庫。若要直接在 CodeCommit 主控台中建立遞交，請參閱 [建立檔案或將檔案新增至 AWS CodeCommit 儲存庫](how-to-create-file.md)和 [編輯 AWS CodeCommit 儲存庫中檔案的內容](how-to-edit-file.md)。

**注意**  
最佳實務是建議您使用 AWS CLI、Git 和其他軟體的最新支援版本。如果您使用 AWS CLI，請確定已安裝最新版本，以確保您使用的版本包含 `create-commit`命令。

**Topics**
+ [使用 建立儲存庫的第一個遞交 AWS CLI](#how-to-create-first-commit)
+ [使用 Git 用戶端建立遞交](#how-to-create-commit-git)
+ [使用 建立遞交 AWS CLI](#how-to-create-commit-cli)

## 使用 建立儲存庫的第一個遞交 AWS CLI
<a name="how-to-create-first-commit"></a>

您可以使用 AWS CLI 和 `put-file`命令來建立儲存庫的第一個遞交。使用 **put-file**會建立第一個遞交，將檔案新增至空白儲存庫，並使用您指定的名稱建立分支。它會指定新的分支做為儲存庫的預設分支。

**注意**  
若要搭配 CodeCommit 使用 AWS CLI 命令，請安裝 AWS CLI。如需詳細資訊，請參閱[命令列參考](cmd-ref.md)。<a name="create-first-commit"></a>

## 使用 建立儲存庫的第一個遞交 AWS CLI


1. 在本機電腦上，建立您要新增為 CodeCommit 儲存庫第一個檔案的檔案。常見的做法是建立 `README.md` Markdown 檔案，向其他儲存庫使用者解釋此儲存庫的用途。如果您包含`README.md`檔案，檔案的內容會自動顯示在 CodeCommit 主控台中儲存庫的**程式碼**頁面底部。

1. 在終端機或命令列，執行 **put-file** 命令，並指定：
   + 您要新增第一個檔案的儲存庫名稱。
   + 您要建立為預設分支的分支名稱。
   + 檔案的本機位置。用於此位置的語法因您的本機作業系統而有所不同。
   + 您要新增的檔案名稱，包括更新檔案儲存在儲存庫中的路徑。
   + 您要與此檔案建立關聯的使用者名稱和電子郵件。
   + 說明為何新增此檔案的遞交訊息。

   使用者名稱、電子郵件地址和遞交訊息是選用的，但可協助其他使用者知道誰進行了變更以及原因。如果您未提供使用者名稱，CodeCommit 預設為使用您的 IAM 使用者名稱或主控台登入衍生作為作者名稱。

   例如，若要將名為 *README.md* 的檔案與範例 base 6 編碼的檔案內容新增至名為 *MyDemoRepo* 的儲存庫，以及名為*開發*的分支：

   ```
   aws codecommit put-file --repository-name MyDemoRepo --branch-name development --file-path README.md --file-content "EXAMPLE0123456789example0123456789EXAMPLE1" --name "Mary Major" --email "mary_major@example.com" --commit-message "I added a quick readme for our new team repository."
   ```

   如果此命令成功執行，您會看到類似如下的輸出傳回：

   ```
   {
       "commitId": "724caa36EXAMPLE",
       "blobId": "a8a94062EXAMPLE",
       "treeId": "08b2fc73EXAMPLE"
   }
   ```

## 使用 Git 用戶端建立遞交
<a name="how-to-create-commit-git"></a>

您可以使用安裝在本機電腦上的 Git 用戶端來建立遞交，然後將這些遞交推送到您的 CodeCommit 儲存庫。

1. 完成必要條件，包括[設定 ](setting-up.md)。
**重要**  
如果尚未完成設定，您無法使用 Git 連接到或遞交至儲存庫。

1. 確定您是在正確的分支中建立遞交。若要查看可用的分支清單，並了解您目前設定使用的分支，請執行 **git branch**。將會顯示所有分支。您目前的分支旁會顯示星號 (`*`)。若要切換到不同的分支，請執行 **git checkout *branch-name***。如果這是您的第一個遞交，請執行 **git config **命令來設定您的 Git 用戶端，以建立具有您要用於該分支之名稱的初始分支。例如，如果您希望預設分支具有名稱*開發*：

   ```
   git config --local init.defaultBranch development
   ```
**提示**  
此命令僅適用於 Git v.2.28 和更新版本。  
您也可以執行此命令，**development**將所有新建立的儲存庫的預設分支名稱設定為 ：  

   ```
   git config --global init.defaultBranch development
   ```

1. 對分支進行變更 (例如，新增、修改或刪除檔案)。

   例如，在本機儲存庫中，`bird.txt`使用下列文字建立名為 的檔案：

   ```
   bird.txt
   --------
   Birds (class Aves or clade Avialae) are feathered, winged, two-legged, warm-blooded, egg-laying vertebrates.
   ```

1. 執行 **git status**，應該會指出 `bird.txt` 尚未在任何擱置中包含的遞交：

   ```
   ...        
   Untracked files:
     (use "git add <file>..." to include in what will be committed)
           
           bird.txt
   ```

1. 執行 **git add bird.txt** 以在擱置中遞交中包含新的檔案。

1. 如果您再次執行 **git status**，應該會看到類似如下的輸出：這表示 `bird.txt` 現在已屬於擱置中遞交或暫存供遞交：

   ```
   ...
   Changes to be committed:
     (use "git reset HEAD <file>..." to unstage)
       
           new file:   bird.txt
   ```

1. 若要完成遞交，請執行 **git commit** 搭配 `-m` 選項 (例如，** git commit -m "*Adding bird.txt to the repository.*"**)。`-m` 選項會建立遞交訊息。

1. 如果您再次執行 **git status**，應該會看到類似如下的輸出：它表示遞交已準備好從本機儲存庫推送到 CodeCommit 儲存庫：

   ```
   ...    
   nothing to commit, working directory clean
   ```

1. 在您將最終遞交從本機儲存庫推送至 CodeCommit 儲存庫之前，您可以執行 來查看要推送的內容**git diff --stat *remote-name*/*branch-name***，其中 *remote-name* 是本機儲存庫用於 CodeCommit 儲存庫的別名，*而 branch-name* 是要比較的分支名稱。
**提示**  
若要取得別名，請執行 **git remote**。若要取得分支名稱的清單，請執行 **git branch**。目前的分支旁會顯示星號 (`*`)。您也可以執行 **git status** 以取得目前的分支名稱。
**注意**  
如果您複製儲存庫，從本機儲存庫的角度來看，*remote-name* 不是 CodeCommit 儲存庫的名稱。複製儲存庫時，*remote-name* 會自動設定為 `origin`。

   例如，**git diff --stat origin/main** 會顯示與下列類似的輸出：

   ```
   bird.txt | 1 +
   1 file changed, 1 insertion(+)
   ```

   輸出假設您已將本機儲存庫連線至 CodeCommit 儲存庫。(如需指示，請參閱[連接到儲存庫](how-to-connect.md)。)

1. 當您準備好將遞交從本機儲存庫推送至 CodeCommit 儲存庫時，請執行 **git push *remote-name* *branch-name***，其中 *remote-name* 是本機儲存庫用於 CodeCommit 儲存庫的別名，而 *branch-name* 是要推送至 CodeCommit 儲存庫的分支名稱。

   例如，執行 **git push origin main** 會顯示與下列類似的輸出：

   針對 HTTPS：

   ```
   Counting objects: 7, done.
   Delta compression using up to 4 threads.
   Compressing objects: 100% (4/4), done.
   Writing objects: 100% (5/5), 516 bytes | 0 bytes/s, done.
   Total 5 (delta 2), reused 0 (delta 0)
   remote:
   To https://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo
       b9e7aa6..3dbf4dd main -> main
   ```

   針對 SSH：

   ```
   Counting objects: 7, done.
   Delta compression using up to 4 threads.
   Compressing objects: 100% (4/4), done.
   Writing objects: 100% (5/5), 516 bytes | 0 bytes/s, done.
   Total 5 (delta 2), reused 0 (delta 0)
   remote:
   To ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo
       b9e7aa6..3dbf4dd main -> main
   ```
**提示**  
如果您將 `-u` 選項新增至 **git push** (例如，**git push -u origin main**)，則未來只需執行 **git push**，因為已設定上游追蹤資訊。若要取得上游追蹤資訊，請執行 **git remote show *remote-name*** (例如，**git remote show origin**)。

如需更多選項，請參閱 Git 文件。

## 使用 建立遞交 AWS CLI
<a name="how-to-create-commit-cli"></a>

您可以使用 AWS CLI 和 `create-commit`命令，在指定的分支頂端建立儲存庫的遞交。您也可以建立未參照的合併遞交來代表合併兩個遞交指標的結果。如需詳細資訊，請參閱[建立未參照遞交](how-to-resolve-conflict-pull-request.md#create-unreferenced-merge-commit)。

**注意**  
若要搭配 CodeCommit 使用 AWS CLI 命令，請安裝 AWS CLI。如需詳細資訊，請參閱[命令列參考](cmd-ref.md)。<a name="create-commit"></a>

**建立遞交**

1. 在本機電腦上，進行您要遞交至 CodeCommit 儲存庫的變更。

1. 在終端機或命令列，執行 **create-commit** 命令，並指定：
   + 您要遞交變更的儲存庫。
   + 您要遞交變更的分支。
   + 對該分支所進行最新遞交的完整遞交 ID，也稱為頂端或標頭遞交，或父遞交 ID。
   + 如果您所做的變更會刪除資料夾的內容，是否保留任何空的資料夾。根據預設，此值為 false。
   + 您想要新增、變更或刪除的檔案的相關資訊。
   + 要與這些變更建立關聯的使用者名稱和電子郵件。
   + 用以說明您為什麼做這些變更的遞交訊息。

   使用者名稱、電子郵件地址和遞交訊息是選用的，但可協助其他使用者知道進行變更的人員及原因。如果您未提供使用者名稱，CodeCommit 預設為使用您的 IAM 使用者名稱或主控台登入衍生作為作者名稱。

   例如，若要為將`README.md`檔案新增至*主*分支中名為 *MyDemoRepo* 的儲存庫建立遞交。檔案的內容位於 Base64 中，並讀取「歡迎使用我的團隊儲存庫！」：

   ```
   aws codecommit create-commit --repository-name MyDemoRepo --branch-name main --parent-commit-id 4c925148EXAMPLE --put-files "filePath=README.md,fileContent=V2VsY29tZSB0byBvdXIgdGVhbSByZXBvc2l0b3J5IQo="
   ```
**提示**  
若要取得父遞交 ID，請執行 [get-branch](how-to-view-branch-details.md#how-to-view-branch-details-cli-details) 命令。

   如果此命令成功執行，您會看到類似如下的輸出傳回：

   ```
   {
       "commitId": "4df8b524-EXAMPLE",
       "treeId": "55b57003-EXAMPLE",
       "filesAdded": [
           {
               "blobId": "5e1c309dEXAMPLE",
               "absolutePath": "meeting.md",
               "fileMode": "NORMAL"
           }
       ],
       "filesDeleted": [],
       "filesUpdated": []
   }
   ```

   若要建立對名為 *file1.py* 和 *file2.txt* 的檔案進行變更的遞交， 會將檔案從 *picture.png* 重新命名為 *image1.png*，並將其從名為*圖片*的目錄移至名為 *ExampleSolution.py* 的目錄、*映像*，並在名為 *MyFeatureBranch* 的分支中刪除名為 *MyDemoRepo* 的檔案，該分支的最近遞交 ID 為 *4c925148EXAMPLE*：

   ```
   aws codecommit create-commit --repository-name MyDemoRepo --branch-name MyFeatureBranch --parent-commit-id 4c925148EXAMPLE --author-name "Saanvi Sarkar"
    --email "saanvi_sarkar@example.com" --commit-message "I'm creating this commit to update a variable name in a number of files."
    --keep-empty-folders false  --put-files '{"filePath": "file1.py", "fileMode": "EXECUTABLE", "fileContent": "bucket_name = sys.argv[1] region = sys.argv[2]"}'
   '{"filePath": "file2.txt", "fileMode": "NORMAL", "fileContent": "//Adding a comment to explain the variable changes in file1.py"}' '{"filePath": "images/image1.png",
   "fileMode": "NORMAL", "sourceFile": {"filePath": "pictures/picture.png", "isMove": true}}' --delete-files filePath="ExampleSolution.py"
   ```
**注意**  
**--put-files** 區段的語法會根據您的作業系統而有所不同。上述範例已針對具有 Bash 模擬器的 Linux、macOS 或 Unix 使用者和 Windows 使用者進行最佳化。採用命令列或 Powershell 的 Windows 使用者，應該使用該系統適用的語法。

   如果此命令成功執行，您會看到類似如下的輸出傳回：

   ```
   {
      "commitId": "317f8570EXAMPLE",
      "treeId": "347a3408EXAMPLE",
      "filesAdded": [
           {
           "absolutePath": "images/image1.png",
           "blobId": "d68ba6ccEXAMPLE",
           "fileMode": "NORMAL"
           }
       ],
       "filesUpdated": [
           {
           "absolutePath": "file1.py",
           "blobId": "0a4d55a8EXAMPLE",
           "fileMode": "EXECUTABLE"
           },
           {
           "absolutePath": "file2.txt",
           "blobId": "915766bbEXAMPLE",
           "fileMode": "NORMAL"
           }
       ],
       "filesDeleted": [
           {
           "absolutePath": "ExampleSolution.py",
           "blobId": "4f9cebe6aEXAMPLE",
           "fileMode": "EXECUTABLE"
           },
           {
           "absolutePath": "pictures/picture.png",
           "blobId": "fb12a539EXAMPLE",
           "fileMode": "NORMAL"
           }
       ]
   }
   ```