CO(1) General Commands Manual CO(1) نام (NAME) co - استخراج ویرایش‌های RCS خلاصه دستور (SYNOPSIS) co [گزینه‌ها] فایل ... توضیحات (DESCRIPTION) co یک ویرایش را از هر فایل RCS بازیابی کرده و آن را در فایل کاری متناظر ذخیره می‌کند. نام‌های فایلی که با یک پسوند RCS مطابقت دارند، نشان‌دهندهٔ فایل‌های RCS هستند؛ سایر نام‌ها نشان‌دهندهٔ فایل‌های کاری می‌باشند. نام‌ها همان‌طور که در ci(1) توضیح داده شده است، با یکدیگر جفت می‌شوند. ویرایش‌های یک فایل RCS می‌توانند به‌صورت قفل‌شده یا قفل‌نشده استخراج شوند. قفل‌کردن یک ویرایش از به‌روزرسانی‌های هم‌پوشان جلوگیری می‌کند. ویرایشی که برای خواندن یا پردازش (مانند کامپایل کردن) استخراج می‌شود، نیازی به قفل‌شدن ندارد. ویرایشی که برای ویرایش و ثبت بعدی (checkin) استخراج می‌شود، معمولاً باید قفل شود. استخراج همراه با قفل در صورتی که ویرایش مورد نظر برای استخراج در حال حاضر توسط کاربر دیگری قفل شده باشد، با شکست مواجه می‌شود. (یک قفل را می‌توان با rcs(1) شکست.)  استخراج همراه با قفل همچنین مستلزم آن است که فراخواننده در فهرست دسترسی فایل RCS باشد، مگر آنکه مالک فایل یا مدیر سیستم (superuser) باشد، یا فهرست دسترسی خالی باشد. استخراج بدون قفل مشمول محدودیت‌های فهرست دسترسی نبوده و تحت تأثیر وجود قفل‌ها قرار نمی‌گیرد. یک ویرایش توسط گزینه‌های مربوط به شمارهٔ ویرایش یا شاخه، تاریخ/زمان ثبت، نویسنده، یا وضعیت انتخاب می‌شود. هنگامی که گزینه‌های انتخاب به‌صورت ترکیبی اعمال شوند، co جدیدترین ویرایشی را که تمامی آن‌ها را برآورده کند بازیابی می‌کند. اگر هیچ‌یک از گزینه‌های انتخاب مشخص نشده باشد، co جدیدترین ویرایش را از شاخهٔ پیش‌فرض بازیابی می‌کند (معمولاً شاخهٔ اصلی یا trunk؛ گزینهٔ -b از rcs(1) را ببینید). یک شمارهٔ ویرایش یا شاخه می‌تواند به هر یک از گزینه‌های -f، -I، -l، -M، -p، -q، -r یا -u ضمیمه شود. گزینه‌های -d (تاریخ)، -s (وضعیت)، و -w (نویسنده) از یک شاخهٔ منفرد، یعنی شاخهٔ انتخابی (selected)، استخراج را انجام می‌دهند که این شاخه یا توسط یکی از گزینه‌های -f، ...، -u یا توسط شاخهٔ پیش‌فرض مشخص می‌شود. دستور co که روی یک فایل RCS بدون هیچ ویرایشی اعمال شود، یک فایل کاری با طول صفر ایجاد می‌کند. co همواره جایگزینی کلمات کلیدی را انجام می‌دهد (زیر را ببینید). گزینه‌ها (OPTIONS) -r[rev] جدیدترین ویرایشی را که شمارهٔ آن کوچک‌تر یا مساوی rev است بازیابی می‌کند. اگر rev به‌جای ویرایش، نشان‌دهندهٔ یک شاخه باشد، جدیدترین ویرایش روی آن شاخه بازیابی می‌شود. اگر rev مشخص نشود، جدیدترین ویرایش روی شاخهٔ پیش‌فرض (گزینهٔ -b از rcs(1) را ببینید) بازیابی می‌شود. اگر rev برابر $ باشد، co شمارهٔ ویرایش را از مقادیر کلمات کلیدی موجود در فایل کاری تعیین می‌کند. در غیر این صورت، یک ویرایش از یک یا چند فیلد عددی یا نمادین تشکیل می‌شود که با نقطه از هم جدا شده‌اند. اگر rev با یک نقطه آغاز شود، شاخهٔ پیش‌فرض (معمولاً شاخهٔ اصلی یا trunk) به ابتدای آن افزوده می‌شود. اگر rev یک شمارهٔ شاخه باشد که به دنبال آن یک نقطه آمده است، جدیدترین ویرایش آن شاخه استفاده می‌شود. معادل عددی یک فیلد نمادین با گزینهٔ -n از دستورهای ci(1) و rcs(1) مشخص می‌شود. -l[rev] مشابه -r، با این تفاوت که ویرایش بازیابی‌شده را برای فراخواننده قفل نیز می‌کند. -u[rev] مشابه -r، با این تفاوت که اگر ویرایش بازیابی‌شده توسط فراخواننده قفل شده باشد، قفل آن را باز می‌کند. اگر rev مشخص نشود، -u ویرایش قفل‌شده توسط فراخواننده را در صورت وجود بازیابی می‌کند؛ در غیر این صورت، جدیدترین ویرایش را از شاخهٔ پیش‌فرض بازیابی می‌نماید. -f[rev] بازنویسی فایل کاری را اجبار می‌کند؛ در ترکیب با -q مفید است. همچنین بخش FILE MODES در زیر را ببینید. -kkv رشته‌های کلمات کلیدی را با استفاده از قالب پیش‌فرض تولید می‌کند، مثلاً $Revision: 5.10.1 $ برای کلمهٔ کلیدی Revision. نام قفل‌کننده در مقدار رشته‌های کلمات کلیدی Header، Id و Locker تنها زمانی درج می‌شود که فایل در حال قفل‌شدن باشد، یعنی توسط ci -l و co -l. این حالت پیش‌فرض است. -kkvl مشابه -kkv، با این تفاوت که اگر ویرایش داده‌شده در حال حاضر قفل باشد، نام قفل‌کننده همیشه درج می‌شود. -kk تنها نام کلمات کلیدی را در رشته‌های کلمات کلیدی تولید می‌کند؛ مقادیر آن‌ها حذف می‌شود. بخش KEYWORD SUBSTITUTION در زیر را ببینید. برای مثال، برای کلمهٔ کلیدی Revision، رشتهٔ $Revision$ را به‌جای $Revision: 5.10.1 $ تولید می‌کند. این گزینه برای نادیده گرفتن تفاوت‌های ناشی از جایگزینی کلمات کلیدی هنگام مقایسهٔ ویرایش‌های مختلف یک فایل مفید است. پیام‌های گزارش حتی در صورت مشخص شدن -kk پس از کلمات کلیدی $Log$ درج می‌شوند، زیرا این عمل هنگام ادغام تغییرات معمولاً مفیدتر است. -ko رشتهٔ کلمهٔ کلیدی قدیمی را که درست پیش از ثبت (checkin) در فایل کاری وجود داشت تولید می‌کند. برای مثال، برای کلمهٔ کلیدی Revision، در صورتی که رشته هنگام ثبت فایل به آن صورت بوده باشد، رشتهٔ $Revision: 1.1 $ را به‌جای $Revision: 5.10.1 $ تولید می‌کند. این گزینه می‌تواند برای قالب‌های فایلی مفید باشد که نمی‌توانند هیچ تغییری را در زیررشته‌هایی که تصادفاً به شکل رشته‌های کلمات کلیدی هستند تحمل کنند..TP -kb یک تصویر باینری از رشته کلیدواژه قدیمی ایجاد می‌کند. این گزینه مانند -ko عمل می‌کند، با این تفاوت که تمام ورودی و خروجی‌های فایل کاری را در حالت باینری انجام می‌دهد. این امر در میزبان‌های Posix و Unix تفاوت چندانی ایجاد نمی‌کند، اما در میزبان‌های شبه-DOS برای مقداردهی اولیه یک RCS file که قرار است برای فایل‌های باینری استفاده شود، باید از rcs -i -kb استفاده کرد. همچنین، در تمام میزبان‌ها، rcsmerge(1) معمولاً در زمانی که -kb فعال است از ادغام فایل‌ها خودداری می‌کند. -kv تنها مقادیر کلیدواژه را برای رشته‌های کلیدواژه تولید می‌کند. به عنوان مثال، برای کلیدواژه Revision، به جای $Revision: 5.10.1 $، رشته 5.10.1 را تولید می‌کند. این گزینه می‌تواند در تولید فایل‌ها در زبان‌های برنامه‌نویسی که در آن‌ها حذف جداکننده‌های کلیدواژه مانند $Revision: $ از یک رشته دشوار است، کمک کند. با این حال، پس از حذف نام کلیدواژه‌ها، جایگزینی بعدی کلیدواژه‌ها امکان‌پذیر نخواهد بود، بنابراین این گزینه باید با احتیاط استفاده شود. به دلیل این خطرِ از دست رفتن کلیدواژه‌ها، این گزینه را نمی‌توان با -l ترکیب کرد، و مجوز نوشتن مالک فایل کاری غیرفعال می‌شود؛ برای ویرایش فایل در دفعات بعد، آن را دوباره بدون -kv استخراج (check out) کنید. -p[rev] نسخهٔ بازیابی‌شده را به جای ذخیره در فایل کاری، در خروجی استاندارد چاپ می‌کند. این گزینه زمانی مفید است که co بخشی از یک لوله (pipe) باشد. -q[rev] حالت بی‌صدا؛ پیام‌های عیب‌یابی چاپ نمی‌شوند. -I[rev] حالت تعاملی؛ از کاربر اعلان و پرسش می‌شود، حتی اگر ورودی استاندارد یک پایانه نباشد. -ddate جدیدترین نسخه در شاخهٔ انتخاب‌شده را که تاریخ/زمان تحویل (checkin) آن کوچک‌تر یا مساوی با date باشد بازیابی می‌کند. تاریخ و زمان را می‌توان در قالبی آزاد مشخص کرد. منطقه زمانی LT نمایانگر زمان محلی (local time) است؛ نام‌های دیگر مناطق زمانی رایج نیز شناخته می‌شوند. برای مثال، اگر زمان محلی ۱۱ ژانویه ۱۹۹۰ ساعت ۲۰:۰۰ به وقت Pacific Standard Time (هشت ساعت غربی‌تر از Coordinated Universal Time، (UTC)) باشد، date های زیر با یکدیگر معادل هستند: 8:00 pm lt 4:00 AM, Jan. 12, 1990 default is UTC 1990-01-12 04:00:00+00 ISO 8601 (UTC) 1990-01-11 20:00:00-08 ISO 8601 (local time) 1990/01/12 04:00:00 traditional RCS format Thu Jan 11 20:00:00 1990 LT output of ctime(3) + LT Thu Jan 11 20:00:00 PST 1990 output of date(1) Fri Jan 12 04:00:00 GMT 1990 Thu, 11 Jan 1990 20:00:00 -0800 Internet RFC 822 12-January-1990, 04:00 WET اکثر فیلدها در تاریخ و زمان می‌توانند پیش‌فرض داشته باشند. منطقه زمانی پیش‌فرض معمولاً UTC است، اما می‌توان آن را با گزینهٔ -z تغییر داد. سایر مقادیر پیش‌فرض به ترتیب سال، ماه، روز، ساعت، دقیقه و ثانیه (از بیشترین به کمترین اهمیت) تعیین می‌شوند. حداقل یکی از این فیلدها باید ارائه شود. برای فیلدهای حذف‌شده‌ای که اهمیت بالاتری نسبت به بالاترین فیلد ارائه‌شده دارند، مقادیر فعلی منطقه زمانی در نظر گرفته می‌شوند. برای تمام فیلدهای حذف‌شدهٔ دیگر، کمترین مقادیر ممکن در نظر گرفته می‌شود. به عنوان مثال، بدون -z، تاریخ 20, 10:30 به طور پیش‌فرض به 10:30:00 UTC از بیستمین روزِ ماه و سال جاری منطقه زمانی UTC تبدیل می‌شود. اگر تاریخ/زمان حاوی فاصله باشد، باید داخل علامت نقل‌قول قرار گیرد. -M[rev] زمان ویرایش (modification time) فایل کاری جدید را برابر با تاریخ نسخهٔ بازیابی‌شده قرار می‌دهد. از این گزینه با احتیاط استفاده کنید؛ چرا که ممکن است عملکرد make(1) را دچار اختلال کند. -sstate جدیدترین نسخه را در شاخهٔ انتخاب‌شده که وضعیت آن بر روی state تنظیم شده است، بازیابی می‌کند. -S حالت self-same را فعال می‌کند. در این حالت، مالک قفل اهمیتی ندارد، بلکه تنها وجود داشتنِ آن مهم است. در عمل، این بدین معناست که کاربر نمی‌تواند یک نسخه را دو بار استخراج (check out) کند. -T زمان ویرایش (modification time) فایل RCS file را حفظ می‌کند، حتی اگر RCS file به دلیل افزودن یا حذف یک قفل تغییر کند. این گزینه می‌تواند از کامپایل مجدد گسترده‌ای که توسط وابستگی make(1) یک نسخه دیگر از فایل کاری به RCS file ایجاد می‌شود، جلوگیری کند. از این گزینه با احتیاط استفاده کنید؛ این گزینه می‌تواند کامپایل مجدد را حتی در مواقعی که نیاز است متوقف کند، به عنوان مثال، زمانی که تغییر قفل به معنای تغییر در رشته‌های کلیدواژه در فایل کاری دیگر باشد. -w[login] جدیدترین نسخه در شاخهٔ انتخاب‌شده را که توسط کاربری با نام کاربری login ثبت (check in) شده است، بازیابی می‌کند. اگر آرگومان login حذف شود، نام کاربری فراخواننده فرض می‌شود. -jjoinlist یک نسخهٔ جدید تولید می‌کند که حاصل پیوند (join) نسخه‌های موجود در joinlist است. این گزینه تا حد زیادی با rcsmerge(1) منسوخ شده است، اما برای سازگاری با گذشته حفظ شده است. فهرست joinlist یک لیست جداشده با کاما از جفت‌هایی با قالب rev2:rev3, است که در آن rev2 و rev3 شماره‌های نسخه (نمادین یا عددی) هستند. برای اولین جفت، rev1 نشان‌دهنده نسخهٔ انتخاب‌شده توسط گزینه‌های بالا از -f، ...، -w است. برای سایر جفت‌ها، rev1 نشان‌دهنده نسخهٔ تولیدشده توسط جفت قبلی است. (بنابراین، خروجی یک پیوند به ورودی پیوند بعدی تبدیل می‌شود.) برای هر جفت، co نسخه‌های rev1 و rev3 را با توجه به rev2 پیوند می‌دهد. این بدان معناست که تمام تغییراتی که rev2 را به rev1 تبدیل می‌کنند، روی رونوشتی از rev3 اعمال می‌شوند. این ویژگی به‌ویژه زمانی مفید است که rev1 و rev3 انتهای دو شاخه با نیاکان مشترک rev2 باشند. اگر rev1