FILTERDIFF(1) Man pages FILTERDIFF(1)

filterdiff - استخراج یا حذف diffها از یک فایل diff

filterdiff [[-i PATTERN] | [--include=PATTERN]] [[-I FILE] | [--include-from-file=FILE]] [[-p n] | [--strip-match=n]] [--strip=n] [--git-prefixes=strip|keep] [--git-extended-diffs=exclude|include] [--addprefix=PREFIX] [--addoldprefix=PREFIX] [--addnewprefix=PREFIX] [[-x PATTERN] | [--exclude=PATTERN]] [[-X FILE] | [--exclude-from-file=FILE]] [[-v] | [--verbose]] [--clean] [--in-place] [[-z] | [--decompress]] [[-# RANGE] | [--hunks=RANGE]] [--lines=RANGE] [[-FRANGE] | [--files=RANGE]] [--annotate] [--format=FORMAT] [--as-numbered-lines=WHEN] [--remove-timestamps] [file...]

filterdiff {[--help] | [--version] | [--list] | [--grep ...]}

شما می‌توانید از filterdiff برای دریافت پَچی استفاده کنید که از میان مجموعه‌ای بزرگ‌تر از پچ‌ها، بر روی فایل‌های منطبق با الگوی جانشین (wildcard) پوستهٔ PATTERN اعمال می‌شود. برای مثال، جهت مشاهدهٔ پچ‌های درون patch-2.4.3.gz که بر روی تمامی فایل‌های با نام lp.c اعمال می‌شوند:

filterdiff -z -i '*/lp.c' patch-2.4.3.gz

اگر هیچ‌یک از گزینه‌های -i یا -x مشخص نشوند، -i '*' فرض می‌شود. به این ترتیب filterdiff می‌تواند برای پاک‌سازی یک فایل diff موجود، حذف خطوط زائد از ابتدا (مانند متن بدنهٔ ایمیل) یا میان قطعه‌ها (مانند آنچه در diffهای CVS وجود دارد) استفاده شود. برای استخراج داده‌های خالص پچ، از دستوری مانند این استفاده کنید:

filterdiff message-with-diff-in-the-body > patch

دستور Filterdiff از قالب‌های diff نوع unified، context و Git پشتیبانی می‌کند. قالب Git شامل پشتیبانی از فایل‌های باینری، تغییر نام فایل‌ها، تغییرات سطح دسترسی و دیگر ویژگی‌های اختصاصی diff در Git است.

توجه داشته باشید که تفسیر الگوی جانشین پوسته، نویسه‌های اسلش یا نقطه را خاص در نظر نمی‌گیرد (به عبارت دیگر، هیچ پرچمی به fnmatch داده نمی‌شود). این بدین منظور است که الگوهایی از نوع “*/basename” بتوانند بدون محدود کردن تعداد بخش‌های مسیر فایل مشخص شوند.

شما می‌توانید از هر دو قالب diff یعنی unified و context با این برنامه استفاده کنید..SH "گزینه‌ها (OPTIONS)"

-iPATTERN, --include=PATTERN

تنها فایل‌های منطبق با PATTERN را شامل می‌شود. تمام خطوط دیگر در ورودی حذف می‌شوند.

-IFILE, --include-from-file=FILE

تنها فایل‌های منطبق با هر یک از الگوهای فهرست‌شده در FILE (یک الگو در هر خط) را شامل می‌شود. تمام خطوط دیگر در ورودی حذف می‌شوند.

-xPATTERN, --exclude=PATTERN

فایل‌های منطبق با PATTERN را مستثنی می‌کند. تمام خطوط دیگر در ورودی نمایش داده می‌شوند.

-XFILE, --exclude-from-file=FILE

فایل‌های منطبق با هر یک از الگوهای فهرست‌شده در FILE (یک الگو در هر خط) را مستثنی می‌کند. تمام خطوط دیگر در ورودی نمایش داده می‌شوند.

-pn, --strip-match=n

هنگام تطبیق، از n بخش ابتدایی نام مسیر چشم‌پوشی می‌کند.

-#RANGE, --hunks=RANGE

تنها هانک‌های درون RANGE مشخص‌شده را شامل می‌شود. هانک‌ها از ۱ شماره‌گذاری می‌شوند و بازه، فهرستی جداشده با کاما از اعداد یا بازه‌های “first-last” است که می‌تواند به طور اختیاری با یک اصلاح‌کننده 'x' که کل بازه را وارونه می‌کند آغاز شود؛ برای نشان دادن نبود محدودیت در هر جهت، می‌توان مقدار ابتدا یا انتهای بازه را حذف کرد.

--lines=RANGE

تنها هانک‌هایی را شامل می‌شود که حاوی خطوطی از فایل اصلی باشند که در RANGE مشخص‌شده قرار دارند. خطوط از ۱ شماره‌گذاری می‌شوند و بازه، فهرستی جداشده با کاما از اعداد یا بازه‌های “first-last” است که می‌تواند به طور اختیاری با یک اصلاح‌کننده 'x' که کل بازه را وارونه می‌کند آغاز شود؛ برای نشان دادن نبود محدودیت در هر جهت، می‌توان مقدار ابتدا یا انتهای بازه را حذف کرد.

-F=RANGE, --files=RANGE

تنها فایل‌های مشخص‌شده توسط RANGE تعیین‌شده را شامل می‌شود. فایل‌ها از ۱ و به ترتیبی که در ورودی وصله ظاهر می‌شوند شماره‌گذاری می‌گردند، و بازه، فهرستی جداشده با کاما از اعداد یا بازه‌های “first-last” است که می‌تواند به طور اختیاری با یک اصلاح‌کننده 'x' که کل بازه را وارونه می‌کند آغاز شود؛ برای نشان دادن نبود محدودیت در هر جهت، می‌توان مقدار ابتدا یا انتهای بازه را حذف کرد.

--annotate

روی هر هانک، نام فایل و شماره هانک را حاشیه‌نویسی می‌کند.

--format=unified|context

استفاده از قالب خروجی مشخص‌شده.

--strip=n

حذف n بخش ابتدایی نام مسیرها در خروجی.

--git-prefixes=strip|keep

نحوه مدیریت پیشوندهای a/ و b/ در نام فایل‌های diff مربوط به Git. با strip، پیشوندها هم برای تطبیق نام فایل (هنگام استفاده از گزینه‌های -i و -x) و هم برای خروجی نام فایل (مشابه --strip) حذف می‌شوند. با keep (پیش‌فرض)، رفتار کنونی حفظ می‌شود. برای هر دو مورد diffهای اختصاصی Git (فایل‌های باینری، تغییر نام‌ها، تغییرات حالت) و diffهای سنتی که بخشی از یک وصله Git هستند اِعمال می‌شود. نکته: با keep، عملیات رونوشت و تغییر نام به گونه‌ای رفتار می‌شوند که گویی دارای پیشوندهای a/ و b/ هستند تا با سایر عملیات Git سازگار باشند. مقدار پیش‌فرض در نسخه 0.5.0 به strip تغییر خواهد کرد.

--git-extended-diffs=exclude|include

کنترل می‌کند که آیا diffهای Git بدون هانک‌های محتوای سنتی پردازش شوند یا خیر. این شامل تغییر نام‌ها، رونوشت‌ها، تغییرات صرفاً در حالت (mode) و فایل‌های باینری است. با exclude (پیش‌فرض در 0.4.x)، از این diffها صرف‌نظر می‌شود. با include (پیش‌فرض در +0.5.0)، این diffها به طور عادی پردازش می‌شوند. این گزینه بر شماره‌گذاری فایل‌ها با -N و فیلتر کردن فایل‌ها با -F تأثیر می‌گذارد.

--addprefix=PREFIX

افزودن PREFIX به عنوان پیشوند به نام مسیرها در خروجی. این گزینه بر هرگونه تنظیمات جداگانه مشخص‌شده با گزینه‌های --addoldprefix یا --addnewprefix ارجحیت دارد.

--addoldprefix=PREFIX

افزودن PREFIX به عنوان پیشوند به نام مسیرهای فایل‌های قدیمی یا اصلی در خروجی.

--addnewprefix=PREFIX

افزودن PREFIX به عنوان پیشوند به نام مسیرهای فایل‌های به‌روزرسانی‌شده یا جدید در خروجی.

--as-numbered-lines=before|after|original-before|original-after

به جای یک قطعه از وصله، خطوط هانک‌های انتخاب‌شده را همراه با شماره خط فایل پیش از (یا پس از) اِعمال وصله نمایش می‌دهد، که در ابتدای هر خط به دنبال آن یک نویسه TAB و یک دونقطه قرار می‌گیرد. پیش از هر هانک به جز هانک اول، خطی متشکل از “...” قرار خواهد گرفت.

گزینه‌های before و after شماره خطوط را با احتساب هانک‌های نادیده‌گرفته‌شده نشان می‌دهند. گزینه‌های original-before و original-after شماره خطوط را همان‌گونه که در diff اصلی ظاهر می‌شوند نمایش می‌دهند و بافت اصلی شماره خط را حفظ می‌کنند. این قابلیت برای سامانه‌های CI/CD که نیاز به گزارش خطاها بر روی شماره خطوط دقیق diff اصلی دارند مفید است.

--remove-timestamps

برچسب‌های زمانی فایل را در خروجی درج نمی‌کند.

-v, --verbose

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

--clean

همیشه تمام خطوط غیر diff را از خروجی حذف می‌کند؛ حتی هنگامی که یک الگوی نام فایل مستثنی شده باشد.

--in-place

خروجی را به جای خروجی استاندارد، مستقیماً در فایل‌های ورودی اصلی می‌نویسد. این امر امکان فیلتر کردن چندین فایل وصله را بدون نیاز به حلقه‌های تغییر مسیر دستی فراهم می‌کند.

-z, --decompress

فایل‌های دارای پسوند .gz و .bz2 را از حالت فشرده خارج می‌کند.

--help

نمایش پیام کوتاه راهنمای استفاده. --version
نمایش شماره نسخه filterdiff.

--list

در عوض مانند lsdiff(1) عمل می‌کند.

--grep

در عوض مانند grepdiff(1) عمل می‌کند.

برای مشاهده تمام قطعات وصله (hunkها) که بر پنج خط اول یک فایل C اثر می‌گذارند:

filterdiff -i '*.c' --lines=-5 < patch

برای مشاهده نخستین قطعه از وصله هر فایل، استفاده کنید از:

filterdiff -#1 patchfile

برای مشاهده وصله‌هایی که یک فایل ChangeLog را در یک زیرپوشه تغییر می‌دهند، استفاده کنید از:

filterdiff -p1 Changelog

برای دیدن وصله‌های کامل به ازای هر وصله‌ای که خط ۱ از فایل اصلی را تغییر می‌دهد، استفاده کنید از:

filterdiff --lines=1 patchfile | lsdiff | \
  xargs -rn1 filterdiff patchfile -i

برای دیدن تمام قطعات به جز قطعه اول از یک وصله خاص، می‌توانید استفاده کنید از:

filterdiff -p1 -i file.c -#2- foo-patch

اگر فهرست کاملاً مشخصی از قطعات در یک وصله دارید که می‌خواهید آن‌ها را ببینید، آن‌ها را فهرست کنید:

filterdiff -#1,2,5-8,10,12,27-

برای مشاهده خطوط فایل‌هایی که وصله خواهند شد به همان صورتی که پس از اعمال وصله نمایان می‌شوند، استفاده کنید از:

filterdiff --as-numbered-lines=after patch.file

می‌توانید همان زمینه را پیش از اعمال وصله مشاهده کنید با:

filterdiff --as-numbered-lines=before
patch.file

برای سامانه‌های CI/CD که نیازمند شماره خطوط منطبق با زمینه diff اصلی هستند (مفید برای گزارش خطا)، از گونه‌های original-* استفاده کنید:

filterdiff --as-numbered-lines=original-after patch.file

همچنین می‌توان از filterdiff برای تبدیل بین قالب‌های diff از نوع unified و context استفاده کرد:

filterdiff -v --format=unified context.diff

قالب‌های diff در Git به طور کامل پشتیبانی می‌شوند، از جمله فایل‌های باینری، تغییر نام فایل‌ها و تغییرات حالت مجوزها..SH "همچنین ببینید (SEE ALSO)"

lsdiff(1), grepdiff(1), patchview(1)

Tim Waugh <twaugh@redhat.com>

نگه‌دارندهٔ بسته
23 Jan 2009 patchutils