git-annex-export(1) General Commands Manual git-annex-export(1)

git-annex-export - برون‌بری یک درخت از فایل‌ها به یک مخزن ویژه دوردست

git annex export treeish --to remote

از این دستور برای برون‌بری یک درخت از فایل‌ها از یک مخزن git-annex استفاده کنید.

به‌طور معمول فایل‌ها بر روی یک مخزن ویژه دوردست git-annex با نام برگرفته از کلیدهایشان ذخیره می‌شوند. این کار برای ذخیره‌سازی مطمئن داده‌ها عالی است، اما نام فایل‌های شما پنهان می‌شود. برون‌بری، درخت فایل‌ها را همان‌طور که هست بر روی مخزن ویژه دوردست بازتولید می‌کند.

برای استفاده از این قابلیت، باید هنگام راه‌اندازی اولیه یک مخزن ویژه دوردست با git-annex-initremote(1)، آن را با exporttree=yes پیکربندی کنید.

شیء درختی (treeish) برای برون‌بری می‌تواند نام یک شاخه git، یک برچسب (tag)، یا هر شیء درختی دیگری باشد که توسط git پذیرفته می‌شود؛ از جمله مثلاً master:subdir برای برون‌بری تنها یک زیرپوشه از یک شاخه.

هنگامی که برای مخزن دوردست یک عبارت محتوای ترجیحی توسط git-annex-wanted(1) تنظیم شده باشد، شیء درختی از طریق آن فیلتر شده و فایل‌های ضمیمه‌شده‌ای (annexed) که ریموت تمایلی به آن‌ها ندارد، از برون‌بری به آن مستثنی می‌شوند. (توجه داشته باشید مواردی در عبارت مانند "include=" نسبت به بالاترین سطح شیء درختیِ در حال برون‌بری مطابقت داده می‌شوند.)

هر فایلی در شیء درختی که در git ذخیره شده باشد نیز به مخزن ویژه دوردست برون‌بری خواهد شد.

برون‌بری‌های مکرر به شکلی کارآمد انجام می‌شوند؛ این کار با مقایسه (diff) درخت قدیم و جدید، انتقال تنها فایل‌های تغییریافته و تغییر نام فایل‌ها در صورت لزوم صورت می‌گیرد.

عملیات برون‌بری می‌تواند متوقف و دوباره از سر گرفته شود. با این حال، فایل‌هایی که بخشی از آن‌ها بارگذاری شده است، در بیشتر موارد از ابتدا از سر گرفته خواهند شد.

پس از برون‌بری محتوا به یک مخزن دوردست، دستوراتی مانند git annex get می‌توانند محتوا را مشابه سایر ریموت‌ها از آنجا دریافت کنند. با این حال، از آنجا که یک برون‌بری یک مخزن کلید/مقدار نیست، git-annex باید اعتبارسنجی بیشتری روی محتوای دریافت شده از یک برون‌بری انجام دهد. برخی از انواع کلیدها که مبتنی بر چکسام نیستند، نمی‌توانند از یک برون‌بری دانلود شوند. همچنین، git-annex هرگز برای نگهداری محتوای یک کلید به یک برون‌بری اعتماد نخواهد کرد.

با این حال، برخی از مخازن ویژه دوردست، به‌ویژه S3، از پیگیری نسخه‌های قدیمی فایل‌های ذخیره‌شده در خود پشتیبانی می‌کنند. اگر یک مخزن ویژه دوردست برای انجام این کار تنظیم شده باشد، می‌تواند به عنوان یک مخزن کلید/مقدار مورد استفاده قرار گیرد و محدودیت‌های پاراگراف فوق اعمال نخواهند شد. توجه داشته باشید که رها کردن (drop) محتوا از چنین مخزنی پشتیبانی نمی‌شود. برای جزئیات نحوه فعال‌سازی این نسخه‌بندی به مستندات اختصاصی هر یک از مخازن ویژه مراجعه کنید.

دستوراتی مانند git-annex push نیز می‌توانند برای برون‌بری یک شاخه به یک مخزن ویژه دوردست استفاده شوند و هر زمان که شاخه تغییر کند، مخزن ویژه دوردست را به‌روزرسانی نمایند. برای انجام این کار، باید "remote.<name>.annex-tracking-branch" را پیکربندی کنید تا مشخص کند چه شاخه‌ای باید ردیابی شود. به عنوان مثال:

git config remote.myremote.annex-tracking-branch master
git annex push myremote

می‌توانید استفاده از git annex export برای ارسال تغییرات به یک مخزن ویژه دوردست را با git annex import برای واکشی تغییرات از یک مخزن ویژه دوردست ترکیب کنید. هنگامی که یک فایل در مخزن ویژه دوردست توسط نرم‌افزاری غیر از git-annex تغییر یافته باشد، برون‌بری به آن موجب بازنویسی فایل تغییریافته نخواهد شد و برون‌بری با شکست مواجه می‌شود. می‌توانید این تداخل را با استفاده از git annex import حل کنید.

(برخی از انواع مخازن ویژه دوردست مانند S3 به همراه نسخه‌بندی ممکن است در عوض اجازه دهند برون‌بری فایل تغییریافته را رونویسی کند؛ در این صورت git annex import توالی‌ای از کامیت‌ها ایجاد خواهد کرد که شامل فایل تغییریافته است، تا تغییر رونویسی‌شده از دست نرود.)

مخزن ویژه دوردست مقصد برای برون‌بری را مشخص می‌کند.
هنگامی که محتوای یک فایل در مخزن محلی در دسترس نیست، این گزینه اجازه می‌دهد محتوا از یک مخزن دوردست دیگر دانلود شده و به مخزن دوردست مقصد ارسال شود. فایل به‌طور موقت بر روی دیسک محلی ذخیره می‌شود، اما هرگز وارد مخزن محلی نخواهد شد.
این گزینه می‌تواند چندین بار تکرار شود.
امکان استفاده از --from با همان مخزن دوردستِ مشخص‌شده در --to وجود دارد. اگر درخت شامل چندین فایل با محتوای یکسان باشد، و مخزن دوردستی که به آن برون‌بری انجام می‌شود از قبل حاوی یک نسخه از محتوا باشد، این قابلیت اجازه می‌دهد با دانلود محتوا از خود آن، یک کپی ایجاد شود.
این روشی منسوخ‌شده برای تنظیم "remote.<name>.annex-tracking-branch" است. به جای استفاده از این گزینه، بهتر است پیکربندی git را خودتان تنظیم کنید.
این گزینه برون‌بری یک درخت را راه‌اندازی می‌کند، اما از آپلودهای سنگین فایل‌ها به مخزن دوردست اجتناب می‌ورزد. بعداً می‌توانید git annex push را برای بارگذاری فایل‌ها به برون‌بری اجرا کنید.
چندین فایل را به صورت موازی برون‌بری می‌کند. این کار ممکن است سریع‌تر باشد. برای مثال: -J4
تنظیم این مقدار به "cpus" به ازای هر هسته پردازنده یک کار اجرا خواهد کرد.
خروجی JSON را فعال می‌کند. این قابلیت برای پردازش توسط برنامه‌هایی که از git-annex استفاده می‌کنند در نظر گرفته شده است. هر خط از خروجی یک شیء JSON است.
اشیاء پیشرفت را در خروجی JSON می‌گنجاند.
پیام‌هایی که معمولاً در خروجی خطای استاندارد نمایش داده می‌شدند، در عوض در داخل JSON گنجانده می‌شوند.
همچنین می‌توان از گزینه‌های git-annex-common-options(1) نیز استفاده کرد.

git annex initremote myremote type=directory directory=/mnt/myremote \
	exporttree=yes encryption=none
git annex export master --to myremote

پس از آن، مسیر /mnt/myremote حاوی همان درخت فایل‌هایی خواهد بود که شاخه master دارد.

git mv myfile subdir/myfile
git commit -m renamed
git annex export master --to myremote

این کار /mnt/myremote را برای بازتاب دادن فایل تغییرنام‌یافته به‌روزرسانی می‌کند.

git annex export master:subdir --to myremote

این کار /mnt/myremote را به‌روزرسانی می‌کند تا تنها شامل فایل‌های موجود در دایرکتوری "subdir" از شاخه master باشد.

اگر دو مخزن متفاوت git-annex هر دو در حال برون‌بری درخت‌های متفاوتی به یک مخزن ویژه دوردست یکسان باشند، ممکن است تداخل برون‌بری رخ دهد. این وضعیت باعث می‌شود مخزن ویژه دوردست دارای برخی فایل‌ها از یک درخت و برخی فایل‌ها از درخت دیگر باشد. همچنین ممکن است فایل‌ها در مخزن ویژه دوردست محتوای کاملاً نادرستی داشته باشند.

برای git-annex امکان‌پذیر نیست که تشخیص دهد چه زمانی انجام یک برون‌بری منجر به تداخل خواهد شد. بهترین راه برای جلوگیری از تداخل‌های برون‌بری این است که یا فقط از یک مخزن واحد به یک مخزن ویژه دوردست برون‌بری انجام دهید، یا قاعده‌ای درباره درختی که به مخزن ویژه دوردست برون‌بری می‌کنید داشته باشید. به عنوان مثال، اگر همیشه پس از push به origin، شاخه origin/master را برون‌بری کنید، تداخل برون‌بری رخ نخواهد داد.

یک تداخل برون‌بری تنها پس از آن‌که دو مخزن git ایجادکننده آن مجدداً همگام شوند، قابل تشخیص است. سپس در اجرای بعدی دستور git annex export، تداخل برون‌بری شناسایی شده و برطرف خواهد شد.

git-annex(1)

git-annex-initremote(1)

git-annex-import(1)

git-annex-push(1)

git-annex-preferred-content(1)

دستور export در نسخه 6.20170925 از git-annex معرفی شد.

Joey Hess <id@joeyh.name>