'\" t .\" Title: git-fast-export .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 2026-06-29 .\" Manual: Git Manual .\" Source: Git 2.55.0 .\" Language: Persian .\" .TH "GIT\-FAST\-EXPORT" "1" "2026\-06\-29" "Git 2\&.55\&.0" "Git Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "نام (NAME)" git-fast-export \- صادرکننده داده‌های گیت .SH "خلاصه دستور (SYNOPSIS)" .sp .nf \fIgit fast\-export\fR [] | \fIgit fast\-import\fR .fi .sp .SH "توضیحات (DESCRIPTION)" .sp این برنامه ویرایش‌های داده‌شده را در قالبی مناسب برای هدایت از طریق لوله (pipe) به \fIgit fast\-import\fR تخلیه می‌کند\&. .sp می‌توانید از آن به عنوان یک جایگزین قابل خواندن برای انسان به جای باندل (ببینید \fBgit-bundle\fR(1))، یا به عنوان قالبی که می‌تواند پیش از ارسال به \fIgit fast\-import\fR جهت بازنویسی تاریخچه ویرایش شود (قابلیتی که ابزارهایی مانند \fIgit filter\-repo\fR به آن متکی هستند) استفاده کنید\&. .SH "گزینه‌ها (OPTIONS)" .PP \-\-progress= .RS 4 درج عبارت‌های \fIprogress\fR به ازای هر شیء، تا توسط \fIgit fast\-import\fR در حین واردسازی نمایش داده شوند\&. .RE .PP \-\-signed\-tags=(verbatim|warn\-verbatim|warn\-strip|strip|abort) .RS 4 نحوه مدیریت برچسب‌های امضاشده را مشخص می‌کند\&. از آنجا که هرگونه دگرگونی پس از صدور (یا در حین صدور، مانند مستثنی کردن ویرایش‌ها) می‌تواند هش‌های امضاشده را تغییر دهد، امضاها ممکن است نامعتبر شوند\&. .sp هنگام درخواست \fIabort\fR (که حالت پیش‌فرض است)، این برنامه در صورت مواجهه با یک برچسب امضاشده متوقف می‌شود\&. با \fIstrip\fR، برچسب‌ها بدون هشدار به حالت فاقد امضا تبدیل می‌شوند، با \fIwarn\-strip\fR فاقد امضا می‌شوند اما یک هشدار نمایش داده می‌شود، با \fIverbatim\fR، بدون هشدار صادر می‌گردند و با \fIwarn\-verbatim\fR (یا \fIwarn\fR، یک مترادف منسوخ)، صادر می‌شوند اما هشداری مشاهده خواهید کرد\&. \fIverbatim\fR و \fIwarn\-verbatim\fR تنها زمانی باید استفاده شوند که بدانید هیچ دگرگونی مؤثر بر برچسب‌ها یا کامیت‌های موجود در تاریخچه آنها توسط شما یا توسط fast\-export یا fast\-import انجام نخواهد شد، یا برایتان مهم نباشد که برچسب حاصل دارای امضای نامعتبر باشد\&. .RE .PP \-\-signed\-commits=(verbatim|warn\-verbatim|warn\-strip|strip|abort) .RS 4 نحوه مدیریت کامیت‌های امضاشده را مشخص می‌کند\&. دقیقاً مانند \fI\-\-signed\-tags=(verbatim|warn\-verbatim|warn\-strip|strip|abort)\fR رفتار می‌کند، اما برای کامیت‌ها\&. پیش‌فرض \fIstrip\fR است، که مشابه رفتار نسخه‌های قبلی این دستور بدون این گزینه است\&. .sp هنگام صدور، یک امضا با عبارت زیر آغاز می‌شود: .sp gpgsig .sp که در آن هش شیء گیت است (یعنی "sha1" یا "sha256")، و نوع امضا است، یعنی "openpgp"، "x509"، "ssh" یا "unknown"\&. .sp برای مثال، یک امضای OpenPGP روی یک کامیت SHA\-1 با \fBgpgsig\fR \fBsha1\fR \fBopenpgp\fR آغاز می‌شود، در حالی که یک امضای SSH روی یک کامیت SHA\-256 با \fBgpgsig\fR \fBsha256\fR \fBssh\fR شروع می‌گردد\&. .sp در حالی که تمام امضاهای یک کامیت صادر می‌شوند، ممکن است یک واردکننده ترجیح دهد فقط برخی از آنها را بپذیرد\&. به عنوان مثال \fBgit-fast-import\fR(1) در حال حاضر حداکثر یک امضا به ازای هر الگوریتم هش گیت در هر کامیت ذخیره می‌کند\&. .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBنکته\fR .ps -1 .br این قابلیت کاملاً آزمایشی است و قالب جریان داده ممکن است در آینده بدون تضمین سازگاری تغییر کند\&. .sp .5v .RE .RE .PP \-\-tag\-of\-filtered\-object=(abort|drop|rewrite) .RS 4 نحوه مدیریت برچسب‌هایی را مشخص می‌کند که شیء برچسب‌خورده آنها فیلتر شده است\&. از آنجا که ویرایش‌ها و فایل‌ها برای صدور را می‌توان با مسیر محدود کرد، ممکن است اشیاء برچسب‌خورده کاملاً فیلتر و حذف شوند\&. .sp هنگام درخواست \fIabort\fR (که حالت پیش‌فرض است)، این برنامه هنگام مواجهه با چنین برچسبی متوقف می‌شود\&. با \fIdrop\fR چنین برچسب‌هایی را از خروجی حذف می‌کند\&. با \fIrewrite\fR، اگر شیء برچسب‌خورده یک کامیت باشد، برچسب را بازنویسی می‌کند تا به یک کامیت والد یا نیا اشاره کند (از طریق بازنویسی والد؛ ببینید \fBgit-rev-list\fR(1))\&. .RE .PP \-M, \-C .RS 4 تشخیص جابه‌جایی و/یا کپی را همان‌طور که در صفحه راهنمای \fBgit-diff\fR(1) شرح داده شده انجام می‌دهد، و از آن برای تولید دستورات تغییر نام و کپی در خروجی تخلیه‌شده استفاده می‌کند\&. .sp توجه داشته باشید که نسخه‌های قدیمی‌تر این دستور در صورت تعیین این گزینه‌ها خطایی صادر نمی‌کردند و نتایج نادرستی ایجاد می‌کردند\&. .RE .PP \-\-export\-marks= .RS 4 پس از تکمیل، جدول نشان‌های داخلی را در تخلیه می‌کند\&. نشان‌ها به صورت یک مورد در هر سطر با ساختار \fB:markid\fR \fBSHA\-1\fR نوشته می‌شوند\&. تنها نشان‌های مربوط به ویرایش‌ها تخلیه می‌شوند؛ نشان‌های مربوط به blobها نادیده گرفته می‌شوند\&. بک‌اندها می‌توانند از این فایل برای اعتبارسنجی واردسازی‌ها پس از تکمیل، یا ذخیره جدول نشان‌ها در سراسر اجراهای افزایشی استفاده کنند\&. از آنجا که تنها در زمان تکمیل باز و خلاصه می‌شود، همان مسیر را می‌توان با خیال راحت به \-\-import\-marks= نیز داد\&. اگر شیء جدیدی نشان‌گذاری/صادر نشده باشد، این فایل نوشته نخواهد شد\&. .RE .PP \-\-import\-marks= .RS 4 پیش از پردازش هرگونه ورودی، نشان‌های مشخص‌شده در را بارگذاری می‌کند\&. فایل ورودی باید موجود باشد، قابل خواندن باشد، و از همان قالبی که توسط \-\-export\-marks= تولید شده استفاده کند\&. .RE .PP \-\-mark\-tags .RS 4 علاوه بر نشانه‌گذاری blobها و کامیت‌ها با شناسه‌های نشان، برچسب‌ها را نیز نشانه‌گذاری می‌کند\&. این قابلیت در ترکیب با \fB\-\-export\-marks=\fR و \fB\-\-import\-marks=\fR مفید است، و همچنین برای صدور برچسب‌های تو در تو سودمند (و ضروری) است\&. به موارد دیگر آسیبی نمی‌رساند و می‌توانست حالت پیش‌فرض باشد، اما بسیاری از فرانت‌اندهای fast\-import برای پذیرش برچسب‌های دارای شناسه‌های نشان آماده نیستند\&. .sp هر کامیت (یا برچسبی) که از قبل نشانه‌گذاری شده باشد مجدداً صادر نخواهد شد\&. اگر بک‌اند از فایل \-\-import\-marks= مشابهی استفاده کند، این ویژگی با یکسان نگه داشتن نشان‌ها در طول اجراها، امکان صدور افزایشی دوطرفه مخزن را فراهم می‌سازد\&. .RE .PP \-\-fake\-missing\-tagger .RS 4 برخی مخازن قدیمی دارای برچسب‌هایی بدون ثبت‌کننده برچسب (tagger) هستند\&. پروتکل fast\-import در این خصوص سخت‌گیر بود و آن را مجاز نمی‌شمرد\&. بنابراین یک ثبت‌کننده ساختگی ایجاد می‌کند تا خروجی بتواند به کمک fast\-import وارد شود\&. .RE .PP \-\-use\-done\-feature .RS 4 جریان داده را با عبارت \fIfeature done\fR شروع کرده و آن را با دستور \fIdone\fR خاتمه دهید\&. .RE .PP \-\-no\-data .RS 4 از خروجی اشیاء blob صرف‌نظر کرده و در عوض به blobها از طریق هش اصلی SHA\-1 آنها ارجاع دهید\&. این گزینه هنگام بازنویسی ساختار دایرکتوری یا تاریخچه یک مخزن بدون دستکاری محتوای فایل‌های جداگانه کاربرد دارد\&. توجه داشته باشید که جریان حاصل تنها توسط مخزنی قابل استفاده است که از قبل شامل اشیاء لازم باشد\&. .RE .PP \-\-full\-tree .RS 4 این گزینه باعث می‌شود fast\-export یک دستورالعمل "deleteall" برای هر کامیت صادر کند و به دنبال آن لیست کاملی از تمام فایل‌های کامیت آورده شود (برخلاف حالت عادی که فقط فایل‌های متفاوت با والد اول کامیت فهرست می‌شوند)\&. .RE .PP \-\-anonymize .RS 4 محتوای مخزن را ناشناس می‌سازد در حالی که همچنان ساختار تاریخچه و درخت ذخیره‌شده را حفظ می‌کند\&. بخش \fBANONYMIZING\fR در ادامه را ببینید\&. .RE .PP \-\-anonymize\-map .RS 4 تبدیل نشانه \fI\fR به \fI\fR در خروجی ناشناس‌شده\&. اگر \fI\fR حذف شود، \fI\fR به خودش نگاشت می‌شود (یعنی ناشناس نمی‌شود)\&. بخش \fBANONYMIZING\fR در ادامه را ببینید\&. .RE .PP \-\-reference\-excluded\-parents .RS 4 به طور پیش‌فرض، اجرای دستوری مانند \fBgit\fR \fBfast\-export\fR \fBmaster~5\fR\fB\&.\&.\fR\fBmaster\fR کامیت master~5 را شامل نمی‌شود و باعث می‌شود master~4 دیگر master~5 را به عنوان والد نداشته باشد (اگرچه هر دو master~4 قدیمی و master~4 جدید تمام فایل‌های یکسان را خواهند داشت)\&. از \-\-reference\-excluded\-parents استفاده کنید تا جریان در عوض به کامیت‌های موجود در محدوده مستثنی‌شده تاریخچه با sha1sum آنها ارجاع دهد\&. توجه داشته باشید که جریان حاصل تنها توسط مخزنی قابل استفاده است که از قبل شامل کامیت‌های والد لازم باشد\&. .RE .PP \-\-show\-original\-ids .RS 4 افزودن یک دستورالعمل اضافی به خروجی برای کامیت‌ها و blobها، به صورت \fBoriginal\-oid\fR \fI\fR\&. در حالی که چنین دستورالعمل‌هایی احتمالاً توسط واردکنندگانی مانند git\-fast\-import نادیده گرفته می‌شوند، ممکن است برای فیلترهای واسط (مانند بازنویسی پیام‌های کامیت که به کامیت‌های قدیمی‌تر اشاره دارند، یا حذف blobها بر اساس شناسه) مفید باشند\&. .RE .PP \-\-reencode=(yes|no|abort) .RS 4 نحوه مدیریت هدر \fBencoding\fR در اشیاء کامیت را مشخص می‌کند\&. هنگام درخواست \fIabort\fR (که حالت پیش‌فرض است)، این برنامه هنگام مواجهه با چنین شیء کامیتی متوقف می‌شود\&. با \fIyes\fR، پیام کامیت مجدداً به UTF\-8 کدگذاری می‌شود\&. با \fIno\fR، کدگذاری اصلی حفظ خواهد شد\&. .RE .PP \-\-refspec .RS 4 اعمال refspec مشخص‌شده بر روی هر مرجع صادرشده\&. چندین مورد از آن را می‌توان مشخص کرد\&. .RE .PP [\&...] .RS 4 فهرستی از آرگومان‌ها، قابل قبول برای \fIgit rev\-parse\fR و \fIgit rev\-list\fR، که اشیاء و مراجع خاص را برای صدور مشخص می‌کند\&. به عنوان مثال، \fBmaster~10\fR\fB\&.\&.\fR\fBmaster\fR باعث می‌شود مرجع جاری master به همراه تمام اشیاء اضافه‌شده از دهمین کامیت نیا صادر شود و (مگر اینکه گزینه \-\-reference\-excluded\-parents تعیین شده باشد) تمام فایل‌های مشترک با master~9 و master~10 صادر گردند\&. .RE .SH "مثال‌ها (EXAMPLES)" .sp .if n \{\ .RS 4 .\} .nf $ git fast\-export \-\-all | (cd /empty/repository && git fast\-import) .fi .if n \{\ .RE .\} .sp .sp این دستور کل مخزن را صادر کرده و آن را به مخزن خالی موجود وارد می‌کند\&. به جز بازکدگذاری کامیت‌هایی که در قالب UTF\-8 نیستند، یک بازتاب نظیر به نظیر خواهد بود\&. .sp .if n \{\ .RS 4 .\} .nf $ git fast\-export master~5\&.\&.master | sed "s|refs/heads/master|refs/heads/other|" | git fast\-import .fi .if n \{\ .RE .\} .sp .sp این دستور یک شاخه جدید به نام \fIother\fR از \fImaster~5\&.\&.master\fR ایجاد می‌کند (یعنی اگر \fImaster\fR دارای تاریخچه خطی باشد، ۵ کامیت آخر را در نظر می‌گیرد)\&. .sp توجه داشته باشید که این فرض می‌کند هیچ‌یک از blobها و پیام‌های کامیت ارجاع‌شده در آن بازه ویرایشی شامل رشته \fIrefs/heads/master\fR نباشند\&. .SH "ناشناس‌سازی (ANONYMIZING)" .sp اگر گزینه \fB\-\-anonymize\fR داده شود، گیت تلاش می‌کند تمام اطلاعات شناسایی را از مخزن حذف کند در حالی که همچنان ساختار تاریخچه و الگوهای درخت ذخیره‌شده را برای بازتولید برخی از باگ‌ها حفظ می‌نماید\&. هدف این است که یک باگ گیت که در یک مخزن خصوصی پیدا شده است در مخزن ناشناس‌شده نیز پایدار بماند، و دومی بتواند با توسعه‌دهندگان گیت جهت کمک به رفع باگ به اشتراک گذاشته شود\&. .sp با این گزینه، گیت تمام نام‌های مراجع، مسیرها، محتوای blob، پیام‌های کامیت و برچسب، نام‌ها و نشانی‌های ایمیل را در خروجی با داده‌های ناشناس جایگزین می‌کند\&. دو نمونه از یک رشته یکسان به طور معادل جایگزین می‌شوند (مثلاً دو کامیت با نویسنده یکسان در خروجی دارای نویسنده ناشناس یکسانی خواهند بود، اما هیچ شباهتی به رشته نویسنده اصلی نخواهد داشت)\&. ارتباط میان کامیت‌ها، شاخه‌ها و برچسب‌ها حفظ می‌شود، همچنین برچسب‌های زمانی کامیت (اما پیام‌های کامیت و نام مراجع شباهتی به نسخه‌های اصلی ندارند)\&. ترکیب نسبی درخت حفظ می‌شود (برای مثال، اگر یک درخت ریشه با ۱۰ فایل و ۳ درخت دارید، خروجی نیز به همان شکل خواهد بود)، اما نام‌ها و محتوای فایل‌ها جایگزین خواهند شد\&. .sp اگر فکر می‌کنید باگی در گیت یافته‌اید، می‌توانید با صدور یک جریان ناشناس از کل مخزن شروع کنید: .sp .if n \{\ .RS 4 .\} .nf $ git fast\-export \-\-anonymize \-\-all >anon\-stream .fi .if n \{\ .RE .\} .sp .sp سپس بررسی و تأیید کنید که آیا باگ در مخزن ایجادشده از آن جریان نیز پابرجا می‌ماند (بسیاری از اشکالات باقی نخواهند ماند، چرا که واقعاً به محتوای دقیق مخزن وابسته‌اند): .sp .if n \{\ .RS 4 .\} .nf $ git init anon\-repo $ cd anon\-repo $ git fast\-import <\&.\&./anon\-stream $ \&.\&.\&. test your bug \&.\&.\&. .fi .if n \{\ .RE .\} .sp .sp اگر مخزن ناشناس‌شده باگ را نشان دهد، ممکن است ارزش داشته باشد که \fBanon\-stream\fR را همراه با یک گزارش باگ معمولی به اشتراک بگذارید\&. توجه داشته باشید که جریان ناشناس بسیار خوب فشرده می‌شود، بنابراین فشرده‌سازی آن با gzip توصیه می‌شود\&. اگر می‌خواهید جریان را بررسی کنید تا ببینید حاوی داده‌های خصوصی نباشد، می‌توانید قبل از ارسال مستقیماً آن را بررسی نمایید\&. همچنین ممکن است بخواهید موارد زیر را امتحان کنید: .sp .if n \{\ .RS 4 .\} .nf $ perl \-pe \*(Aqs/\ed+/X/g\*(Aq stream .fi .if n \{\ .RE .\} .sp .sp پس از واردسازی جریان، سپس می‌توانید \fBgit\fR \fBrev\-list\fR \fBfoo\fR \fB\-\-\fR \fBbar\&.c\fR را در مخزن ناشناس‌شده اجرا کنید\&. .sp توجه داشته باشید که مسیرها و نام مراجع در مرزهای اسلش به نشانه‌ها تقسیم می‌شوند\&. دستور فوق \fBsubdir/secret\&.c\fR را به چیزی شبیه \fBpath123/bar\&.c\fR ناشناس می‌کند؛ سپس می‌توانید \fBbar\&.c\fR را در مخزن ناشناس جستجو کنید تا نام مسیر نهایی مشخص شود\&. .sp برای ساده‌تر کردن ارجاع به نام مسیر نهایی، می‌توانید هر بخش مسیر را نگاشت کنید؛ بنابراین اگر \fBsubdir\fR را نیز به \fBpublicdir\fR ناشناس کنید، نام مسیر نهایی \fBpublicdir/bar\&.c\fR خواهد بود\&. .SH "محدودیت‌ها (LIMITATIONS)" .sp از آنجا که \fIgit fast\-import\fR نمی‌تواند درخت‌ها را برچسب‌گذاری کند، قادر نخواهید بود مخزن linux\&.git را به طور کامل صادر کنید، زیرا حاوی برچسبی است که به جای یک کامیت به یک درخت اشاره دارد\&. .SH "همچنین ببینید (SEE ALSO)" .sp \fBgit-fast-import\fR(1) .SH "GIT" .sp بخشی از مجموعه \fBgit\fR(1)