GIT-CVSIMPORT(1) Git Manual GIT-CVSIMPORT(1)

git-cvsimport - نجات و استخراج داده‌ها از سامانه مدیریت نسخه دیگر (CVS)

git cvsimport [-o <branch-for-HEAD>] [-h] [-v] [-d <CVSROOT>]
              [-A <author-conv-file>] [-p <options-for-cvsps>] [-P <file>]
              [-C <git-repository>] [-z <fuzz>] [-i] [-k] [-u] [-s <subst>]
              [-a] [-m] [-M <regex>] [-S <regex>] [-L <commit-limit>]
              [-r <remote>] [-R] [<CVS-module>]

هشدار: دستور git cvsimport از نسخه ۲ cvsps استفاده می‌کند که منسوخ تلقی می‌شود؛ این دستور با نسخه ۳ و نسخه‌های بعدی cvsps کار نمی‌کند. اگر در حال انجام یک‌باره واردسازی مخزن CVS هستید، استفاده از cvs2git[1] یا cvs-fast-export[2] را مد نظر قرار دهید.

یک مخزن CVS را به گیت وارد می‌کند. این دستور یا یک مخزن جدید ایجاد می‌کند یا به طور افزایشی داده‌ها را به یک مخزن موجود وارد می‌نماید.

تقسیم گزارش CVS به مجموعه‌وصله‌ها توسط cvsps انجام می‌شود. حداقل نسخه ۲.۱ مورد نیاز است.

هشدار: در برخی شرایط، واردسازی به نتایج نادرستی منجر می‌شود. لطفاً برای اطلاعات بیشتر بخش «مشکلات (ISSUES)» را ببینید.

شما هرگز نباید کارهای خودتان را روی شاخه‌هایی که توسط git cvsimport ایجاد می‌شوند انجام دهید. به طور پیش‌فرض، واردسازی اولیه یک شاخه «master» از شاخه اصلی مخزن CVS ایجاد و پر می‌کند که آزاد هستید روی آن کار کنید؛ پس از آن، باید واردسازی‌های افزایشی یا هر شاخه CVS را خودتان با git merge ادغام کنید. توصیه می‌شود یک ریموت نام‌گذاری‌شده را از طریق -r مشخص کنید تا شاخه‌های ورودی تفکیک و محافظت شوند.

اگر قصد دارید یک مخزن عمومی مشترک راه‌اندازی کنید که همه توسعه‌دهندگان بتوانند روی آن بخوانند/بنویسند، یا اگر می‌خواهید از git-cvsserver(1) استفاده کنید، احتمالاً تمایل دارید یک کلون خام (bare clone) از مخزن واردشده بسازید و از آن کلون به عنوان مخزن مشترک استفاده کنید. gitcvs-migration(7) را ببینید.

-v

پرگویی: به cvsimport اجازه می‌دهد گزارش دهد که در حال انجام چه کاری است.

-d <CVSROOT>

ریشه بایگانی CVS. می‌تواند محلی (یک مسیر ساده) یا از راه دور باشد؛ در حال حاضر، فقط روش‌های دسترسی :local:، :ext: و :pserver: پشتیبانی می‌شوند. در صورت عدم تعیین، git cvsimport تلاش می‌کند آن را از CVS/Root بخواند. اگر چنین فایلی وجود نداشته باشد، متغیر محیطی CVSROOT را بررسی می‌کند.

<CVS-module>

ماژول CVS که می‌خواهید وارد کنید. نسبت به <CVSROOT>. در صورت عدم تعیین، git cvsimport تلاش می‌کند آن را از CVS/Repository بخواند.

-C <target-dir>

مخزن گیت برای واردسازی. اگر دایرکتوری وجود نداشته باشد، ایجاد خواهد شد. پیش‌فرض، دایرکتوری فعلی است.

-r <remote>

ریموت گیت برای وارد کردن این مخزن CVS به آن. تمام شاخه‌های CVS را به remotes/<remote>/<branch> منتقل می‌کند، مشابه روشی که git clone به طور پیش‌فرض از origin استفاده می‌کند.

-o <branch-for-HEAD>

هنگامی که هیچ ریموتی مشخص نشده باشد (از طریق -r)، شاخه HEAD از CVS به شاخه origin درون مخزن گیت وارد می‌شود، زیرا HEAD پیشاپیش معنای خاصی برای گیت دارد. هنگامی که یک ریموت مشخص شود، شاخه HEAD به صورت remotes/<remote>/master نام‌گذاری می‌شود که بازتابی از رفتار git clone است. اگر می‌خواهید به شاخه متفاوتی وارد کنید از این گزینه استفاده نمایید.

از -o master برای ادامه واردسازی که در ابتدا با ابزار قدیمی cvs2git انجام شده بود استفاده کنید.

-i

فقط واردسازی: پس از واردسازی checkout انجام ندهید. این گزینه تضمین می‌کند که دایرکتوری کاری و ایندکس دست‌نخورده باقی بمانند و در صورت عدم وجود، آن‌ها را ایجاد نمی‌کند.

-k

حذف کلمات کلیدی (Kill keywords): فایل‌ها را با -kk از بایگانی CVS استخراج می‌کند تا از ایجاد تغییرات پر سر و صدا جلوگیری شود. به شدت توصیه می‌شود، اما به طور پیش‌فرض غیرفعال است تا سازگاری با درخت‌های واردشده اولیه حفظ گردد.

-u

تبدیل زیرخط‌ها (underscores) در نام‌های تگ و شاخه به نقطه.

-s <subst>

جایگزینی نویسه «/» در نام‌های شاخه با <subst>

-p <options-for-cvsps>

گزینه‌های اضافی برای cvsps. گزینه‌های -u و -A ضمنی هستند و نباید در اینجا استفاده شوند.

اگر نیاز به ارسال چندین گزینه دارید، آن‌ها را با کاما جدا کنید.

-z <fuzz>

ارسال ضریب تلورانس زمانی (fuzz factor) به cvsps، بر حسب ثانیه. اگر تنظیم نشود، پیش‌فرض cvsps مقدار ۳۰۰ ثانیه است.

-P <cvsps-output-file>

به جای فراخوانی cvsps، فایل خروجی ارائه‌شده cvsps را بخوانید. برای اشکال‌زدایی یا زمانی که cvsps در خارج از cvsimport مدیریت می‌شود مفید است.

-m

تلاش برای تشخیص ادغام‌ها بر اساس پیام کامیت. این گزینه عبارات باقاعده پیش‌فرضی را فعال می‌کند که تلاش می‌کنند نام شاخه مبدأ را از پیام کامیت دریافت کنند.

-M <regex>

تلاش برای تشخیص ادغام‌ها بر اساس پیام کامیت با یک عبارت باقاعده سفارشی. می‌تواند به همراه -m برای فعال کردن عبارات باقاعده پیش‌فرض نیز استفاده شود. باید اسلش‌های رو به جلو را اسکیپ کنید.

عبارت باقاعده باید نام شاخه مبدأ را در $1 دریافت کند.

این گزینه می‌تواند چندین بار برای ارائه چندین عبارت باقاعده تشخیص استفاده شود.

-S <regex>

نادیده گرفتن مسیرهای منطبق بر عبارت باقاعده.

-a

واردسازی همه کامیت‌ها، از جمله کامیت‌های اخیر. cvsimport به طور پیش‌فرض از کامیت‌هایی که مهر زمانی آن‌ها کمتر از ۱۰ دقیقه پیش است صرف‌نظر می‌کند.

-L <limit>

محدود کردن تعداد کامیت‌های واردشده. راهکاری موقت برای مواردی که cvsimport دچار نشت حافظه می‌شود.

-A <author-conv-file>

به طور پیش‌فرض CVS هنگام نوشتن گزارش‌های کامیت خود از نام کاربری یونیکس استفاده می‌کند. استفاده از این گزینه و یک فایل author-conv-file نام ثبت‌شده در CVS را به نام نویسنده، رایانامه و منطقه زمانی اختیاری نگاشت می‌کند:
exon=Andreas Ericsson <ae@op5.se>
spawn=Simon Pawn <spawn@frog-pond.org> America/Chicago

دستور git cvsimport باعث می‌شود به نظر برسد که مقادیر GIT_AUTHOR_NAME و GIT_AUTHOR_EMAIL آن نویسندگان از ابتدا به درستی تنظیم شده بوده‌اند. اگر یک منطقه زمانی مشخص شود، انحراف مربوطه روی GIT_AUTHOR_DATE اعمال خواهد شد.

برای راحتی، هر بار که گزینه -A ارائه می‌شود این داده‌ها در $GIT_DIR/cvs-authors ذخیره شده و هر بار که git cvsimport اجرا می‌گردد از همان فایل خوانده می‌شوند.

اگر قصد دارید بعداً تغییرات را با git cvsexportcommit مجدداً به CVS صادر کنید، استفاده از این ویژگی توصیه نمی‌شود.

-R

ایجاد یک فایل $GIT_DIR/cvs-revisions حاوی نگاشتی از شماره‌های ویرایش CVS به شناسه‌های کامیت تازه ایجادشده گیت. فایل تولیدشده شامل یک خط به ازای هر جفت (filename, revision) واردشده خواهد بود؛ هر خط به این شکل خواهد بود:
src/widget.c 1.1 1d862f173cdc7325b6fa6d2ae1cfd61fd1b512b7

اگر فایل از قبل موجود باشد، داده‌های ویرایش به آن اضافه می‌شوند تا هنگام واردسازی‌های افزایشی استفاده شوند.

اگر شماره‌های ویرایش CVS را در پیام‌های کامیت، سامانه‌های ردیابی باگ، بایگانی‌های رایانامه و نظایر آن ذخیره کرده‌اید، این گزینه ممکن است مفید باشد.

-h

چاپ یک پیام خلاصه کاربرد و خروج.

اگر -v مشخص شده باشد، اسکریپت گزارش می‌دهد که در حال انجام چه کاری است.

در غیر این صورت، موفقیت به سبک یونیکس نشان داده می‌شود، یعنی به سادگی با خروج با وضعیت صفر.

مشکلات مربوط به برچسب‌های زمانی:

•اگر برچسب‌های زمانی کامیت‌ها در مخزن CVS به اندازه کافی پایدار نباشند که برای ترتیب‌بندی کامیت‌ها استفاده شوند، تغییرات ممکن است با ترتیب نادرست نشان داده شوند.
•اگر هر فایلی بیش از یک بار با «cvs import» وارد شده باشد (مثلاً وارد کردن بیش از یک انتشار ارائه‌دهنده)، شاخه HEAD حاوی محتوای نادرست خواهد بود.
•اگر ترتیب برچسب‌های زمانی فایل‌های مختلف با ترتیب ویرایش‌ها درون بازه زمانی تطبیق کامیت تداخل پیدا کند، ممکن است ترتیب کامیت‌ها اشتباه باشد.

مشکلات مربوط به شاخه‌ها:

•شاخه‌هایی که هیچ کامیتی روی آن‌ها انجام نشده باشد وارد نمی‌شوند.
•تمام فایل‌ها از نقطه انشعاب به یک شاخه اضافه می‌شوند حتی اگر هرگز در CVS اضافه نشده باشند.
•این مورد برای فایل‌هایی صدق می‌کند که به شاخه مبدأ اضافه شده‌اند پس از آنکه شاخه فرزند ایجاد شده بود: اگر قبلاً هیچ کامیتی روی شاخه فرزند انجام نشده باشد، آنها به اشتباه در گیت به شاخه فرزند اضافه می‌شوند.

مشکلات مربوط به برچسب‌ها (tags):

•چندین برچسب روی یک ویرایش یکسان وارد نمی‌شوند.

اگر شک دارید که هر یک از این مشکلات ممکن است برای مخزنی که می‌خواهید وارد کنید پیش بیاید، استفاده از cvs2git را مد نظر قرار دهید:

•ابزار cvs2git (بخشی از cvs2svn)، https://subversion.apache.org

بخشی از مجموعه git(1)

1.
cvs2git
2.
cvs-fast-export
2026-06-29 Git 2.55.0