# إدارة المساحات باستخدام GitHub Actions

يمكنك إبقاء مساحة [`huggingface/hub-sync`](https://github.com/marketplace/actions/sync-github-to-hugging-face-hub) متزامنة مع مستودع GitHub الخاص بك باستخدام إجراء GitHub الرسمي.

يعمل `hub-sync` أيضًا مع النماذج (Models) ومجموعات البيانات (Datasets). راجع [GitHub Actions](./repositories-github-actions) للاستخدام العام.

## الإعداد

1. أنشئ [سرًا على GitHub](https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-an-environment) باسم `HF_TOKEN` يحتوي على [رمز وصول](https://huggingface.co/settings/tokens) لحساب Hugging Face.
2. أضف ملف سير عمل (مثل `.github/workflows/sync-to-hub.yml`) إلى مستودعك:

```yaml
name: Sync to Hugging Face Hub
on:
  push:
    branches: [main]

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: huggingface/hub-sync@v0.3.0
        with:
          github_repo_id: ${{ github.repository }}
          huggingface_repo_id: username/my-space
          hf_token: ${{ secrets.HF_TOKEN }}
```

يمكنك تكوين Space SDK باستخدام `space_sdk` (الافتراضي هو `gradio`). راجع [جميع المعاملات](./repositories-github-actions#parameters).

## كيف يعمل

يعكس هذا الإجراء ملفاتك إلى Hub باستخدام سطر أوامر `hf` (`hf repos create` + `hf upload`). إنه ليس مزامنة من git إلى git — بل يرفع محتوى الملفات ويستبعد تلقائيًا مجلدات `.github/` و`.git/`. كما سيتم حذف الملفات المُزالة من مستودع GitHub الخاص بك من Hub أيضًا.

لعمليات العمل الأكثر تعقيدًا (مثل خطوات البناء، المنطق المخصص)، يمكنك بدلاً من ذلك تثبيت [`hf` CLI](https://huggingface.co/docs/huggingface_hub/en/guides/cli) واستخدامه مباشرةً في عملية العمل الخاصة بك.

## اعتبارات حجم الملف

تقوم الإجراء برفع محتويات الملفات باستخدام `hf upload`، لذا لا حاجة إلى إعداد Git LFS أو git-xet للمركز: تُخزَّن الملفات الكبيرة في Xet تلقائيًا. إذا كان مستودع GitHub الخاص بك يخزّن الملفات باستخدام Git LFS (يُطلب ذلك من GitHub للملفات التي يتجاوز حجمها 100 ميغابايت)، فاضبط `lfs: true` على خطوة `actions/checkout` حتى يقوم الإجراء برفع الملفات بدلاً من مؤشرات LFS.

## بديل: أمر git push يدوي

إذا كنت تفضّل مزامنة مباشرة من git إلى git بدلاً من مرآة الملفات، يمكنك الدفع مباشرة إلى git remote الخاص بـ Space الخاص بك. عند استخدام git push، يجب تتبع الملفات التي يتجاوز حجمها 10 ميغابايت باستخدام [git-xet](./xet/using-xet-storage#git-xet) (موصى به) أو Git LFS:

```yaml
name: Sync to Hugging Face hub
on:
  push:
    branches: [main]
  workflow_dispatch:

jobs:
  sync-to-hub:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
          lfs: true
      - name: Push to hub
        env:
          HF_TOKEN: ${{ secrets.HF_TOKEN }}
        run: git push https://HF_USERNAME:$HF_TOKEN@huggingface.co/spaces/HF_USERNAME/SPACE_NAME main
```

استبدل `HF_USERNAME` باسم المستخدم الخاص بك و`SPACE_NAME` باسم مساحة العمل الخاصة بك.

