- آیا تا به حال پیش آمده که با تغییر یک خط کد، کل پروژهتان از کار بیفتد و ندانید چگونه به حالت قبل برگردید؟
- آیا از دیدن فایلهایی با نامهای شلوغ و گیجکننده مثل project_final_v2_new در پوشه کارهایتان خسته شدهاید؟
- آیا هنگام مطالعه مستندات فنی یا شرکت در جلسات برنامهنویسی، معنای دقیق کلماتی مثل Repository یا Pull Request برایتان مبهم است؟
- آیا از اینکه با یک دستور اشتباه در گیت، زحمات همتیمیهایتان را از بین ببرید، دچار اضطراب میشوید؟
یادگیری یک زبان جدید همیشه با ترس از اشتباه همراه است، اما وقتی پای دنیای تکنولوژی و برنامهنویسی به میان میآید، این اضطراب دوچندان میشود. در این راهنمای جامع، ما به بررسی دقیق و کاربردی واژگان گیت و گیتهاب میپردازیم و این مفاهیم را به زبان ساده کالبدشکافی میکنیم تا یک بار برای همیشه، ابهامات شما برطرف شده و با اعتماد به نفس کامل در پروژههای تیمی مشارکت کنید.
| اصطلاح کلیدی | مفهوم ساده | مثال کاربردی |
|---|---|---|
| Repository (Repo) | پوشه یا مخزن اصلی پروژه | ایجاد یک Repo برای ذخیره کدهای وبسایت |
| Commit | ثبت نهایی تغییرات (مانند دکمه Save) | ثبت تغییرات بخش منوی سایت با پیامی مشخص |
| Branch | یک مسیر موازی برای تست ویژگیهای جدید | ایجاد شاخه جدید برای طراحی بخش پرداخت |
| Merge | ادغام کردن تغییرات دو شاخه با هم | اضافه کردن کدهای بخش پرداخت به کد اصلی پروژه |
چرا یادگیری واژگان گیت و گیتهاب برای هر متخصص ضروری است؟
بسیاری از زبانآموزان و برنامهنویسان تازه کار تصور میکنند که گیت تنها یک ابزار ذخیرهسازی است. اما از دیدگاه زبانشناسی کاربردی، گیت در واقع “زبان مشترک” تیمهای فنی در سراسر جهان است. وقتی شما از واژگان گیت و گیتهاب به درستی استفاده میکنید، نه تنها مهارت فنی خود را نشان میدهید، بلکه احتمال سوءتفاهم در پروژههای بینالمللی را به حداقل میرسانید.
از منظر روانشناسی آموزشی، یادگیری این اصطلاحات به صورت طبقهبندی شده (از ساده به پیچیده) به کاهش “اضطراب زبان” کمک میکند. وقتی بدانید پشت هر کلمه چه منطقی نهفته است، دیگر از مواجهه با ترمینال یا محیط گیتهاب هراسی نخواهید داشت.
مفاهیم پایه: درک ساختار ذخیرهسازی
1. Repository (مخزن)
در دنیای واقعی، مخزن جایی است که چیزی در آن نگهداری میشود. در دنیای کنترل نسخه، Repository یا به اختصار Repo، همان پوشه پروژه شماست که تمام تاریخچه تغییرات را در خود جای داده است. این مخزن میتواند روی کامپیوتر شخصی شما (Local) یا روی سرورهای ابری مثل گیتهاب (Remote) باشد.
2. Directory vs. Working Directory
بسیاری از زبانآموزان این دو را اشتباه میگیرند. Directory صرفاً به معنای پوشه است، اما Working Directory به فضایی گفته میشود که شما در حال حاضر روی فایلهای آن کار میکنید و هنوز آنها را به حافظه دائمی گیت نسپردهاید.
3. Staging Area (منطقه انتظار)
این یکی از مفاهیمی است که در ابتدا کمی گیجکننده به نظر میرسد. تصور کنید میخواهید از چندین کالا عکس بگیرید. ابتدا آنها را روی یک میز میچینید و سپس دکمه شاتر را فشار میدهید. Staging Area همان میز است؛ جایی که فایلهای انتخاب شده برای ثبت نهایی، منتظر میمانند.
فرمول ثبت تغییرات: چگونه یک Commit حرفهای بنویسیم؟
در گیت، ما فقط کد نمیزنیم، بلکه “تغییرات را روایت میکنیم”. ساختار یک دستور ثبت تغییرات به این صورت است:
Git Command + Action + Message
- ✅ درست:
git commit -m "Fix: resolve login button alignment"(واضح و عملیاتی) - ❌ نادرست:
git commit -m "changed some things"(مبهم و غیرحرفهای)
استفاده از افعال امری (Imperative Mood) در پیامهای کامیت، یک استاندارد جهانی در زبان انگلیسی تخصصی است. به جای نوشتن Fixed، از Fix استفاده کنید.
کار با شاخهها (Branching): مدیریت سناریوهای مختلف
یکی از بزرگترین مزایای سیستمهای کنترل نسخه، توانایی کار همزمان روی بخشهای مختلف بدون آسیب زدن به نسخه اصلی است. اصطلاحات این بخش عبارتند از:
Main / Master Branch
شاخه اصلی پروژه که معمولاً کد نهایی و بدون نقص در آن قرار دارد. در سالهای اخیر، واژه Main به دلیل مسائل فرهنگی و حساسیتهای زبانی، جایگزین Master شده است.
Checkout & Switch
وقتی میخواهید از یک شاخه به شاخه دیگر بروید، از فعل Switch یا Checkout استفاده میکنید. این کار دقیقاً مثل عوض کردن ریل قطار برای ورود به یک مسیر جدید است.
تعامل با سرورهای دوردست (Remote Operations)
اینجاست که تفاوت بین گیت (نرمافزار روی سیستم شما) و گیتهاب (سرویس میزبانی ابری) مشخص میشود. برای جابجایی کدهایتان بین این دو فضا، به این واژگان گیت و گیتهاب نیاز دارید:
- Clone: کپی کردن کامل یک پروژه از اینترنت روی کامپیوتر شخصی.
- Push: فرستادن تغییرات از سیستم خودتان به سرور (مثل آپلود کردن).
- Pull: دریافت تغییرات جدید از سرور و ادغام آنها با فایلهای خودتان (مثل دانلود و آپدیت).
- Fetch: فقط چک کردن اینکه چه تغییراتی روی سرور اعمال شده، بدون اینکه مستقیماً با کد شما ادغام شود.
تفاوتهای زبانی و اصطلاحات رسمی در مقابل غیررسمی
در محیطهای کاری، دانستن تفاوتهای ظریف زبانی اهمیت زیادی دارد. به جدول زیر توجه کنید:
| موقعیت | عبارت پیشنهادی | توضیح |
|---|---|---|
| رسمی (در جلسات) | “I will initiate a Pull Request.” | استفاده از فعل Initiate بار حرفهایتری دارد. |
| غیررسمی (در چت تیمی) | “I’ll open a PR.” | استفاده از مخفف PR بسیار رایج است. |
| هنگام بروز خطا | “We have a Merge Conflict.” | عبارتی استاندارد برای اعلام تداخل کدها. |
مدیریت تداخلها (Conflicts): نترسید، این یک فرصت است!
بسیاری از زبانآموزان وقتی با کلمه Conflict روبرو میشوند، احساس شکست میکنند. اما از منظر آموزشی، تداخل زمانی رخ میدهد که گیت نمیتواند تصمیم بگیرد کدام نسخه از کد بهتر است و از شما (انسان) کمک میخواهد. در این شرایط، کلماتی مثل Incoming Change (تغییری که از بیرون میآید) و Current Change (تغییری که شما ایجاد کردید) را زیاد خواهید دید.
اشتباهات رایج و باورهای غلط (Common Myths & Mistakes)
در ادامه به برخی از باورهای نادرست که باعث سردرگمی در یادگیری واژگان گیت و گیتهاب میشود، میپردازیم:
- اشتباه اول: گیت همان گیتهاب است. خیر! گیت ابزاری است که روی سیستم شما نصب میشود، اما گیتهاب یک پلتفرم آنلاین برای مدیریت پروژههایی است که از گیت استفاده میکنند.
- اشتباه دوم: باید تمام دستورات را حفظ کنم. به هیچ وجه! حتی حرفهایترین برنامهنویسان هم گاهی برای دستورات پیچیده به مستندات مراجعه میکنند. مهم درک “منطق” کلمات است.
- اشتباه سوم: کامیتهای طولانی بهتر هستند. برعکس! کامیتهای کوچک و مکرر (Atomic Commits) با پیامهای واضح، بسیار ارزشمندتر از یک تغییر بزرگ و مبهم هستند.
سوالات متداول (Common FAQ)
1. تفاوت بین Pull و Fetch چیست؟
به زبان ساده، Fetch فقط خبرها را میآورد (میگوید چه تغییراتی در سرور هست)، اما Pull هم خبرها را میآورد و هم آنها را مستقیماً در کدهای شما اعمال میکند. Pull در واقع ترکیبی از Fetch و Merge است.
2. Fork کردن به چه معناست؟
وقتی شما یک پروژه را Fork میکنید، در واقع یک کپی کامل از آن را به حساب کاربری خودتان در گیتهاب میبرید تا بتوانید بدون اجازه صاحب اصلی، روی آن تغییرات ایجاد کنید. این کار با Clone متفاوت است چون Clone روی سیستم محلی شما انجام میشود.
3. Pull Request (PR) چیست؟
این اصطلاح به معنای درخواست برای بررسی و ادغام کد شما در پروژه اصلی است. یعنی شما میگویید: «من تغییراتی ایجاد کردهام، لطفاً آنها را بررسی کنید و اگر خوب بود، به کد اصلی اضافه کنید.»
4. فایل .gitignore چه کاربردی دارد؟
این فایل لیستی از موارد است که گیت باید آنها را نادیده بگیرد. مثلاً رمزهای عبور شخصی یا فایلهای موقتی سیستم که نباید در مخزن عمومی منتشر شوند.
نتیجهگیری: گام بعدی شما چیست؟
تسلط بر واژگان گیت و گیتهاب اولین و مهمترین قدم برای ورود به دنیای حرفهای توسعه نرمافزار است. به یاد داشته باشید که هیچکس با دانش کامل متولد نشده است. حتی بزرگترین معماران نرمافزار هم روزی با مفهوم ساده Commit کلنجار رفتهاند.
بهترین راه برای کاهش اضطراب و یادگیری عمیق، تمرین مداوم است. سعی کنید از همین امروز یک مخزن (Repo) شخصی بسازید و تغییرات کوچک خود را در آن ثبت کنید. استفاده از این کلمات در محیط واقعی، به تدریج آنها را در ذهن شما تثبیت میکند. فراموش نکنید که گیت فقط یک ابزار نیست؛ بلکه راهی برای برقراری ارتباط با جامعه جهانی برنامهنویسان است. با اعتماد به نفس کد بزنید و از یادگیری لذت ببرید!




سلام. ممنون از مقاله خوبتون. همیشه موقع گفتن ‘Repository’ شک دارم درست تلفظش میکنم یا نه. میشه راهنمایی کنید؟
سلام رضا جان! تلفظ صحیح ‘Repository’ به صورت /rɪˈpɒzɪtəri/ هستش. تمرین کنید که به صدای ‘o’ در ابتدا و ‘i’ در انتها دقت کنید. اگر دوست داشتید میتونید در دیکشنریهای آنلاین مثل Cambridge یا Oxford تلفظ صوتیش رو هم گوش کنید. بازم سوالی بود در خدمتیم!
خیلی مقاله به درد بخوری بود، خصوصاً برای کسایی که مثل من تازه وارد دنیای برنامهنویسی شدن. آیا ‘Commit’ مترادف یا واژه جایگزین دیگهای هم داره که تو این زمینه استفاده بشه؟
فاطمه عزیز، خوشحالیم که مفید بوده! در بستر گیت و کنترل نسخه، ‘Commit’ یک واژه بسیار اختصاصی و استاندارد هست و معمولاً مترادف مستقیمی که به همین معنای ‘ثبت نهایی تغییرات’ باشه، استفاده نمیشه. البته در انگلیسی عمومی میتونیم از ‘save’ یا ‘submit’ استفاده کنیم، اما در گیت، ‘Commit’ بار معنایی خاص خودش رو داره و بهتره همین رو به کار ببریم تا ابهامی ایجاد نشه.
ممنون بابت این راهنمای جامع. همیشه فکر میکردم ‘Branch’ فقط به معنی شاخه درخته، اما اینجا فهمیدم یه معنی تکنیکال خاص خودش رو هم داره. آیا کلمات انگلیسی دیگهای هم هستند که تو برنامهنویسی معنی متفاوتی پیدا کنن؟
سلام علی جان، بله دقیقاً همینطوره! این یکی از نکات جالب زبان انگلیسی در حوزه تخصصی مثل برنامهنویسیه. کلماتی مثل ‘Queue’ (صف)، ‘Stack’ (پشته)، ‘Thread’ (رشته)، ‘Fork’ (انشعاب) و ‘Pointer’ (اشارهگر) هم همینطورن. هر کدوم در انگلیسی عمومی معنی مشخصی دارن، اما در علوم کامپیوتر بار معنایی و کاربرد خاصی پیدا میکنن. برای یادگیری بهتر، همیشه به کانتکست (بستر) استفاده از کلمه دقت کنید.
وای چقدر این مقاله خوب بود! همیشه با ‘Pull Request’ مشکل داشتم و نمیفهمیدم دقیقاً چیه. حالا فهمیدم معنیش همون ‘درخواست ادغام’ هستش. واقعاً به زبان ساده توضیح دادید. مرسی!
عالی بود، به خصوص بخش ‘Merge’. من خودم هم اولش گیج میشدم. یه نکته اضافه کنم که معمولاً بعد از Merge کردن، اون Branch که ساختیم رو حذف میکنیم تا پروژه تمیز بمونه. اینم خودش یه practice خوبه.
ممنون محمد جان از نکته ارزشمند و حرفهای که اضافه کردید! کاملاً درسته، بعد از موفقیتآمیز بودن ‘Merge’ و اطمینان از صحت کدها، حذف ‘Branch’ مربوطه باعث میشه ‘Repository’ مرتب و قابل مدیریت باقی بمونه و از ایجاد شاخههای قدیمی و بدون استفاده جلوگیری میکنه. این نشون دهنده تجربه شما در کار با ‘Git’ هست. آفرین!
سلام. ‘Repo’ که مخفف ‘Repository’ هست، آیا در محیطهای کاری رسمی هم استفاده میشه یا بیشتر جنبه غیررسمی و خودمانی داره؟
نرجس عزیز، سوال خیلی خوبی پرسیدید! ‘Repo’ یک مخفف بسیار رایج و پذیرفته شده در بین توسعهدهندگان هست و در اکثر محیطهای کاری (حتی رسمی) و ارتباطات روزمره بین تیمها به صورت گسترده استفاده میشه. تقریباً همه در جامعه برنامهنویسی با این مخفف آشنا هستن و اون رو درک میکنن، پس استفاده ازش مشکلی نداره و کاملاً استاندارد محسوب میشه.
مقاله خیلی مفید بود. من همیشه ‘Pull Request’ رو ‘پول ریکوست’ میخوندم، الان متوجه شدم. میشه در مورد ‘Push’ هم کمی توضیح بدید و چجوری با ‘Pull’ فرق داره؟
کیان جان، خوشحالیم که ابهاماتتون برطرف شده! بله، ‘Pull Request’ (پول ریکوئست) تلفظ صحیحشه. در مورد ‘Push’ و ‘Pull’: ‘Push’ یعنی ارسال تغییرات از ‘local repository’ شما به ‘remote repository’ (مثلاً روی GitHub). یعنی کدهای خودتون رو به سرور میفرستید. در مقابل، ‘Pull’ یعنی دریافت تغییرات از ‘remote repository’ به ‘local repository’ خودتون، یعنی کدهای جدیدی که بقیه همتیمیها فرستادن رو دانلود میکنید. در واقع ‘Push’ به سمت بالا فرستادن و ‘Pull’ به سمت پایین کشیدن هست.
مثال ‘Commit’ به دکمه Save خیلی عالی بود! واقعاً مفهوم رو روشن کرد. چقدر خوبه که برای توضیح مفاهیم تکنیکی از مثالهای ملموس استفاده میکنید.
سلام و خسته نباشید. آیا میتونید چند جمله انگلیسی که این کلمات (Repository, Branch, Merge) توش به کار رفته باشن رو مثال بزنید؟ اینطوری درک کاربردشون عمیقتر میشه.
حتما امیر جان! چند مثال:
* ‘Please clone this **repository** to start working on the project.’ (لطفاً این مخزن را شبیهسازی کنید تا کار روی پروژه را شروع کنید.)
* ‘We need to create a new **branch** for the new feature.’ (ما باید یک شاخه جدید برای قابلیت جدید ایجاد کنیم.)
* ‘Don’t forget to **commit** your changes frequently with descriptive messages.’ (فراموش نکنید تغییرات خود را مرتباً با پیامهای توضیحی ثبت کنید.)
* ‘After testing, we can **merge** this branch into the main branch.’ (پس از آزمایش، میتوانیم این شاخه را در شاخه اصلی ادغام کنیم.)
امیدوارم مفید باشه!
این مقاله نجاتم داد! همیشه وقتی با تیم کار میکردیم، معنی ‘conflict’ و ‘resolve’ رو تو گیت دقیق نمیفهمیدم. این مقاله کمک کرد. یه نکته هم بگم که پیام ‘Commit’ رو حتماً انگلیسی و واضح بنویسید!
مینا عزیز، خوشحالیم که تونستیم کمک کنیم! نکتهای که در مورد پیام ‘Commit’ گفتید بسیار مهمه. نوشتن پیامهای ‘Commit’ واضح و به زبان انگلیسی (استاندارد در اکثر پروژههای بینالمللی) به همه اعضای تیم کمک میکنه تا تاریخچه تغییرات رو بهتر متوجه بشن و ردیابی اشکالات راحتتر میشه. ممنون از اضافه کردن این نکته عالی!
دقیقا همونطور که گفتید، یادگیری این اصطلاحات اولش استرسزاست. با این توضیحات ساده، خیلی راحتتر با ‘Git’ کنار میام. از بخش ‘Repository’ و مثالش خیلی خوشم اومد.
آیا اصطلاح خاصی در انگلیسی هست که برنامهنویسها برای اشاره به اینکه ‘کدشون رو خراب کردن’ استفاده کنن؟ مثل ‘mess up’؟
لیلا جان، بله، اصطلاحات زیادی برای این منظور وجود داره! ‘Mess up’ یک گزینه خوب و عمومی هست. در برنامهنویسی ممکنه بگن: ‘I **broke** the build’, ‘I **messed up** the codebase’, ‘I **introduced a bug**’, یا حتی ‘I **reverted** to an earlier commit’ (اگر تونستن برگردونن). اینها نشون میده که یه اشتباهی در کدنویسی رخ داده.
من یه بار اشتباهی ‘master branch’ رو پاک کردم و کلی دردسر کشیدم تا برگردوندمش! کاش زودتر این مقاله رو میخوندم. توضیحات ‘Branch’ واقعاً حیاتی بود.
پرهام عزیز، متاسفیم بابت اون تجربه سخت! این اتفاق برای خیلی از برنامهنویسها افتاده و دلیل اهمیت تسلط بر مفاهیم Git و Backup گیری از Repository ها رو نشون میده. خوشحالیم که این مقاله تونسته در آینده به شما کمک کنه. برای جلوگیری از چنین اتفاقاتی، همیشه از Branch های محافظت شده (protected branches) استفاده کنید و در کارهای تیمی حتماً قوانین Pull Request رو رعایت کنید.
ممنون از مقاله عالی. ‘Pull Request’ رو خیلی خوب توضیح دادید. آیا ‘Fork’ هم شبیه ‘Branch’ هست یا فرق داره؟
الهام جان، سوال بسیار خوبیه! ‘Fork’ و ‘Branch’ هر دو به نوعی انشعاب ایجاد میکنند اما در سطوح مختلفی هستند. ‘Branch’ یک مسیر موازی *درون یک Repository واحد* ایجاد میکنه، معمولاً برای توسعه یک ویژگی جدید یا رفع یک باگ. اما ‘Fork’ در واقع یک کپی *کامل از یک Repository* هست که در حساب کاربری خودتون ایجاد میکنید. این کار معمولاً برای مشارکت در پروژههای منبع باز (open-source) انجام میشه، جایی که شما اجازه دسترسی مستقیم به Repository اصلی رو ندارید و با ‘Fork’ کردن، یک کپی از اون رو برای خودتون میسازید و بعداً میتونید تغییراتتون رو با ‘Pull Request’ به Repository اصلی پیشنهاد بدید.
وقتی ‘Repository’ رو گفتید، یاد فیلمهای جاسوسی افتادم که میگفتن ‘the repository of secrets’! اینجا هم انگار مخزن کدهاست. خیلی باحال بود.
داوود جان، تشبیه بسیار جالبی کردید! دقیقاً همینطوره. ‘Repository’ در انگلیسی عمومی به معنای ‘مخزن’ یا ‘انبار’ است، مثل ‘a repository of knowledge’ (مخزن دانش) یا ‘a repository of art’ (مخزن هنر). در گیت هم دقیقاً همین مفهوم ‘مخزن کد’ رو داره. این مثال نشون میده چطور یک کلمه میتونه در بافتهای مختلف معنی مشابهی داشته باشه. عالی بود!
سلام. من تو شرکت ما ‘deployment’ رو زیاد میشنوم. میشه بگید تلفظش درسته؟ و اینکه اصلاً ربطی به این بحث گیت داره یا نه؟
سلام مریم جان! ‘Deployment’ رو درست نوشتید و تلفظش به صورت /dɪˈplɔɪmənt/ هست. یعنی دِپلویمِنت. درسته، این اصطلاح هم در حوزه برنامهنویسی و توسعه نرمافزار بسیار رایجه و به معنای ‘استقرار’ یا ‘نشر’ نرمافزار روی سرور یا محیط عملیاتی هست. اگرچه مستقیماً یک دستور گیت نیست، اما چرخه ‘development’ و ‘deployment’ معمولاً با گیت و کنترل نسخه ارتباط تنگاتنگی داره. یعنی کدهای توسعه یافته در گیت، در نهایت ‘deploy’ میشن.
واقعاً ممنون. برای کسانی که زبانشون قوی نیست، اینجور مقالات فوقالعادهست. خیلی از کلمات رو حفظ بودم ولی عمق معنیش رو نمیدونستم. الان ‘Commit’ برام کاملاً مفهوم شد.
مقاله عالی بود. یک سوال داشتم، بعضی جاها ‘Merge Request’ هم میشنوم. آیا با ‘Pull Request’ فرق داره؟
سُگل عزیز، سوال بسیار دقیق و خوبی پرسیدید! در واقع ‘Pull Request’ و ‘Merge Request’ در اکثر مواقع به یک مفهوم اشاره میکنند. ‘Pull Request’ اصطلاحی است که در GitHub، Bitbucket و اکثر پلتفرمهای Git استفاده میشود. اما در GitLab، به این قابلیت ‘Merge Request’ میگویند. بنابراین، اگرچه نامها متفاوت هستند، اما هدف و عملکرد اصلی هر دو (یعنی درخواست برای بازبینی و ادغام تغییرات یک شاخه به شاخه دیگر) یکسان است. این فقط یک تفاوت در نامگذاری بین پلتفرمهای مختلف است.
به نظرم بهترین کار برای یادگیری این اصطلاحات اینه که همزمان با خوندن مقاله، خودمون هم عملاً تو گیت باهاشون کار کنیم. مثلاً یه ‘Repository’ بسازیم و ‘Commit’ و ‘Branch’ رو امتحان کنیم. مقاله هم که عالی توضیح داده.
بهنام جان، کاملاً با شما موافقم! ‘یادگیری فعال’ و عملیاتی کردن مفاهیم، بهترین راه برای تثبیت آموختههاست. در واقع، این مفاهیم تنها با تئوری و خواندن کامل درک نمیشوند و نیاز به تجربه عملی دارند. ممنون از اضافه کردن این نکته طلایی که برای همه زبانآموزان و برنامهنویسان بسیار کاربردی است.
وقتی میگیم چندین ‘Repository’ داریم، جمعش میشه ‘Repositories’؟ یا کلاً این کلمات تو انگلیسی برنامهنویسی جمع بسته نمیشن؟
کیمیا عزیز، سوال گرامری خیلی خوبی پرسیدید! بله، ‘Repository’ یک اسم قابل شمارش (countable noun) هست و جمع آن به صورت ‘Repositories’ (با حذف y و افزودن ies) استفاده میشود. مثلاً: ‘We have many **repositories** for different projects.’ (ما مخازن زیادی برای پروژههای مختلف داریم.) همچنین ‘Branch’ جمعش ‘Branches’ و ‘Commit’ جمعش ‘Commits’ میشود. این قواعد گرامری عمومی انگلیسی در اینجا هم کاربرد دارند.