'\" t .\" Title: git-svn .\" 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\-SVN" "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-svn \- پل ارتباطی دومنظوره میان مخازن ساب‌ورژن و گیت .SH "خلاصه دستور (SYNOPSIS)" .sp .nf \fIgit svn\fR [] [] .fi .sp .SH "توضیحات (DESCRIPTION)" .sp ابزار \fIgit svn\fR مجرایی ساده برای انتقال مجموعه‌تغییرات (changesetها) میان ساب‌ورژن و گیت است\&. این ابزار جریانی دوطرفه از تغییرات را میان یک مخزن ساب‌ورژن و یک مخزن گیت فراهم می‌کند\&. .sp \fIgit svn\fR می‌تواند با استفاده از گزینه \-\-stdlayout یک مخزن استاندارد ساب‌ورژن را که از ساختار رایج "trunk/branches/tags" پیروی می‌کند، ردگیری کند\&. همچنین با استفاده از گزینه‌های \-T/\-t/\-b می‌تواند شاخه‌ها و برچسب‌ها را در هر ساختار و چیدمانی دنبال کند (گزینه‌های زیر برای \fIinit\fR و همچنین دستور \fIclone\fR را ببینید)\&. .sp پس از ردگیری یک مخزن ساب‌ورژن (با هر یک از روش‌های فوق)، می‌توان مخزن گیت را با استفاده از دستور \fIfetch\fR از ساب‌ورژن به‌روزرسانی کرد و ساب‌ورژن را نیز با استفاده از دستور \fIdcommit\fR از طریق گیت به‌روز نمود\&. .SH "دستورها (COMMANDS)" .PP \fIinit\fR .RS 4 یک مخزن خالی گیت را به همراه دایرکتوری‌های فراداده (متادیتا) اضافی برای \fIgit svn\fR مقداردهی اولیه می‌کند\&. نشانی وب (URL) ساب‌ورژن می‌تواند به عنوان یک آرگومان خط فرمان، یا به عنوان آرگومان‌های کامل URL برای گزینه‌های \-T/\-t/\-b مشخص شود\&. به صورت اختیاری، دایرکتوری مقصد برای انجام عملیات می‌تواند به عنوان آرگومان دوم تعیین گردد\&. این دستور به طور معمول دایرکتوری جاری را مقداردهی اولیه می‌کند\&. .PP \-T, \-\-trunk=, \-t, \-\-tags=, \-b, \-\-branches=, \-s, \-\-stdlayout .RS 4 این‌ها گزینه‌های اختیاری خط فرمان برای init هستند\&. هر یک از این گزینه‌ها می‌توانند به یک مسیر نسبی در مخزن (\-\-tags=project/tags) یا یک URL کامل (\-\-tags=https://foo\&.org/project/tags) اشاره کنند\&. در صورتی که مخزن ساب‌ورژن شما برچسب‌ها یا شاخه‌ها را در چندین مسیر قرار داده باشد، می‌توانید بیش از یک گزینه \-\-tags و/یا \-\-branches را مشخص کنید\&. گزینه \-\-stdlayout روشی کوتاه برای تنظیم trunk، tags و branches به عنوان مسیرهای نسبی است که حالت پیش‌فرض ساب‌ورژن می‌باشد\&. اگر هر یک از گزینه‌های دیگر نیز همراه با آن داده شوند، اولویت با آن‌ها خواهد بود\&. .RE .PP \-\-no\-metadata .RS 4 گزینه \fInoMetadata\fR را در پیکربندی [svn\-remote] تنظیم می‌کند\&. استفاده از این گزینه توصیه نمی‌شود؛ لطفاً پیش از استفاده از این گزینه، بخش \fIsvn\&.noMetadata\fR در این صفحه راهنما را مطالعه کنید\&. .RE .PP \-\-use\-svm\-props .RS 4 گزینه \fIuseSvmProps\fR را در پیکربندی [svn\-remote] تنظیم می‌کند\&. .RE .PP \-\-use\-svnsync\-props .RS 4 گزینه \fIuseSvnsyncProps\fR را در پیکربندی [svn\-remote] تنظیم می‌کند\&. .RE .PP \-\-rewrite\-root= .RS 4 گزینه \fIrewriteRoot\fR را در پیکربندی [svn\-remote] تنظیم می‌کند\&. .RE .PP \-\-rewrite\-uuid= .RS 4 گزینه \fIrewriteUUID\fR را در پیکربندی [svn\-remote] تنظیم می‌کند\&. .RE .PP \-\-username= .RS 4 نام کاربری را برای پروتکل‌های انتقالی که احراز هویت آن‌ها توسط SVN مدیریت می‌شود (مانند http، https و svn ساده) مشخص می‌کند\&. برای سایر پروتکل‌های انتقال (مانند \fBsvn+ssh://\fR)، باید نام کاربری را در خود URL بگنجانید، مانند: \fBsvn+ssh://foo@svn\&.bar\&.com/project\fR .RE .PP \-\-prefix= .RS 4 این گزینه امکان تعیین یک پیشوند را فراهم می‌کند که در صورت مشخص شدن trunk/branches/tags به ابتدای نام‌های ریموت افزوده می‌شود\&. این پیشوند به طور خودکار شامل یک اسلش پایانی نیست، بنابراین اگر چنین چیزی می‌خواهید، حتماً آن را در آرگومان بگنجانید\&. اگر \-\-branches/\-b مشخص شده باشد، پیشوند الزاماً باید شامل اسلش پایانی باشد\&. در هر صورت، تنظیم یک پیشوند (همراه با اسلش پایانی) اکیداً توصیه می‌شود، زیرا در این صورت ارجاعات ردگیری SVN شما در "refs/remotes/$prefix/*" قرار خواهند گرفت که با ساختار ارجاعات ردگیری ریموت خود گیت (refs/remotes/$remote/*) سازگار است\&. تنظیم پیشوند همچنین در صورتی که بخواهید چندین پروژه را که در یک مخزن مشترک قرار دارند ردگیری کنید، مفید است\&. این پیشوند به صورت پیش‌فرض روی \fIorigin/\fR تنظیم شده است\&. .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 پیش از نگارش ۲\&.۰ گیت، پیشوند پیش‌فرض "" (بدون پیشوند) بود\&. این بدان معنا بود که ارجاعات ردگیری SVN در "refs/remotes/*" قرار می‌گرفتند که با نحوه سازمان‌دهی ارجاعات ردگیری ریموت در خود گیت ناسازگار بود\&. اگر همچنان همان پیش‌فرض قدیمی را می‌خواهید، می‌توانید با پاس دادن \fB\-\-prefix\fR "" در خط فرمان به آن برسید (اگر Getopt::Long پرل شما نسخه‌ای کمتر از ۲\&.۳۷ باشد ممکن است \fB\-\-prefix=\fR"" کار نکند)\&. .sp .5v .RE .RE .PP \-\-ignore\-refs= .RS 4 هنگامی که این عبارت باقاعده (regex) به \fIinit\fR یا \fIclone\fR پاس داده شود، به عنوان یک کلید پیکربندی ذخیره خواهد شد\&. برای توضیحات مربوط به \fB\-\-ignore\-refs\fR دستور \fIfetch\fR را ببینید\&. .RE .PP \-\-ignore\-paths= .RS 4 هنگامی که این عبارت باقاعده به \fIinit\fR یا \fIclone\fR پاس داده شود، به عنوان یک کلید پیکربندی ذخیره خواهد شد\&. برای توضیحات مربوط به \fB\-\-ignore\-paths\fR دستور \fIfetch\fR را ببینید\&. .RE .PP \-\-include\-paths= .RS 4 هنگامی که این عبارت باقاعده به \fIinit\fR یا \fIclone\fR پاس داده شود، به عنوان یک کلید پیکربندی ذخیره خواهد شد\&. برای توضیحات مربوط به \fB\-\-include\-paths\fR دستور \fIfetch\fR را ببینید\&. .RE .PP \-\-no\-minimize\-url .RS 4 هنگام ردگیری چندین دایرکتوری (با استفاده از گزینه‌های \-\-stdlayout، \-\-branches یا \-\-tags)، ابزار git svn تلاش می‌کند تا به ریشه (یا بالاترین سطح مجاز) مخزن ساب‌ورژن متصل شود\&. این رفتار پیش‌فرض باعث می‌شود در صورت جابجایی کل پروژه‌ها در یک مخزن، تاریخچه به شکل بهتری دنبال شود، اما ممکن است در مخازنی که محدودیت‌های دسترسی خواندن دارند مشکلاتی ایجاد کند\&. ارسال گزینه \fB\-\-no\-minimize\-url\fR به git svn اجازه می‌دهد تا URLها را همان‌طور که هستند و بدون تلاش برای اتصال به دایرکتوری سطح بالاتر بپذیرد\&. این گزینه زمانی که فقط یک URL/شاخه ردگیری می‌شود به طور پیش‌فرض غیرفعال است (چرا که فایده چندانی ندارد)\&. .RE .RE .PP \fIfetch\fR .RS 4 واکشی بازبینی‌های واکشی‌نشده از ریموت Subversion تحت ردیابی\&. نام بخش [svn\-remote "\&..."] در فایل $GIT_DIR/config می‌تواند به عنوان یک آرگومان اختیاری در خط فرمان مشخص شود\&. .sp این دستور در صورت نیاز به طور خودکار rev_map را به‌روزرسانی می‌کند (برای جزئیات بیشتر به \fI$GIT_DIR/svn/**/\&.rev_map\&.*\fR در بخش FILES در ادامه مراجعه کنید)\&. .PP \-\-localtime .RS 4 زمان کامیت‌های Git را به‌جای UTC در منطقه زمانی محلی ذخیره می‌کند\&. این کار باعث می‌شود \fIgit log\fR (حتی بدون \-\-date=local) همان زمان‌هایی را نشان دهد که \fBsvn\fR \fBlog\fR در منطقه زمانی محلی نشان می‌دهد\&. .sp این گزینه تداخلی در تعامل با مخزن Subversion که از آن کلون گرفته‌اید ایجاد نمی‌کند، اما اگر می‌خواهید مخزن محلی Git شما بتواند با مخزن محلی Git شخص دیگری تعامل داشته باشد، یا نباید از این گزینه استفاده کنید یا باید هر دو نفر در یک منطقه زمانی محلی یکسان از آن استفاده نمایید\&. .RE .PP \-\-parent .RS 4 واکشی تنها از والد SVN مربوط به HEAD فعلی\&. .RE .PP \-\-ignore\-refs= .RS 4 نادیده‌گرفتن ارجاع‌ها (refها) برای شاخه‌ها یا برچسب‌هایی که با عبارت باقاعده Perl مطابقت دارند\&. یک «ادعای پیش‌نگری منفی» (negative look\-ahead assertion) مانند \fB^refs/remotes/origin/\fR(?!tags/wanted\-tag|\fBwanted\-branch\fR)\fB\&.*$\fR می‌تواند برای مجاز کردن تنها refهای خاصی استفاده شود\&. .sp .if n \{\ .RS 4 .\} .nf config key: svn\-remote\&.\&.ignore\-refs .fi .if n \{\ .RE .\} .sp اگر کلید پیکربندی ignore\-refs تنظیم شده باشد و گزینه خط فرمان نیز داده شود، هر دو عبارت باقاعده استفاده خواهند شد\&. .RE .PP \-\-ignore\-paths= .RS 4 این گزینه امکان تعیین یک عبارت باقاعده Perl را فراهم می‌کند که باعث نادیده گرفتن و رد شدن از تمامی مسیرهای منطبق هنگام دریافت (checkout) از SVN می‌شود\&. گزینه \fB\-\-ignore\-paths\fR باید با هر \fIfetch\fR (شامل واکشی‌های خودکار ناشی از \fIclone\fR، \fIdcommit\fR، \fIrebase\fR و غیره) در یک مخزن معین مطابقت داشته باشد\&. .sp .if n \{\ .RS 4 .\} .nf config key: svn\-remote\&.\&.ignore\-paths .fi .if n \{\ .RE .\} .sp اگر کلید پیکربندی ignore\-paths تنظیم شده باشد و گزینه خط فرمان نیز داده شود، هر دو عبارت باقاعده استفاده خواهند شد\&. .sp مثال‌ها: .PP نادیده‌گرفتن دایرکتوری "doc*" برای هر واکشی .RS 4 .sp .if n \{\ .RS 4 .\} .nf \-\-ignore\-paths="^doc" .fi .if n \{\ .RE .\} .sp .RE .PP نادیده‌گرفتن "branches" و "tags" در دایرکتوری‌های سطح اول .RS 4 .sp .if n \{\ .RS 4 .\} .nf \-\-ignore\-paths="^[^/]+/(?:branches|tags)" .fi .if n \{\ .RE .\} .sp .RE .RE .PP \-\-include\-paths= .RS 4 این گزینه امکان تعیین یک عبارت باقاعده Perl را فراهم می‌کند که باعث می‌شود هنگام دریافت (checkout) از SVN فقط مسیرهای منطبق گنجانده شوند\&. گزینه \fB\-\-include\-paths\fR باید با هر \fIfetch\fR (شامل واکشی‌های خودکار ناشی از \fIclone\fR، \fIdcommit\fR، \fIrebase\fR و غیره) در یک مخزن معین مطابقت داشته باشد\&. \fB\-\-ignore\-paths\fR بر \fB\-\-include\-paths\fR اولویت دارد\&. .sp .if n \{\ .RS 4 .\} .nf config key: svn\-remote\&.\&.include\-paths .fi .if n \{\ .RE .\} .sp .RE .PP \-\-log\-window\-size= .RS 4 هنگام پیمایش تاریخچه Subversion، به ازای هر درخواست مدخل لاگ را واکشی می‌کند\&. مقدار پیش‌فرض 100 است\&. برای مخازن بسیار بزرگ Subversion، ممکن است مقادیر بزرگ‌تری نیاز باشد تا \fIclone\fR/\fIfetch\fR در زمانی معقول به پایان برسد\&. اما مقادیر بیش از حد بزرگ ممکن است منجر به مصرف بیشتر حافظه و اتمام مهلت درخواست (timeout) شود\&. .RE .RE .PP \fIclone\fR .RS 4 دستورات \fIinit\fR و \fIfetch\fR را اجرا می‌کند\&. این دستور به طور خودکار دایرکتوری‌ای را بر اساس نام پایه (basename) نشانی URL ارسال‌شده به آن ایجاد می‌کند؛ یا در صورتی که آرگومان دومی ارسال شود، یک دایرکتوری ایجاد کرده و درون آن کار خواهد کرد\&. این دستور تمام آرگومان‌هایی را که دستورات \fIinit\fR و \fIfetch\fR می‌پذیرند قبول می‌کند؛ به استثنای \fB\-\-fetch\-all\fR و \fB\-\-parent\fR\&. پس از این‌که یک مخزن کلون شد، دستور \fIfetch\fR قادر خواهد بود بدون تأثیر بر درخت کاری (working tree)، بازبینی‌ها را به‌روزرسانی کند؛ و دستور \fIrebase\fR قادر خواهد بود درخت کاری را با آخرین تغییرات به‌روز کند\&. .PP \-\-preserve\-empty\-dirs .RS 4 برای هر دایرکتوری خالی که از Subversion واکشی می‌شود، یک فایل نگه‌دارنده مکان (placeholder) در مخزن محلی Git ایجاد می‌کند\&. این شامل دایرکتوری‌هایی نیز می‌شود که با حذف تمام ورودی‌ها در مخزن Subversion خالی شده‌اند (اما خود دایرکتوری حذف نشده است)\&. فایل‌های نگه‌دارنده مکان نیز ردیابی شده و در صورت عدم نیاز حذف خواهند شد\&. .RE .PP \-\-placeholder\-filename= .RS 4 نام فایل‌های نگه‌دارنده مکان که توسط \-\-preserve\-empty\-dirs ایجاد می‌شوند را تنظیم می‌کند\&. پیش‌فرض: "\&.gitignore" .RE .RE .PP \fIrebase\fR .RS 4 این دستور بازبینی‌ها را از والد SVN شاخص HEAD جاری واکشی کرده و تغییرات جاری (کامیت‌نشده در SVN) را بر مبنای آن بازسازی (rebase) می‌کند\&. .sp این دستور مشابه \fBsvn\fR \fBupdate\fR یا \fIgit pull\fR عمل می‌کند، با این تفاوت که جهت سهولت در اجرای dcommit با \fIgit svn\fR، تاریخچه خطی را با \fIgit rebase\fR به‌جای \fIgit merge\fR حفظ می‌کند\&. .sp این دستور تمام گزینه‌هایی را که \fIgit svn fetch\fR و \fIgit rebase\fR می‌پذیرند قبول می‌کند\&. با این حال، \fB\-\-fetch\-all\fR تنها از [svn\-remote] جاری واکشی می‌کند، نه از تمامی تعاریف [svn\-remote]\&. .sp مشابه \fIgit rebase\fR؛ این دستور مستلزم آن است که درخت کاری تمیز باشد و هیچ تغییر کامیت‌نشده‌ای نداشته باشد\&. .sp این دستور در صورت نیاز به طور خودکار rev_map را به‌روزرسانی می‌کند (برای جزئیات بیشتر به \fI$GIT_DIR/svn/**/\&.rev_map\&.*\fR در بخش FILES در ادامه مراجعه کنید)\&. .PP \-l, \-\-local .RS 4 واکشی را از راه دور انجام نمی‌دهد؛ تنها \fIgit rebase\fR را در برابر آخرین کامیت واکشی‌شده از SVN بالادست اجرا می‌کند\&. .RE .RE .PP \fIdcommit\fR .RS 4 هر diff (تغییرات) را از شاخه جاری مستقیماً در مخزن SVN کامیت می‌کند و سپس عملیات rebase یا reset را انجام می‌دهد (بسته به اینکه آیا تفاوتی میان SVN و head وجود دارد یا خیر)\&. این کار به ازای هر کامیت در Git، یک ویرایش (revision) در SVN ایجاد خواهد کرد\&. .sp هنگامی که نام اختیاری یک شاخه Git (یا نام یک شیء کامیت Git) به عنوان آرگومان مشخص شود، این زیردستور روی شاخه مشخص‌شده کار می‌کند، نه روی شاخه جاری\&. .sp استفاده از \fIdcommit\fR بر \fIset\-tree\fR (در ادامه) ترجیح داده می‌شود\&. .PP \-\-no\-rebase .RS 4 پس از کامیت کردن، عملیات rebase یا reset را انجام ندهید\&. .RE .PP \-\-commit\-url .RS 4 در این نشانی وب (URL) ساب‌ورژن (مسیر کامل) کامیت می‌کند\&. این گزینه برای این منظور در نظر گرفته شده است تا مخازن موجود \fIgit svn\fR که با یک روش انتقال (مثلاً \fBsvn://\fR یا \fBhttp://\fR برای خواندن ناشناس) ایجاد شده‌اند، در صورتی که کاربر بعداً به روش انتقال دیگری (مثلاً \fBsvn+ssh://\fR یا \fBhttps://\fR) برای کامیت کردن دسترسی پیدا کند، مجدداً قابل استفاده باشند\&. .sp .if n \{\ .RS 4 .\} .nf config key: svn\-remote\&.\&.commiturl config key: svn\&.commiturl (overwrites all svn\-remote\&.\&.commiturl options) .fi .if n \{\ .RE .\} .sp توجه داشته باشید که نشانی وب (URL) ساب‌ورژن در کلید پیکربندی commiturl شامل شاخه SVN نیز می‌شود\&. اگر ترجیح می‌دهید نشانی کامیت را برای کل یک مخزن SVN تنظیم کنید، به‌جای آن از svn\-remote\&.\&.pushurl استفاده نمایید\&. .sp استفاده از این گزینه برای هر هدف دیگری (نپرسید چرا) اکیداً منع شده است\&. .RE .PP \-\-mergeinfo= .RS 4 اطلاعات ادغام (merge) ارائه‌شده را در طول dcommit اضافه می‌کند (برای نمونه \fB\-\-mergeinfo=\fR"/branches/foo:1\-10")\&. همه نسخه‌های سرور svn می‌توانند این اطلاعات را (به صورت یک ویژگی یا property) ذخیره کنند، و کلاینت‌های svn از نسخه 1\&.5 به بعد می‌توانند از آن استفاده نمایند\&. برای مشخص کردن اطلاعات ادغام از چندین شاخه، از یک نویسه فاصله منفرد میان شاخه‌ها استفاده کنید (\fB\-\-mergeinfo=\fR"/branches/foo:1\-10 \fB/branches/bar:3\fR,5\-6,8")\&. .sp .if n \{\ .RS 4 .\} .nf config key: svn\&.pushmergeinfo .fi .if n \{\ .RE .\} .sp این گزینه باعث می‌شود git\-svn تلاش کند در صورت امکان، ویژگی svn:mergeinfo را به‌طور خودکار در مخزن SVN مقداردهی نماید\&. در حال حاضر، این کار تنها هنگام dcommit کردن ادغام‌های غیر رو به جلو (non\-fast\-forward) که در آن‌ها همه والدین به جز والد اول قبلاً در SVN ارسال (push) شده‌اند، امکان‌پذیر است\&. .RE .PP \-\-interactive .RS 4 از کاربر درخواست تأیید می‌کند که آیا مجموعه وصله (patch set) واقعاً باید به SVN ارسال شود یا خیر\&. برای هر وصله، می‌توان با "yes" (پذیرش این وصله)، "no" (صرف‌نظر از این وصله)، "all" (پذیرش همه وصله‌ها) یا "quit" پاسخ داد\&. .sp اگر پاسخ "no" یا "quit" باشد، \fIgit svn dcommit\fR بدون کامیت کردن چیزی در SVN، بلافاصله خاتمه می‌یابد\&. .RE .RE .PP \fIbranch\fR .RS 4 یک شاخه در مخزن SVN ایجاد می‌کند\&. .PP \-m, \-\-message .RS 4 امکان تعیین پیام کامیت را فراهم می‌سازد\&. .RE .PP \-t, \-\-tag .RS 4 با استفاده از tags_subdir به‌جای branches_subdir مشخص‌شده در هنگام git svn init، یک برچسب ایجاد می‌کند\&. .RE .PP \-d, \-\-destination= .RS 4 اگر بیش از یک گزینه \-\-branches (یا \-\-tags) به دستور \fIinit\fR یا \fIclone\fR داده شده باشد، باید مکان شاخه (یا برچسبی) را که مایلید در مخزن SVN ایجاد شود ارائه دهید\&. شناسه مشخص می‌کند که از کدام مسیر برای ایجاد شاخه یا برچسب استفاده شود و باید با الگوی سمت چپ یکی از refspecهای پیکربندی‌شده برای شاخه‌ها یا برچسب‌ها مطابقت داشته باشد\&. می‌توانید این refspecها را با دستورهای زیر مشاهده کنید: .sp .if n \{\ .RS 4 .\} .nf git config \-\-get\-all svn\-remote\&.\&.branches git config \-\-get\-all svn\-remote\&.\&.tags .fi .if n \{\ .RE .\} .sp که در آن نام مخزن SVN است که توسط گزینه \-R در دستور \fIinit\fR مشخص شده است (یا به‌طور پیش‌فرض "svn")\&. .RE .PP \-\-username .RS 4 نام کاربری SVN را برای انجام کامیت تعیین می‌کند\&. این گزینه بر ویژگی پیکربندی \fIusername\fR اولویت دارد\&. .RE .PP \-\-commit\-url .RS 4 از نشانی وب (URL) مشخص‌شده برای اتصال به مخزن مقصد ساب‌ورژن استفاده می‌کند\&. این گزینه در شرایطی کاربرد دارد که مخزن مبدأ SVN فقط‌خواندنی است\&. این گزینه بر ویژگی پیکربندی \fIcommiturl\fR اولویت دارد\&. .sp .if n \{\ .RS 4 .\} .nf git config \-\-get\-all svn\-remote\&.\&.commiturl .fi .if n \{\ .RE .\} .RE .PP \-\-parents .RS 4 پوشه‌های والد را ایجاد می‌کند\&. این پارامتر معادل پارامتر \-\-parents در دستورهای svn cp بوده و برای ساختارهای غیر استاندارد مخزن مفید است\&. .RE .RE .PP \fItag\fR .RS 4 یک برچسب در مخزن SVN ایجاد می‌کند\&. این دستور صورت خلاصه برای \fIbranch \-t\fR است\&. .RE .PP \fIlog\fR .RS 4 این دستور باید یافتن پیام‌های تاریخچه svn (یا svn log) را هنگامی که کاربران svn به شماره‌های \-r/\-\-revision اشاره می‌کنند، آسان کند\&. .sp ویژگی‌های زیر از \(oqsvn log\(cq پشتیبانی می‌شوند: .PP \-r [:], \-\-revision=[:] .RS 4 پشتیبانی می‌شود، آرگومان‌های غیرعددی پشتیبانی نمی‌شوند: HEAD، NEXT، BASE، PREV و غیره \&... .RE .PP \-v, \-\-verbose .RS 4 کاملاً با خروجی \-\-verbose در svn log سازگار نیست، اما به اندازه معقولی نزدیک است\&. .RE .PP \-\-limit= .RS 4 با \-\-max\-count یکسان نیست، کامیت‌های ادغام‌شده/مستثنی‌شده را به حساب نمی‌آورد .RE .PP \-\-incremental .RS 4 پشتیبانی می‌شود .RE .sp قابلیت‌های جدید: .PP \-\-show\-commit .RS 4 شناسه sha1 کامیت Git را نیز نمایش می‌دهد .RE .PP \-\-oneline .RS 4 نسخه ما از \-\-pretty=oneline .RE .sp .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 خود SVN زمان‌ها را تنها بر حسب UTC و نه چیز دیگری ذخیره می‌کند\&. کلاینت استاندارد svn زمان UTC را به زمان محلی (یا بر اساس متغیر محیطی TZ=) تبدیل می‌کند\&. این دستور نیز رفتار مشابهی دارد\&. .sp .5v .RE هر آرگومان دیگری مستقیماً به \fIgit log\fR منتقل می‌شود\&. .RE .PP \fIblame\fR .RS 4 نمایش می‌دهد که چه ویرایش (revision) و نویسنده‌ای آخرین بار هر خط از یک فایل را تغییر داده است\&. خروجی این حالت به‌طور پیش‌فرض از نظر قالب با خروجی \(oqsvn blame\(cq سازگار است\&. همانند دستور SVN blame، تغییرات محلی کامیت‌نشده در درخت کاری نادیده گرفته می‌شوند؛ نسخه‌ای از فایل که در ویرایش HEAD قرار دارد حاشیه‌نویسی (ردیابی) می‌شود\&. آرگومان‌های ناشناخته مستقیماً به \fIgit blame\fR ارسال می‌شوند\&. .PP \-\-git\-format .RS 4 خروجی را در همان قالب \fIgit blame\fR، اما با شماره‌های ویرایش SVN به‌جای هَش‌های کامیت Git تولید می‌کند\&. در این حالت، تغییراتی که در SVN کامیت نشده‌اند (شامل ویرایش‌های محلی رونوشت کاری) به عنوان ویرایش 0 نمایش داده می‌شوند\&. .RE .RE .PP \fIfind\-rev\fR .RS 4 هنگامی که یک شماره ویرایش SVN به فرم \fIrN\fR داده شود، هش کامیت Git متناظر را برمی‌گرداند (به‌صورت اختیاری می‌تواند با یک شیء شبه‌درخت (tree\-ish) همراه باشد تا مشخص شود کدام شاخه باید جستجو شود)\&. هنگامی که یک شیء شبه‌درخت داده شود، شماره ویرایش SVN متناظر را بازمی‌گرداند\&. .PP \-B, \-\-before .RS 4 در صورت دریافت یک ویرایش SVN، تطابق دقیق را الزامی نمی‌داند؛ در عوض کامیتی را پیدا می‌کند که متناظر با وضعیت مخزن SVN (روی شاخه جاری) در ویرایش مشخص‌شده باشد\&. .RE .PP \-A, \-\-after .RS 4 در صورت دریافت یک ویرایش SVN، تطابق دقیق را الزامی نمی‌داند؛ اگر تطابق دقیقی وجود نداشته باشد، نزدیک‌ترین مورد را با جستجو رو به جلو در تاریخچه بازمی‌گرداند\&. .RE .RE .PP \fIset\-tree\fR .RS 4 بهتر است در نظر داشته باشید که به‌جای این دستور از \fIdcommit\fR استفاده کنید\&. اشیاء کامیت یا درخت مشخص‌شده را در SVN کامیت می‌کند\&. این دستور به به‌روز بودن داده‌های واکشی‌شده (fetch) وارداتی شما متکی است\&. هنگام کامیت به SVN، این دستور مطلقاً هیچ تلاشی برای وصله‌زدن انجام نمی‌دهد؛ بلکه صرفاً فایل‌ها را با فایل‌های مشخص‌شده در درخت یا کامیت بازنویسی می‌کند\&. فرض بر این است که تمامی ادغام‌ها مستقل از توابع \fIgit svn\fR انجام شده‌اند\&. .RE .PP \fIcreate\-ignore\fR .RS 4 ویژگی‌های svn:ignore و svn:global\-ignores را به‌صورت بازگشتی روی دایرکتوری‌ها پیدا کرده و فایل‌های \&.gitignore متناظر را ایجاد می‌کند\&. فایل‌های حاصل برای کامیت شدن مرحله‌بندی (stage) می‌شوند، اما کامیت نمی‌گردند\&. برای ارجاع به یک ویرایش خاص از \-r/\-\-revision استفاده کنید\&. .RE .PP \fIshow\-ignore\fR .RS 4 ویژگی‌های svn:ignore و svn:global\-ignores را به‌صورت بازگشتی در دایرکتوری‌ها پیدا کرده و فهرست می‌کند\&. خروجی برای اضافه کردن به انتهای فایل $GIT_COMMON_DIR/info/exclude مناسب است\&. .RE .PP \fImkdirs\fR .RS 4 بر اساس اطلاعات موجود در فایل‌های $GIT_DIR/svn//unhandled\&.log تلاش می‌کند تا پوشه‌های خالی را که هسته گیت (core Git) قادر به ردیابی آن‌ها نیست بازسازی کند\&. پوشه‌های خالی هنگام استفاده از "git svn clone" و "git svn rebase" به‌طور خودکار بازسازی می‌شوند، بنابراین "mkdirs" برای استفاده پس از دستوراتی مانند "git checkout" یا "git reset" در نظر گرفته شده است\&. (برای اطلاعات بیشتر به گزینه فایل پیکربندی svn\-remote\&.\&.automkdirs مراجعه کنید\&.) .RE .PP \fIcommit\-diff\fR .RS 4 تفاوت (diff) میان دو آرگومان شبه‌درخت (tree\-ish) را از خط فرمان کامیت می‌کند\&. این دستور به قرار داشتن درون مخزنی که با \fBgit\fR \fBsvn\fR \fBinit\fR مقداردهی اولیه شده باشد وابسته نیست\&. این دستور سه آرگومان می‌گیرد: (الف) درخت اصلی برای مقایسه، (ب) نتیجه درخت جدید، (ج) آدرس اینترنتی (URL) مخزن هدف Subversion\&. اگر در یک مخزن سازگار با \fIgit svn\fR کار می‌کنید (که با \fIgit svn\fR مقداردهی اولیه شده باشد)، آرگومان پایانی (URL) می‌تواند حذف شود\&. گزینه \-r برای این کار الزامی است\&. .sp پیام کامیت یا مستقیماً از طریق گزینه \fB\-m\fR یا \fB\-F\fR فراهم می‌شود، یا به‌صورت غیرمستقیم از برچسب یا کامیت هنگامی که شبه‌درخت دوم چنین شیئی را نشان می‌دهد، یا با فراخوانی یک ویرایشگر درخواست می‌شود (گزینه \fB\-\-edit\fR در زیر را ببینید)\&. .PP \-m , \-\-message= .RS 4 از \fBmsg\fR داده‌شده به عنوان پیام کامیت استفاده می‌کند\&. این گزینه، سوییچ \fB\-\-edit\fR را غیرفعال می‌کند\&. .RE .PP \-F , \-\-file= .RS 4 پیام کامیت را از فایل داده‌شده می‌خواند\&. این گزینه، سوییچ \fB\-\-edit\fR را غیرفعال می‌کند\&. .RE .RE .PP \fIinfo\fR .RS 4 اطلاعاتی را درباره یک فایل یا دایرکتوری مشابه آنچه \(oqsvn info\(cq ارائه می‌دهد نمایش می‌دهد\&. در حال حاضر از آرگومان \-r/\-\-revision پشتیبانی نمی‌کند\&. برای خروجی دادن تنها مقدار فیلد \fIURL:\fR از گزینه \-\-url استفاده کنید\&. .RE .PP \fIproplist\fR .RS 4 ویژگی‌های (properties) ذخیره‌شده در مخزن Subversion را درباره یک فایل یا دایرکتوری داده‌شده فهرست می‌کند\&. برای ارجاع به یک ویرایش خاص در Subversion از \-r/\-\-revision استفاده کنید\&. .RE .PP \fIpropget\fR .RS 4 ویژگی Subversion داده‌شده به عنوان آرگومان اول را برای یک فایل دریافت می‌کند\&. یک ویرایش خاص را می‌توان با \-r/\-\-revision مشخص کرد\&. .RE .PP \fIpropset\fR .RS 4 ویژگی Subversion داده‌شده به عنوان آرگومان اول را به مقدار داده‌شده در آرگومان دوم برای فایل ارائه‌شده به عنوان آرگومان سوم تنظیم می‌کند\&. .sp مثال: .sp .if n \{\ .RS 4 .\} .nf git svn propset svn:keywords "FreeBSD=%H" devel/py\-tipper/Makefile .fi .if n \{\ .RE .\} .sp این دستور ویژگی \fIsvn:keywords\fR را برای فایل \fIdevel/py\-tipper/Makefile\fR برابر با \fIFreeBSD=%H\fR قرار می‌دهد\&. .RE .PP \fIshow\-externals\fR .RS 4 موارد خارجی (externals) در Subversion را نمایش می‌دهد\&. برای مشخص کردن یک ویرایش خاص از \-r/\-\-revision استفاده کنید\&. .RE .PP \fIgc\fR .RS 4 فایل‌های $GIT_DIR/svn//unhandled\&.log را فشرده کرده و فایل‌های $GIT_DIR/svn//index را حذف می‌کند\&. .RE .PP \fIreset\fR .RS 4 اثرات \fIfetch\fR را تا ویرایش مشخص‌شده به عقب بازمی‌گرداند\&. این به شما امکان می‌دهد تا یک ویرایش SVN را مجدداً \fIfetch\fR کنید\&. در حالت عادی، محتویات یک ویرایش SVN هرگز نباید تغییر کند و \fIreset\fR نباید ضروری باشد\&. با این حال، اگر مجوزهای دسترسی SVN تغییر کنند، یا اگر گزینه \-\-ignore\-paths را تغییر دهید، ممکن است یک \fIfetch\fR با خطای "not found in commit" (فایلی که قبلاً قابل مشاهده نبوده است) یا "checksum mismatch" (از دست رفتن یک تغییر) با شکست مواجه شود\&. اگر فایل مشکل‌ساز را نتوان برای همیشه نادیده گرفت (با \-\-ignore\-paths)، تنها راه برای اصلاح مخزن استفاده از \fIreset\fR است\&. .sp تنها rev_map و refs/remotes/git\-svn تغییر می‌کنند (برای جزئیات بیشتر به \fI$GIT_DIR/svn/**/\&.rev_map\&.*\fR در بخش فایل‌ها (FILES) در ادامه مراجعه کنید)\&. پس از \fIreset\fR یک \fIfetch\fR و سپس \fIgit reset\fR یا \fIgit rebase\fR را اجرا کنید تا شاخه‌های محلی به درخت جدید منتقل شوند\&. .PP \-r , \-\-revision= .RS 4 تازه‌ترین ویرایشی را که باید نگه داشته شود مشخص می‌کند\&. تمامی ویرایش‌های بعد از آن دور ریخته می‌شوند\&. .RE .PP \-p, \-\-parent .RS 4 ویرایش مشخص‌شده را نیز دور می‌ریزد و در عوض نزدیک‌ترین والد آن را نگه می‌دارد\&. .RE .PP مثال: .RS 4 فرض کنید تغییرات محلی در شاخه "master" دارید، اما نیاز دارید "r2" را مجدداً واکشی کنید\&. .sp .if n \{\ .RS 4 .\} .nf r1\-\-\-r2\-\-\-r3 remotes/git\-svn \e A\-\-\-B master .fi .if n \{\ .RE .\} .sp مشکل ignore\-paths یا مجوزهای دسترسی SVN را که از ابتدا باعث ناقص بودن "r2" شده بود برطرف کنید\&. سپس: .sp .if n \{\ .RS 4 .\} .nf git svn reset \-r2 \-p git svn fetch .fi .if n \{\ .RE .\} .sp .sp .if n \{\ .RS 4 .\} .nf r1\-\-\-r2\*(Aq\-\-r3\*(Aq remotes/git\-svn \e r2\-\-\-r3\-\-\-A\-\-\-B master .fi .if n \{\ .RE .\} .sp سپس "master" را با \fIgit rebase\fR اصلاح کنید\&. از \fIgit merge\fR استفاده نکنید، در غیر این صورت تاریخچه شما با \fIdcommit\fR آینده سازگار نخواهد بود! .sp .if n \{\ .RS 4 .\} .nf git rebase \-\-onto remotes/git\-svn A^ master .fi .if n \{\ .RE .\} .sp .sp .if n \{\ .RS 4 .\} .nf r1\-\-\-r2\*(Aq\-\-r3\*(Aq remotes/git\-svn \e A\*(Aq\-\-B\*(Aq master .fi .if n \{\ .RE .\} .sp .RE .RE .SH "گزینه‌ها (OPTIONS)" .PP \-\-shared[=(false|true|umask|group|all|world|everybody)], \-\-template= .RS 4 تنها با دستور \fIinit\fR استفاده می‌شود\&. این گزینه‌ها مستقیماً به \fIgit init\fR پاس داده می‌شوند\&. .RE .PP \-r , \-\-revision .RS 4 با دستور \fIfetch\fR استفاده می‌شود\&. .sp این گزینه پشتیبانی از بازه‌های ویرایش (revision ranges) را برای تاریخچه جزئی/کوتاه‌شده فراهم می‌کند\&. بازه‌های $NUMBER، $NUMBER1:$NUMBER2 (بازه‌های عددی)، $NUMBER:HEAD، و BASE:$NUMBER همگی پشتیبانی می‌شوند\&. .sp این گزینه به شما اجازه می‌دهد هنگام اجرای واکشی (fetch)، یک آینه (mirror) جزئی بسازید؛ اما عموماً توصیه نمی‌شود زیرا بخش‌هایی از تاریخچه نادیده گرفته شده و از دست خواهد رفت\&. .RE .PP \-, \-\-stdin .RS 4 تنها با دستور \fIset\-tree\fR استفاده می‌شود\&. .sp فهرستی از کامیت‌ها را از ورودی استاندارد (stdin) می‌خواند و آن‌ها را به ترتیب معکوس کامیت می‌کند\&. از هر سطر تنها مقدار ابتدایی sha1 خوانده می‌شود، بنابراین می‌توان از خروجی \fIgit rev\-list \-\-pretty=oneline\fR استفاده کرد\&. .RE .PP \-\-rmdir .RS 4 تنها با دستورهای \fIdcommit\fR، \fIset\-tree\fR و \fIcommit\-diff\fR استفاده می‌شود\&. .sp در صورتی که هیچ فایلی باقی نمانده باشد، پوشه‌ها را از درخت SVN حذف می‌کند\&. سامانه SVN می‌تواند پوشه‌های خالی را نسخه‌بندی کند و به صورت پیش‌فرض در صورت خالی ماندن از فایل، آن‌ها را حذف نمی‌کند\&. گیت قادر به نسخه‌بندی پوشه‌های خالی نیست\&. فعال کردن این فلگ باعث می‌شود کامیت به SVN همانند گیت رفتار کند\&. .sp .if n \{\ .RS 4 .\} .nf config key: svn\&.rmdir .fi .if n \{\ .RE .\} .sp .RE .PP \-e, \-\-edit .RS 4 تنها با دستورهای \fIdcommit\fR، \fIset\-tree\fR و \fIcommit\-diff\fR استفاده می‌شود\&. .sp پیام کامیت را پیش از کامیت کردن به SVN ویرایش می‌کند\&. این ویژگی برای اشیایی که کامیت هستند به صورت پیش‌فرض غیرفعال است و هنگام کامیت اشیاء درختی (tree objects) اجباراً فعال می‌شود\&. .sp .if n \{\ .RS 4 .\} .nf config key: svn\&.edit .fi .if n \{\ .RE .\} .sp .RE .PP \-l, \-\-find\-copies\-harder .RS 4 تنها با دستورهای \fIdcommit\fR، \fIset\-tree\fR و \fIcommit\-diff\fR استفاده می‌شود\&. .sp هر دوی آن‌ها مستقیماً به \fIgit diff\-tree\fR پاس داده می‌شوند؛ برای اطلاعات بیشتر \fBgit-diff-tree\fR(1) را ببینید\&. .sp .if n \{\ .RS 4 .\} .nf config key: svn\&.l config key: svn\&.findcopiesharder .fi .if n \{\ .RE .\} .sp .RE .PP \-A, \-\-authors\-file= .RS 4 سینتکس آن با فایل مورد استفاده در \fIgit cvsimport\fR سازگار است، اما یک نشانی ایمیل خالی را می‌توان با \fI<>\fR مشخص کرد: .sp .if n \{\ .RS 4 .\} .nf loginname = Joe User .fi .if n \{\ .RE .\} .sp اگر این گزینه مشخص شود و \fIgit svn\fR با نام ثبت‌کننده‌ای در SVN برخورد کند که در authors\-file وجود ندارد، \fIgit svn\fR عملیات را لغو خواهد کرد\&. سپس کاربر باید مدخل مربوطه را اضافه کند\&. اجرای مجدد دستور قبلی \fIgit svn\fR پس از تغییر authors\-file باید عملیات را ادامه دهد\&. .sp .if n \{\ .RS 4 .\} .nf config key: svn\&.authorsfile .fi .if n \{\ .RE .\} .sp .RE .PP \-\-authors\-prog= .RS 4 اگر این گزینه مشخص شود، برای هر نام ثبت‌کننده در SVN که در فایل نویسندگان وجود ندارد، فایل داده‌شده با نام ثبت‌کننده به عنوان اولین آرگومان اجرا می‌شود\&. انتظار می‌رود این برنامه یک سطر واحد به صورت "Name " یا "Name <>" برگرداند که با آن همانند مدخلی موجود در فایل نویسندگان رفتار خواهد شد\&. .sp به دلایل تاریخی، یک \fIfilename\fR نسبی برای \fIinit\fR و \fIclone\fR ابتدا نسبت به پوشه جاری جستجو می‌شود و برای \fIfetch\fR نسبت به ریشه درخت کاری جستجو می‌گردد\&. اگر \fIfilename\fR پیدا نشود، همانند هر دستور دیگری در \fI$PATH\fR جستجو می‌شود\&. .sp .if n \{\ .RS 4 .\} .nf config key: svn\&.authorsProg .fi .if n \{\ .RE .\} .sp .RE .PP \-q, \-\-quiet .RS 4 میزان پرگویی دستور \fIgit svn\fR را کاهش می‌دهد\&. با مشخص کردن دوباره آن، پرگویی حتی کمتر خواهد شد\&. .RE .PP \-m, \-\-merge, \-s, \-\-strategy=, \-p, \-\-rebase\-merges .RS 4 این موارد تنها با دستورهای \fIdcommit\fR و \fIrebase\fR استفاده می‌شوند\&. .sp هنگام استفاده از \fIdcommit\fR، در صورتی که امکان استفاده از \fIgit reset\fR وجود نداشته باشد، مستقیماً به \fIgit rebase\fR پاس داده می‌شوند (توضیحات \fIdcommit\fR را ببینید)\&. .RE .PP \-n, \-\-dry\-run .RS 4 می‌توان از این گزینه به همراه دستورهای \fIdcommit\fR، \fIrebase\fR، \fIbranch\fR و \fItag\fR استفاده کرد\&. .sp برای \fIdcommit\fR، مجموعه آرگومان‌های Git را چاپ می‌کند که نشان می‌دهد کدام diffها در SVN کامیت خواهند شد\&. .sp برای \fIrebase\fR، شاخه محلی مرتبط با مخزن svn بالادستی متصل به شاخه جاری و نشانی URL مخزن svn که واکشی از آن انجام خواهد شد را نمایش می‌دهد\&. .sp برای \fIbranch\fR و \fItag\fR، نشانی‌های URL را که هنگام ایجاد شاخه یا برچسب جهت کپی کردن استفاده خواهند شد نمایش می‌دهد\&. .RE .PP \-\-use\-log\-author .RS 4 هنگام دریافت کامیت‌های svn در Git (به عنوان بخشی از عملیات‌های \fIfetch\fR، \fIrebase\fR یا \fIdcommit\fR)، به دنبال نخستین سطر \fBFrom:\fR یا تریلر (دنباله) \fBSigned\-off\-by\fR در پیام لاگ می‌گردد و از آن به عنوان رشته نویسنده استفاده می‌کند\&. .sp .if n \{\ .RS 4 .\} .nf config key: svn\&.useLogAuthor .fi .if n \{\ .RE .\} .sp .RE .PP \-\-add\-author\-from .RS 4 هنگام کامیت کردن از Git به svn (به عنوان بخشی از عملیات‌های \fIset\-tree\fR یا \fIdcommit\fR)، اگر پیام لاگ فعلی از پیش دارای سطر \fBFrom:\fR یا تریلر \fBSigned\-off\-by\fR نباشد، یک سطر \fBFrom:\fR را بر اساس رشته نویسنده کامیت Git به انتهای آن اضافه می‌کند\&. اگر از این گزینه استفاده کنید، در ادامه \fB\-\-use\-log\-author\fR رشته نویسنده معتبری را برای تمام کامیت‌ها استخراج خواهد کرد\&. .sp .if n \{\ .RS 4 .\} .nf config key: svn\&.addAuthorFrom .fi .if n \{\ .RE .\} .sp .RE .SH "گزینه‌های پیشرفته (ADVANCED OPTIONS)" .PP \-i, \-\-id .RS 4 این گزینه مقدار GIT_SVN_ID را تنظیم می‌کند (به جای استفاده از متغیر محیطی)\&. این به کاربر اجازه می‌دهد نام مرجع پیش‌فرض (refname) را برای واکشی هنگام ردیابی یک نشانی URL منفرد بازنویسی کند\&. دستورهای \fIlog\fR و \fIdcommit\fR دیگر به این سوییچ به‌عنوان یک آرگومان نیاز ندارند\&. .RE .PP \-R, \-\-svn\-remote .RS 4 بخش [svn\-remote ""] را برای استفاده مشخص می‌کند، این امر امکان ردیابی چندین مخزن SVN را فراهم می‌سازد\&. پیش‌فرض: "svn" .RE .PP \-\-follow\-parent .RS 4 این گزینه تنها زمانی کاربرد دارد که در حال ردیابی شاخه‌ها باشیم (با استفاده از یکی از گزینه‌های ساختار مخزن \-\-trunk، \-\-tags، \-\-branches، \-\-stdlayout)\&. برای هر شاخه ردیابی‌شده، تلاش می‌کند مشخص کند ویرایش آن از کجا کپی شده است، و یک والد مناسب در اولین کامیت Git برای آن شاخه قرار دهد\&. این قابلیت به‌ویژه زمانی که پوشه‌ای جابه‌جاشده در مخزن را ردیابی می‌کنیم سودمند است\&. در صورت غیرفعال بودن این قابلیت، شاخه‌های ایجادشده توسط \fIgit svn\fR همگی خطی خواهند بود و هیچ تاریخچه مشترکی نخواهند داشت؛ بدین معنی که هیچ اطلاعاتی درباره اینکه شاخه‌ها از کجا منشعب شده یا ادغام گردیده‌اند وجود نخواهد داشت\&. با این حال، دنبال کردن تاریخچه‌های طولانی یا پیچیده ممکن است زمان زیادی ببرد، بنابراین غیرفعال کردن این قابلیت می‌تواند فرآیند کلون کردن را تسریع بخشد\&. این قابلیت به‌طور پیش‌فرض فعال است؛ برای غیرفعال کردن آن از \-\-no\-follow\-parent استفاده کنید\&. .sp .if n \{\ .RS 4 .\} .nf config key: svn\&.followparent .fi .if n \{\ .RE .\} .sp .RE .SH "گزینه‌های فقط-فایل-پیکربندی (CONFIG FILE\-ONLY OPTIONS)" .PP svn\&.noMetadata, svn\-remote\&.\&.noMetadata .RS 4 این خطوط \fIgit\-svn\-id:\fR را در انتهای هر کامیت حذف می‌کند\&. .sp این گزینه فقط برای درون‌ریزی‌های یک‌باره قابل استفاده است زیرا \fIgit svn\fR بدون متادیتا قادر به واکشی دوباره نخواهد بود\&. علاوه بر این، در صورت از دست رفتن فایل‌های \fI$GIT_DIR/svn/**/\&.rev_map\&.*\fR شما، \fIgit svn\fR نمی‌تواند آن‌ها را دوباره بسازد\&. .sp دستور \fIgit svn log\fR نیز روی مخازنی که از این گزینه استفاده می‌کنند کار نخواهد کرد\&. همچنین استفاده از این گزینه به دلایلی (امیدواریم) کاملاً مشخص، با گزینه \fIuseSvmProps\fR تداخل دارد\&. .sp استفاده از این گزینه توصیه نمی‌شود زیرا پیگیری ارجاعات قدیمی به شماره ویرایش‌های SVN را در مستندات موجود، گزارش‌های اشکال و بایگانی‌ها دشوار می‌سازد\&. اگر قصد دارید در نهایت از SVN به Git مهاجرت کنید و از کنار گذاشتن تاریخچه SVN مطمئن هستید، در عوض استفاده از \m[blue]\fBgit\-filter\-repo\fR\m[]\&\s-2\u[1]\d\s+2 را در نظر بگیرید\&. همچنین filter\-repo امکان قالب‌بندی مجدد متادیتا برای خوانایی بهتر و بازنویسی اطلاعات پدیدآورنده را برای کاربرانی که از "svn\&.authorsFile" استفاده نمی‌کنند، فراهم می‌کند\&. .RE .PP svn\&.useSvmProps, svn\-remote\&.\&.useSvmProps .RS 4 این گزینه به \fIgit svn\fR اجازه می‌دهد تا نشانی‌های URL مخزن و UUIDها را از آینه‌های ایجادشده توسط SVN::Mirror (یا svk) برای متادیتا بازنگاشت کند\&. .sp اگر یک ویرایش SVN دارای ویژگی "svm:headrev" باشد، احتمالاً آن ویرایش توسط SVN::Mirror (که توسط SVK نیز به کار می‌رود) ایجاد شده است\&. این ویژگی حاوی یک شناسه یکتای مخزن (UUID) و یک شماره ویرایش است\&. ما می‌خواهیم چنین به نظر برسد که در حال آینه‌سازی نشانی URL اصلی هستیم، بنابراین یک تابع کمکی معرفی می‌شود که نشانی URL هویتی و UUID اصلی را بازمی‌گرداند و هنگام تولید متادیتا در پیام‌های کامیت از آن استفاده می‌کند\&. .RE .PP svn\&.useSvnsyncProps, svn\-remote\&.\&.useSvnsyncprops .RS 4 مشابه گزینه useSvmProps؛ این برای کاربران دستور svnsync(1) است که به همراه SVN نسخه 1\&.4\&.x و بالاتر توزیع شده است\&. .RE .PP svn\-remote\&.\&.rewriteRoot .RS 4 این به کاربران اجازه می‌دهد مخازن را از نشانی‌های URL جایگزین ایجاد کنند\&. برای مثال، یک مدیر سیستم می‌تواند \fIgit svn\fR را به‌صورت محلی روی سرور اجرا کند (با دسترسی از طریق file://) اما بخواهد مخزن را با یک نشانی URL عمومی http:// یا svn:// در متادیتا توزیع کند تا کاربران آن نشانی URL عمومی را ببینند\&. .RE .PP svn\-remote\&.\&.rewriteUUID .RS 4 مشابه گزینه useSvmProps؛ این برای کاربرانی است که نیاز دارند UUID را به‌صورت دستی بازنگاشت کنند\&. این ممکن است در شرایطی که UUID اصلی نه از طریق useSvmProps و نه useSvnsyncProps در دسترس است، مفید باشد\&. .RE .PP svn\-remote\&.\&.pushurl .RS 4 مشابه \fBremote\&.\fR\fI\fR\fB\&.pushurl\fR در Git، این کلید برای مواردی طراحی شده است که \fIurl\fR از طریق یک پروتکل انتقال فقط‌خواندنی به یک مخزن SVN اشاره دارد، تا یک پروتکل جایگزین خواندن/نوشتن فراهم آورد\&. فرض بر این است که هر دو کلید به یک مخزن مشترک اشاره دارند\&. بر خلاف \fIcommiturl\fR، کلید \fIpushurl\fR یک مسیر پایه است\&. اگر هر یک از \fIcommiturl\fR یا \fIpushurl\fR قابل استفاده باشند، \fIcommiturl\fR اولویت خواهد داشت\&. .RE .PP svn\&.brokenSymlinkWorkaround .RS 4 این گزینه بررسی‌های بالقوه سنگین را برای دور زدن پیوندهای نمادین خرابی که توسط کلاینت‌های معیوب در SVN ثبت شده‌اند، غیرفعال می‌کند\&. اگر یک مخزن SVN را با تعداد زیادی blob خالی که پیوند نمادین نیستند ردیابی می‌کنید، این گزینه را روی "false" تنظیم کنید\&. این گزینه در حین اجرای \fIgit svn\fR نیز می‌تواند تغییر یابد و روی ویرایش بعدی که واکشی می‌شود اعمال شود\&. در صورت تنظیم نشدن، \fIgit svn\fR این گزینه را "true" فرض می‌کند\&. .RE .PP svn\&.pathnameencoding .RS 4 این به git svn دستور می‌دهد تا نام مسیرها را به یک کدگذاری مشخص بازکدگذاری کند\&. این گزینه می‌تواند توسط کاربران ویندوز و کسانی که در محیط‌های غیر utf8 کار می‌کنند به کار رود تا از خرابی نام فایل‌های حاوی نویسه‌های غیر ASCII جلوگیری شود\&. کدگذاری‌های معتبر مواردی هستند که توسط ماژول Encode در پرل پشتیبانی می‌شوند\&. .RE .PP svn\-remote\&.\&.automkdirs .RS 4 به‌طور معمول، دستورهای "git svn clone" و "git svn rebase" تلاش می‌کنند پوشه‌های خالی موجود در مخزن Subversion را دوباره بسازند\&. اگر این گزینه روی "false" تنظیم شود، پوشه‌های خالی تنها در صورتی ایجاد می‌شوند که دستور "git svn mkdirs" به‌طور صریح اجرا گردد\&. در صورت تنظیم نشدن، \fIgit svn\fR این گزینه را "true" فرض می‌کند\&. .RE .sp از آنجا که گزینه‌های noMetadata، rewriteRoot، rewriteUUID، useSvnsyncProps و useSvmProps همگی بر متادیتای تولیدشده و استفاده‌شده توسط \fIgit svn\fR اثر می‌گذارند؛ آن‌ها \fBباید\fR پیش از درون‌ریزی هرگونه تاریخچه در فایل پیکربندی تنظیم شوند و این تنظیمات پس از مشخص شدن هرگز نباید تغییر یابند\&. .sp علاوه بر این، در هر بخش svn\-remote فقط از یکی از این گزینه‌ها می‌توان استفاده کرد زیرا آن‌ها بر خط متادیتای \fIgit\-svn\-id:\fR اثر می‌گذارند، به استثنای rewriteRoot و rewriteUUID که می‌توانند با هم استفاده شوند\&. .SH "مثال‌های پایه (BASIC EXAMPLES)" .sp ردیابی و مشارکت در تنه (trunk) پروژه‌ای که با Subversion مدیریت می‌شود (با نادیده گرفتن برچسب‌ها و شاخه‌ها): .sp .if n \{\ .RS 4 .\} .nf # Clone a repo (like git clone): git svn clone http://svn\&.example\&.com/project/trunk # Enter the newly cloned directory: cd trunk # You should be on master branch, double\-check with \*(Aqgit branch\*(Aq git branch # Do some work and commit locally to Git: git commit \&.\&.\&. # Something is committed to SVN, rebase your local changes against the # latest changes in SVN: git svn rebase # Now commit your changes (that were committed previously using Git) to SVN, # as well as automatically updating your working HEAD: git svn dcommit # Append svn:ignore and svn:global\-ignores settings to the default Git exclude file: git svn show\-ignore >> \&.git/info/exclude .fi .if n \{\ .RE .\} .sp .sp ردیابی و مشارکت در کل پروژه‌ای که با Subversion مدیریت می‌شود (همراه با یک تنه، برچسب‌ها و شاخه‌ها): .sp .if n \{\ .RS 4 .\} .nf # Clone a repo with standard SVN directory layout (like git clone): git svn clone http://svn\&.example\&.com/project \-\-stdlayout \-\-prefix svn/ # Or, if the repo uses a non\-standard directory layout: git svn clone http://svn\&.example\&.com/project \-T tr \-b branch \-t tag \-\-prefix svn/ # View all branches and tags you have cloned: git branch \-r # Create a new branch in SVN git svn branch waldo # Reset your master to trunk (or any other branch, replacing \*(Aqtrunk\*(Aq # with the appropriate name): git reset \-\-hard svn/trunk # You may only dcommit to one branch/tag/trunk at a time\&. The usage # of dcommit/rebase/show\-ignore should be the same as above\&. .fi .if n \{\ .RE .\} .sp .sp فرآیند اولیه \fIgit svn clone\fR می‌تواند بسیار زمان‌بر باشد (به‌ویژه برای مخازن بزرگ Subversion)\&. اگر چندین نفر (یا یک نفر با چندین دستگاه) بخواهند از \fIgit svn\fR برای تعامل با همان مخزن Subversion استفاده کنند، می‌توانید کلون اولیه \fIgit svn clone\fR را روی مخزنی در یک سرور انجام دهید و از هر نفر بخواهید آن مخزن را با \fIgit clone\fR کلون کند: .sp .if n \{\ .RS 4 .\} .nf # Do the initial import on a server ssh server "cd /pub && git svn clone http://svn\&.example\&.com/project [options\&.\&.\&.]" # Clone locally \- make sure the refs/remotes/ space matches the server mkdir project cd project git init git remote add origin server:/pub/project git config \-\-replace\-all remote\&.origin\&.fetch \*(Aq+refs/remotes/*:refs/remotes/*\*(Aq git fetch # Prevent fetch/pull from remote Git server in the future, # we only want to use git svn for future updates git config \-\-remove\-section remote\&.origin # Create a local branch from one of the branches just fetched git checkout \-b master FETCH_HEAD # Initialize \*(Aqgit svn\*(Aq locally (be sure to use the same URL and # \-\-stdlayout/\-T/\-b/\-t/\-\-prefix options as were used on server) git svn init http://svn\&.example\&.com/project [options\&.\&.\&.] # Pull the latest changes from Subversion git svn rebase .fi .if n \{\ .RE .\} .sp .SH "بازسازی در برابر واکشی/ادغام (REBASE VS\&. PULL/MERGE)" .sp ترجیحاً برای همگام‌سازی کامیت‌های ادغام‌نشده با یک شاخه \fIgit svn\fR، به جای \fIgit pull\fR یا \fIgit merge\fR از \fIgit svn rebase\fR یا \fIgit rebase\fR استفاده کنید. انجام این کار تاریخچه کامیت‌های ادغام‌نشده را نسبت به مخزن بالادست SVN به صورت خطی حفظ می‌کند و امکان استفاده از زیرفرمان ترجیحی \fIgit svn dcommit\fR را برای ارسال مجدد کامیت‌های ادغام‌نشده به SVN فراهم می‌سازد. .sp در ابتدا، \fIgit svn\fR توصیه می‌کرد توسعه‌دهندگان از شاخه \fIgit svn\fR عملیات pull یا merge را انجام دهند. علت این امر آن بود که پدیدآورنده، دستور \fBgit\fR \fBsvn\fR \fBset\-tree\fR \fBB\fR را برای کامیت کردن یک سرشاخه (head) منفرد، به نگارش \fBgit\fR \fBsvn\fR \fBset\-tree\fR \fBA\fR\fB\&.\&.\fR\fBB\fR جهت اعمال چندین کامیت ترجیح می‌داد. استفاده از \fIgit pull\fR یا \fIgit merge\fR همراه با \fBgit\fR \fBsvn\fR \fBset\-tree\fR \fBA\fR\fB\&.\&.\fR\fBB\fR هنگام کامیت در SVN باعث هموارسازی (flatten شدن) تاریخچه غیرخطی می‌شود و این موضوع می‌تواند به این بینجامد که کامیت‌های ادغام به طور غیرمنتظره‌ای کامیت‌های قبلی را در SVN معکوس و بی‌اثر کنند. .SH "ردیابی ادغام (MERGE TRACKING)" .sp اگرچه \fIgit svn\fR می‌تواند تاریخچه کپی‌ها (از جمله شاخه‌ها و برچسب‌ها) را برای مخازنی با ساختار استاندارد ردیابی کند، اما هنوز قادر نیست تاریخچه ادغام‌های انجام‌شده درون گیت را به کاربران بالادست در SVN منعکس کند. بنابراین به کاربران توصیه می‌شود برای تسهیل سازگاری با SVN، تاریخچه را درون گیت تا حد امکان خطی نگه دارند (بخش «هشدارها و نکات مهم» را در زیر ببینید). .SH "مدیریت شاخه‌های اس‌وی‌ان (HANDLING OF SVN BRANCHES)" .sp اگر \fIgit svn\fR برای واکشی شاخه‌ها پیکربندی شده باشد (و گزینه \-\-follow\-branches برقرار باشد)، گاهی برای یک شاخه SVN چندین شاخه گیت ایجاد می‌کند، که این شاخه‌های اضافی نام‌هایی به صورت \fIbranchname@nnn\fR (که در آن nnn شماره بازبینی SVN است) خواهند داشت. این شاخه‌های اضافی زمانی ایجاد می‌شوند که \fIgit svn\fR نتواند برای نخستین کامیت در یک شاخه SVN یک کامیت والد پیدا کند تا شاخه را به تاریخچه شاخه‌های دیگر متصل نماید. .sp به طور معمول، نخستین کامیت در یک شاخه SVN شامل یک عملیات کپی است. \fIgit svn\fR این کامیت را می‌خواند تا شماره بازبینی SVN را که شاخه از آن ایجاد شده است به دست آورد. سپس تلاش می‌کند کامیت گیت متناظر با این بازبینی SVN را پیدا کرده و از آن به عنوان والد شاخه استفاده کند. با این حال، ممکن است کامیت گیت مناسبی برای ایفای نقش والد وجود نداشته باشد. این حالت از جمله زمانی رخ می‌دهد که شاخه SVN رونوشتی از بازبینی‌ای باشد که توسط \fIgit svn\fR واکشی نشده است (برای نمونه به این دلیل که بازبینی قدیمی بوده و با \fB\-\-revision\fR نادیده گرفته شده است)، یا در SVN دایرکتوری‌ای کپی شده باشد که توسط \fIgit svn\fR ردیابی نمی‌شود (مانند شاخه‌ای که اصلاً ردیابی نمی‌شود، یا زیردایرکتوری‌ای از یک شاخه ردیابی‌شده). در چنین مواردی، \fIgit svn\fR همچنان شاخه گیت را ایجاد خواهد کرد، اما به جای استفاده از یک کامیت گیت موجود به عنوان والد شاخه، تاریخچه SVN دایرکتوری‌ای را که شاخه از آن کپی شده می‌خواند و کامیت‌های گیت مناسب را می‌سازد. این وضعیت با پیام «Initializing parent: » نشان داده می‌شود. .sp علاوه بر این، یک شاخه ویژه به نام \fI@\fR ایجاد می‌کند که در آن شماره بازبینی SVN است که شاخه از روی آن کپی شده است. این شاخه به کامیت والد تازه‌ساخته‌شده شاخه اشاره خواهد کرد. اگر شاخه در SVN حذف شده و بعداً از نسخه متفاوتی دوباره ایجاد شود، چندین شاخه از این دست با کاراکتر \fI@\fR وجود خواهد داشت. .sp توجه داشته باشید که این ممکن است به این معنا باشد که برای یک بازبینی منفرد در SVN، چندین کامیت گیت ایجاد می‌شود. .sp یک مثال: در یک مخزن SVN با ساختار استاندارد trunk/tags/branches، دایرکتوری trunk/sub در r.100 ایجاد می‌شود. در r.200، دایرکتوری trunk/sub با کپی شدن درون branches/ شاخه‌بندی می‌شود. سپس دستور \fIgit svn clone \-s\fR یک شاخه به نام \fIsub\fR ایجاد می‌کند. همچنین کامیت‌های گیت جدیدی برای r.100 تا r.199 می‌سازد و از آن‌ها به عنوان تاریخچه شاخه \fIsub\fR استفاده می‌کند. بدین ترتیب برای هر بازبینی از r.100 تا r.199 دو کامیت گیت وجود خواهد داشت (یکی حاوی trunk/ و دیگری حاوی trunk/sub/). در نهایت، شاخه‌ای به نام \fIsub@200\fR ایجاد می‌کند که به کامیت والد جدید شاخه \fIsub\fR (یعنی کامیت مربوط به r.200 و trunk/sub/) اشاره دارد. .SH "هشدارها و نکات مهم (CAVEATS)" .sp به منظور سادگی و تعامل‌پذیری با Subversion، توصیه می‌شود که همه کاربران \fIgit svn\fR عملیات‌های clone، fetch و dcommit را مستقیماً از سرور SVN انجام دهند و از تمامی عملیات‌های \fIgit clone\fR/\fIpull\fR/\fImerge\fR/\fIpush\fR میان مخازن و شاخه‌های گیت پرهیز کنند. روش توصیه‌شده برای تبادل کد میان شاخه‌ها و کاربران گیت، استفاده از \fIgit format\-patch\fR و \fIgit am\fR، یا صرفاً اجرای \*(Aqdcommit\(cq بر روی مخزن SVN است. .sp اجرای \fIgit merge\fR یا \fIgit pull\fR روی شاخه‌ای که قصد دارید از آن \fIdcommit\fR کنید توصیه «نمی‌شود»، زیرا کاربران Subversion نمی‌توانند هیچ‌یک از ادغام‌هایی را که انجام داده‌اید مشاهده کنند. افزون بر این، اگر از یک شاخه گیت که آینه‌ای از یک شاخه SVN است merge یا pull کنید، ممکن است \fIdcommit\fR تغییرات را به اشتباه روی شاخه دیگری کامیت کند. .sp اگر اقدام به ادغام می‌کنید، به این قاعده توجه داشته باشید: \fIgit svn dcommit\fR تلاش خواهد کرد کامیت‌ها را بر روی کامیت SVN ذکرشده در خروجی دستور زیر ثبت کند: .sp .if n \{\ .RS 4 .\} .nf git log \-\-grep=^git\-svn\-id: \-\-first\-parent \-1 .fi .if n \{\ .RE .\} .sp .sp بنابراین شما \fIباید\fR اطمینان حاصل کنید که تازه‌ترین کامیت شاخه‌ای که می‌خواهید به آن dcommit کنید، والد \fIنخست\fR (first parent) ادغام باشد. در غیر این صورت آشفتگی رخ خواهد داد، به‌ویژه اگر والد نخست یک کامیت قدیمی‌تر در همان شاخه SVN باشد. .sp دستور \fIgit clone\fR شاخه‌های موجود در سلسله‌مراتب refs/remotes/ یا متادیتا و پیکربندی‌های \fIgit svn\fR را کلون نمی‌کند. بنابراین مخازنی که با استفاده از \fIgit svn\fR ایجاد و مدیریت می‌شوند، در صورتی که نیاز به کلون‌سازی داشته باشند، باید از \fIrsync\fR برای کلون کردن استفاده کنند. .sp از آنجا که \fIdcommit\fR در لایه درونی خود از rebase استفاده می‌کند، هر شاخه گیتی که پیش از اجرای \fIdcommit\fR دستور \fIgit push\fR را روی آن اجرا کرده باشید، نیازمند بازنویسی اجباری (force) ارجاع موجود در مخزن دوردست خواهد بود. این کار عموماً یک شیوه نامناسب تلقی می‌شود؛ برای جزئیات به مستندات \fBgit-push\fR(1) مراجعه کنید. .sp از گزینه \-\-amend در دستور \fBgit-commit\fR(1) روی تغییری که قبلاً آن را dcommit کرده‌اید استفاده نکنید. بازنویسی با \-\-amend برای کامیت‌هایی که پیش‌تر برای سایر کاربران به یک مخزن دوردست push شده‌اند کاری نادرست به شمار می‌رود و dcommit در SVN نیز مشابه همان است. .sp هنگام کلون کردن یک مخزن SVN، اگر از هیچ‌یک از گزینه‌های تعیین ساختار مخزن (\-\-trunk، \-\-tags، \-\-branches، \-\-stdlayout) استفاده نشود، \fIgit svn clone\fR یک مخزن گیت با تاریخچه‌ای کاملاً خطی ایجاد خواهد کرد که در آن شاخه‌ها و برچسب‌ها به صورت دایرکتوری‌های جداگانه در کپی کاری ظاهر می‌شوند. اگرچه این آسان‌ترین راه برای به دست آوردن رونوشتی از کل مخزن است، اما در پروژه‌هایی با شاخه‌های متعدد به ایجاد کپی کاری چندین برابر بزرگ‌تر از صرفاً شاخه trunk می‌انجامد. بنابراین برای پروژه‌هایی که از ساختار دایرکتوری استاندارد (trunk/branches/tags) استفاده می‌کنند، توصیه می‌شود کلون کردن با گزینه \fB\-\-stdlayout\fR انجام پذیرد. اگر پروژه از ساختاری غیراستاندارد پیروی می‌کند، و/یا نیازی به شاخه‌ها و برچسب‌ها نیست، ساده‌ترین کار این است که تنها یک دایرکتوری (معمولاً trunk) بدون هیچ‌گونه گزینه ساختار مخزن کلون شود. اگر به کل تاریخچه به همراه شاخه‌ها و برچسب‌ها نیاز است، باید گزینه‌های \fB\-\-trunk\fR / \fB\-\-branches\fR / \fB\-\-tags\fR به کار روند. .sp هنگام استفاده از چندین \-\-branches یا \-\-tags، ابزار \fIgit svn\fR تداخل نام‌ها را به طور خودکار مدیریت نمی‌کند (به عنوان مثال، اگر دو شاخه از مسیرهای گوناگون نام یکسانی داشته باشند، یا اگر یک شاخه و یک برچسب دارای نام یکسان باشند). در این موارد، ابتدا از \fIinit\fR برای راه‌اندازی مخزن گیت خود استفاده کنید و سپس پیش از نخستین \fIfetch\fR، فایل $GIT_DIR/config را ویرایش نمایید تا شاخه‌ها و برچسب‌ها با فضاهای نام (namespaces) متفاوتی مرتبط شوند. به عنوان مثال: .sp .if n \{\ .RS 4 .\} .nf branches = stable/*:refs/remotes/svn/stable/* branches = debug/*:refs/remotes/svn/debug/* .fi .if n \{\ .RE .\} .SH "پیکربندی (CONFIGURATION)" .sp ابزار \fIgit svn\fR اطلاعات پیکربندی [svn\-remote] را در فایل $GIT_DIR/config مخزن ذخیره می‌کند. این بخش شبیه به بخش‌های [remote] در هسته گیت است، به جز اینکه کلیدهای \fIfetch\fR آرگومان‌های الگوی تطبیق (glob) را نمی‌پذیرند؛ بلکه در عوض توسط کلیدهای \fIbranches\fR و \fItags\fR مدیریت می‌شوند. از آنجا که برخی مخازن SVN به شیوه‌ای غیرمعمول با چندین پروژه پیکربندی شده‌اند، گسترش‌های glob مانند مواردی که در ادامه آمده مجاز هستند: .sp .if n \{\ .RS 4 .\} .nf [svn\-remote "project\-a"] url = http://server\&.org/svn fetch = trunk/project\-a:refs/remotes/project\-a/trunk branches = branches/*/project\-a:refs/remotes/project\-a/branches/* branches = branches/release_*:refs/remotes/project\-a/branches/release_* branches = branches/re*se:refs/remotes/project\-a/branches/* tags = tags/*/project\-a:refs/remotes/project\-a/tags/* .fi .if n \{\ .RE .\} .sp .sp به خاطر داشته باشید که نویسه عام \fB*\fR (ستاره) در ارجاع محلی (سمت راست \fB:\fR) \fBباید\fR راست‌ترین جزء مسیر باشد؛ با این حال نویسه عام دوردست می‌تواند در هر کجایی قرار گیرد تا زمانی که یک جزء مسیر مستقل باشد (که توسط \fB/\fR یا انتهای خط احاطه شده باشد). این نوع پیکربندی به صورت خودکار توسط \fIinit\fR ایجاد نمی‌شود و باید به طور دستی با یک ویرایشگر متنی یا با استفاده از \fIgit config\fR درج گردد. .sp همچنین توجه داشته باشید که در هر کلمه تنها یک ستاره مجاز است. برای مثال: .sp .if n \{\ .RS 4 .\} .nf branches = branches/re*se:refs/remotes/project\-a/branches/* .fi .if n \{\ .RE .\} .sp با شاخه‌های \fIrelease\fR، \fIrese\fR و \fIre123se\fR مطابقت خواهد داشت، در حالی که .sp .if n \{\ .RS 4 .\} .nf branches = branches/re*s*e:refs/remotes/project\-a/branches/* .fi .if n \{\ .RE .\} .sp باعث ایجاد خطا خواهد شد. .sp همچنین می‌توان زیرمجموعه‌ای از شاخه‌ها یا برچسب‌ها را با استفاده از فهرستی از نام‌های جداشده با کاما درون آکولاد واکشی کرد. به عنوان مثال: .sp .if n \{\ .RS 4 .\} .nf [svn\-remote "huge\-project"] url = http://server\&.org/svn fetch = trunk/src:refs/remotes/trunk branches = branches/{red,green}/src:refs/remotes/project\-a/branches/* tags = tags/{1\&.0,2\&.0}/src:refs/remotes/project\-a/tags/* .fi .if n \{\ .RE .\} .sp .sp استفاده از چندین کلید fetch، branches و tags پشتیبانی می‌شود: .sp .if n \{\ .RS 4 .\} .nf [svn\-remote "messy\-repo"] url = http://server\&.org/svn fetch = trunk/project\-a:refs/remotes/project\-a/trunk fetch = branches/demos/june\-project\-a\-demo:refs/remotes/project\-a/demos/june\-demo branches = branches/server/*:refs/remotes/project\-a/branches/* branches = branches/demos/2011/*:refs/remotes/project\-a/2011\-demos/* tags = tags/server/*:refs/remotes/project\-a/tags/* .fi .if n \{\ .RE .\} .sp .sp ایجاد یک شاخه در چنین پیکربندی‌ای مستلزم رفع ابهام از این است که با بهره‌گیری از فلگ \-d یا \-\-destination از کدام مکان استفاده شود: .sp .if n \{\ .RS 4 .\} .nf $ git svn branch \-d branches/server release\-2\-3\-0 .fi .if n \{\ .RE .\} .sp .sp توجه داشته باشید که git\-svn بالاترین بازبینی‌ای را که یک شاخه یا برچسب در آن ظاهر شده است ردیابی می‌کند. اگر زیرمجموعه شاخه‌ها یا برچسب‌ها پس از واکشی تغییر یابد، آنگاه فایل $GIT_DIR/svn/\&.metadata باید به صورت دستی ویرایش شود تا branches\-maxRev و/یا tags\-maxRev در صورت لزوم حذف (یا بازنشانی) شوند. .SH "فایل‌ها (FILES)" .PP $GIT_DIR/svn/**/\&.rev_map\&.* .RS 4 نگاشت میان شماره‌های بازبینی Subversion و نام‌های کامیت Git. در مخزنی که گزینه noMetadata تنظیم نشده باشد، این نگاشت را می‌توان از خطوط git\-svn\-id: که در انتهای هر کامیت قرار دارند بازسازی کرد (برای جزئیات به بخش \fIsvn\&.noMetadata\fR در بالا مراجعه کنید). .sp \fIgit svn fetch\fR و \fIgit svn rebase\fR در صورت مفقود بودن یا به‌روز نبودن rev_map، آن را به طور خودکار به‌روزرسانی می‌کنند\&. \fIgit svn reset\fR به طور خودکار آن را به عقب بازمی‌گرداند\&. .RE .SH "باگ‌ها (BUGS)" .sp ما تمامی ویژگی‌های SVN را به جز svn:executable نادیده می‌گیریم. هر ویژگی مدیریت‌نشده در فایل $GIT_DIR/svn//unhandled\&.log ثبت می‌شود. .sp دایرکتوری‌های تغییرنام‌یافته و کپی‌شده توسط Git شناسایی نمی‌شوند و در نتیجه هنگام کامیت کردن در SVN ردیابی نخواهند شد. من برنامه‌ای برای افزودن پشتیبانی از این قابلیت ندارم، چرا که پیاده‌سازی آن برای تمامی حالت‌های مرزی (corner cases) ممکن بسیار دشوار و زمان‌بر است (خود گیت هم این کار را انجام نمی‌دهد). کامیت کردن فایل‌های تغییرنام‌یافته و کپی‌شده در صورتی که به اندازه کافی شبیه باشند تا Git بتواند آن‌ها را تشخیص دهد، به طور کامل پشتیبانی می‌شود. .sp در SVN این امکان وجود دارد (اگرچه توصیه نمی‌شود) که تغییرات روی یک برچسب کامیت شوند (زیرا یک برچسب صرفاً رونوشتی از یک دایرکتوری است و از نظر فنی با یک شاخه یکسان است). هنگام کلون کردن یک مخزن SVN، ابزار \fIgit svn\fR نمی‌تواند پیش‌بینی کند که آیا چنین کمیتی روی یک برچسب در آینده رخ خواهد داد یا خیر. بنابراین محافظه‌کارانه عمل کرده و تمام برچسب‌های SVN را به عنوان شاخه وارد می‌کند و نام برچسب را با پیشوند \fItags/\fR قرار می‌دهد. .SH "همچنین ببینید (SEE ALSO)" .sp \fBgit-rebase\fR(1) .SH "گیت (GIT)" .sp بخشی از مجموعه \fBgit\fR(1) .SH "یادداشت‌ها (NOTES)" .IP " 1." 4 git-filter-repo .RS 4 \%https://github.com/newren/git-filter-repo .RE