Cách đồng bộ (sync) GitHub repository sang repository khác

Đăng ngày 09 Oct 2024 04:55

Để đồng bộ một repository GitHub từ Tài khoản A sang Tài khoản B, bạn có thể sử dụng một vài phương pháp khác nhau tùy thuộc vào sở thích và yêu cầu của bạn. Dưới đây là cách tiếp cận phổ biến sử dụng SSH để Xác thực.

Hướng dẫn từng bước để Thiết lập Xác thực SSH

1. Tạo cặp khóa SSH (SSH Key Pair)

Trên máy cục bộ của bạn, mở terminal và tạo một cặp khóa SSH mới dành riêng cho tác vụ này:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Khi được hỏi, hãy lưu các khóa vào một tệp mới (ví dụ: ~/.ssh/github_actions_key). Để trống mật khẩu (passphrase).

Thao tác này sẽ tạo ra hai tệp:

  • github_actions_key (khóa riêng tư - private key)
  • github_actions_key.pub (khóa công khai - public key)

2. Thêm Khóa công khai vào Repository của Tài khoản B

  • Đi tới repository trong Tài khoản B mà bạn muốn đồng bộ hóa đến.
  • Chuyển đến Settings > Deploy keys.
  • Nhấp vào Add deploy key, cung cấp tiêu đề và dán nội dung của tệp github_actions_key.pub.
  • Bật tùy chọn Allow write access để đảm bảo quyền push và lưu khóa lại.

3. Thêm Khóa riêng tư làm Secret trong Repository của Tài khoản A

  • Đi tới repository của Tài khoản A nơi bạn muốn thiết lập GitHub Action.
  • Chuyển đến Settings > Secrets and variables > Actions và nhấp vào New repository secret.
  • Đặt tên cho secret, ví dụ: SSH_PRIVATE_KEY.
  • Mở tệp khóa riêng tư (github_actions_key) trong trình chỉnh sửa văn bản, sao chép nội dung của nó và dán vào secret.

4. Cấu hình GitHub Action Workflow để Sử dụng Khóa SSH

  • Trong repository của Tài khoản A, tạo hoặc cập nhật tệp workflow GitHub Action của bạn để sử dụng khóa SSH cho việc xác thực. Dưới đây là một ví dụ:
name: Sync to Account B with SSH

on:
  push:
    branches:
      - main

jobs:
  sync:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Set up SSH
        run: |
          mkdir -p ~/.ssh
          echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/github_actions_key
          chmod 600 ~/.ssh/github_actions_key
          ssh-keyscan github.com >> ~/.ssh/known_hosts
          echo "IdentityFile ~/.ssh/github_actions_key" >> ~/.ssh/config

      - name: Push to Target Repo
        run: |
          git remote add newTarget git@github.com:username/repository-name.git
          git push newTarget --all
          git push newTarget --tags

      - name: Cleanup SSH Key
        run: |
          rm -f ~/.ssh/github_actions_key