عیب یابی و رفع مشکلات همگام سازی

این صفحه نحوه عیب یابی و رفع مشکلات مربوط به دستور repo sync را توضیح می دهد.

رفع مشکلات شبکه

این بخش چندین پیشنهاد برای رفع مشکلات شبکه ارائه می دهد که می تواند باعث همگام سازی ناموفق شود.

از احراز هویت برای جلوگیری از موانع سهمیه استفاده کنید

برای محافظت از سرورها در برابر استفاده بیش از حد، هر آدرس IP که برای دسترسی به منبع استفاده می شود با یک سهمیه مرتبط است.

هنگام به اشتراک گذاری یک آدرس IP با سایر کاربران، مانند هنگام دسترسی به مخازن منبع از فراسوی فایروال NAT، سهمیه ها می توانند برای الگوهای عادی فعال شوند. به عنوان مثال، زمانی که چندین کاربر مشتریان جدید را از یک آدرس IP در یک دوره کوتاه همگام‌سازی می‌کنند، یک سهمیه می‌تواند فعال شود.

برای جلوگیری از ایجاد سهمیه، می توانید از دسترسی تأیید شده استفاده کنید، که از یک سهمیه جداگانه برای هر کاربر، صرف نظر از آدرس IP استفاده می کند.

برای فعال کردن دسترسی تایید شده:

  1. با تولید کننده رمز عبور یک رمز عبور ایجاد کنید.

  2. دستور زیر را برای تبدیل مشتری به استفاده از احراز هویت خودکار (بدون تغییر شاخه) اجرا کنید:

    $ repo init -u https://android.googlesource.com/a/platform/manifest
    

    توجه داشته باشید که پیشوند فهرست /a/ باعث احراز هویت خودکار می شود.

برای استفاده از پروکسی پیکربندی کنید

اگر منبع را از پشت پراکسی دانلود می‌کنید، همانطور که در برخی از محیط‌های شرکتی رایج است، مطمئن شوید که با اجرای این دستورات، به صراحت یک پراکسی برای استفاده از Repo تعیین کرده‌اید:

$ export HTTP_PROXY=http://proxy_user_id:proxy_password@proxy_server:proxy_port
$ export HTTPS_PROXY=http://proxy_user_id:proxy_password@proxy_server:proxy_port

تنظیمات TCP/IP را برای جلوگیری از مشکلات اتصال تنظیم کنید

در حالی که به ندرت اتفاق می افتد، مشتریان لینوکس می توانند مشکلات اتصال را تجربه کنند، مانند گیر افتادن در وسط دانلودها هنگام دریافت اشیا. برای بهبود این مشکل، تنظیمات پشته TCP/IP را تنظیم کنید یا از اتصالات غیر موازی استفاده کنید. برای تغییر تنظیمات TCP باید دسترسی ریشه داشته باشید. برای تغییر تنظیمات، دستورات زیر را صادر کنید:

$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
$ repo sync -j1

برای جلوگیری از تأخیر شبکه از یک آینه محلی استفاده کنید

هنگام استفاده از چندین کلاینت، می توانید یک آینه محلی از کل محتوای سرور ایجاد کنید و مشتریان را از آن آینه بدون دسترسی به شبکه همگام سازی کنید. برای ایجاد یک آینه محلی در ~/aosp-mirror/ و همگام سازی کلاینت ها با آن آینه این دستورالعمل ها را دنبال کنید:

  1. ایجاد و همگام سازی آینه:

    $ mkdir -p /usr/local/aosp/mirror
    $ cd /usr/local/aosp/mirror
    $ repo init -u https://android.googlesource.com/mirror/manifest --mirror
    

    این دستورات یک آینه محلی در /user/local/aosp/mirror ایجاد می‌کنند و با استفاده از پرچم --mirror با دستور repo init ، آینه را مقداردهی اولیه می‌کنند.

  2. برای همگام سازی مشتریان از آینه:

    $ mkdir -p /usr/local/aosp/main
    $ cd /usr/local/aosp/main
    $ repo init -u /usr/local/aosp/mirror/platform/manifest.git
    $ repo sync
    
  3. در نهایت، برای همگام سازی آینه با سرور و همگام سازی کلاینت در برابر آینه، این دستورات را دنبال کنید:

    $ cd /usr/local/aosp/mirror</code>
    $ repo sync
    $ cd /usr/local/aosp/main
    $ repo sync
    

این امکان وجود دارد که آینه را روی یک سرور LAN ذخیره کنید و از طریق NFS، SSH یا Git به آن دسترسی داشته باشید. همچنین امکان ذخیره آن بر روی یک درایو قابل جابجایی و انتقال آن درایو بین کاربران یا ماشین‌ها وجود دارد.

از یک کلون جزئی استفاده کنید

اگر از Git نسخه 2.19 یا جدیدتر استفاده می کنید، هنگام اجرای repo init --partial-clone مشخص کنید تا بر مشکلات شبکه با تأخیر کم غلبه کنید:

  $ repo init -u https://android.googlesource.com/platform/manifest -b main --partial-clone --clone-filter=blob:limit=10M

این دستور به جای مقداردهی اولیه Repo برای دانلود همه چیز، اشیاء Git را در صورت نیاز دانلود می کند.

مشکلات خاص همگام سازی را برطرف کنید

این صفحه برخی از مشکلات شناخته شده ای را که ممکن است هنگام تلاش برای همگام سازی کد منبع Android با آن مواجه شوید، توضیح می دهد.

دستورات با خطای 403 یا 500 شکست می خورند (مشکلات پروکسی)

دستورات repo init یا repo sync ممکن است با خطای 403 یا 500 شکست بخورند. اغلب این خطاها مربوط به پروکسی های HTTP است که برای مدیریت انتقال داده های بزرگ تلاش می کنند.

در حالی که راه حل خاصی برای این خطاها وجود ندارد، استفاده از جدیدترین نسخه پایتون و استفاده صریح از repo sync -j1 گاهی می تواند کمک کننده باشد.