دسته‌بندی نشده

نکات و ترفندهای گیت – بررسی 31 ترفند کابردی Git

گیت یک ابزار قدرتمند و حرفه‌ای است. اگر نکات و ترفندهای گیت را بدانید، خیلی بهتر و مؤثرتر می‌توانید از آن استفاده کنید. هم‌چنین این نکات به شما کمک می‌کند تا در وقت خود، صرفه‌جویی بهتری اعمال کنید. در این مطلب، برای شما ۳۱ نکته و ترفند گیت را آماده کرده‌ایم. این نکات به شما رازهای پنهان گیت را می‌گوید. هم‌چنین در این ترفندها یاد می‌گیرید که چه کارهای جالبی از گیت را در زمان کم‌تری می‌توانید انجام دهید.

فهرست مطالب این نوشته

ترفند اول: پوشه‌ی git. خود را بشناسید

به‌طور خودکار با کمک دستور git init یا git clone می‌توانید پوشه‌ی .git ساخته می‌شود. در تصویر زیر، این دستور را می‌بینید. پوشه‌ی git.

در این پوشه تمام اطلاعات مورد نیاز درباره‌ی commitها، قلاب‌ها، ریپازیتوری‌ها و غیره نهاده شده است. اگر این پوشه را حذف کنید، پروژه‌ی شما فراموش می‌کند که قبلاً در یک ریپازیتوری زندگی می‌کرده است.

دوره آموزش گیت به زبان ساده برای مبتدیان

 

پوشه‌ی .git منحصر به فرد و مخفی است. پس اگر می‌خواهید محتوای این فایل را ببینید باید از روش مشاهده‌ی پوشه‌های مخفی خود استفاده کنید.

ناگفته نماند که از نظر فنی، در گیت، هر شاخه به عنوان یک فایل متنی ذخیره می‌شود و محتوای آن شامل هش commit است.

ترفند دوم: برنامه‌نویسی موازی در گیت

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

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

الف) مشاهده‌ی فهرست درختِ کاری

اگر می‌خواهید لیست درختِ کاری گیت را ببینید، از دستور زیر استفاده کنید. فهرست درخت کاری

ب) افزودن درختِ کاری جدید

در صورتی که قصد دارید یک درختِ کاری جدید به گیت اضافه کنید، از دستور زیر استفاده کنید.

افزودن درختِ کاری جدید

ج) حذف درختِ کاری

برای حذف درختِ کاری خود، دستور زیر را به کار ببرید. حذف درختِ کاری

ترفند سوم: شاخه‌های ناخواسته را حذف کنید

ممکن است در ریپازیتوری محلی خود، چندین شاخه‌ی قدیمی داشته باشید که دیگر کارایی ندارند. از آنحایی که به‌روزرسانی در شاخه‌های گیت اهمیت دارد، شما باید تمام شاخه‌هایی که به HEAD ادغام نمی‌شوند را شناسایی کنید.

برای حذف شاخه‌های شناسایی شده، شما می‌توانید از دستوراتی که در ادامه‌ی مطلب آورده‌ایم، استفاده کنید.

git config –global fetch.prune true

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

git config –list

ترفند چهارم: از gitignore. استفاده کنید

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

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

  • فایل‌هایی که اطلاعات حساس دارند. مانند فایل‌های پیکربندی، رمزهای عبور تولید شده و غیره.
  • فایل‌هایی که حاوی اطلاعات موقت هستند. مانند فایل‌های گزارش.
  • فایل‌های کدهای کامپایلر مانند فایل‌های obj و dll و غیره.

پس طبق آن‌چه که گفته شد، فایل gitignore برای فیلتر کردن فایل‌ها و فهرست‌های ناخواسته کاریردی و مهم است.

  • نکته: خود فایل gitignore را فیلتر نکنید.

پیشنهاد مطالعه: آموزش گیت در اندروید: تسلط بر گیت برای توسعه دهندگان و کاربران اندروید

ترفند پنجم: کد خود را فشرده کنید

شما می‌توانید کد ریپازیتوری گیت را فشرده کنید. روش‌های مختلفی برای مدیریت فشرده‌سازی وجود دارد. به‌عنوان مثال شما می‌توانید یک‌سری تغییرات خاص را روی فایل خود اعمال کنید. هم‌چنین امکان فشرده‌سازی کل شاخه (branch) نیز وجود دارد.

آموزش برنامه نویسی اندروید

 

در مثالی که در ادامه‌ی مطلب ذکر کرده‌ایم، یک فایل فشرده برای شاخه‌ی اصلی دریافت می‌شود.

git archive –format zip –output master_branch.zip master

لازم به ذکر است که شما از پوشه‌ی ریپازیتوری خود می‌توانید به فایل فشرده شده (zip) دسترسی داشته باشید.

ترفند ششم: لغو تاریخچه‌ی مشترک

بعضی اوقات شما یک کامیت اشتباه یا شکسته‌ای را استفاده می‌کنید. این در حالی است که شما قبلاً تغییرات لحاظ شده را به یک مخزن مشترک منتقل کرده‌اید. در چنین وضعیتی باید کامیت‌های خود را لغو کنید. برای این منظور می‌توانید از git revert استفاده کنید. این دستور، یک commit جدید را ایجاد می‌کند.

git revert <your commit hash>‎

ترفند هفتم: broken commitها را شناسایی و پیدا کنید

انسان، اشتباه می‌کند. برنامه‌نویسان نیز از این قاعده مستثنی نیستند. آن‌ها ممکن است یک قطعه کد را به‌صورت باگ (خطا) معرفی کرده و در مخزن قرار دهند. گاهی اوقات پیدا کردن این باگ‌ها دشوار است. در این شرایط می‌توان کامیت معیوب را با فرمان git bisect شناسایی کرد.

دستور git bisect کمک می‌کند تا بفهمید که کدام کامیت یک باگ را برطرف یا معرفی کرده است. برای کار با دستور git bisect، می‌توانید از مقالاتی که مفصلاً چگونگی عملکرد آن را معرفی می‌کند، استفاده کنید.

ترفند هشتم: کامیت خود را تجسم کنید

شما می‌توانید در هر زمان کامیت خود را با ابزار git bash مصورسازی کنید. گزینه‌ی – -graph کمک می‌کند تا نمودار مربوط به کامیت را ببینید.

git log –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit —date=relative

تصویر زیر نمایی از به کار گیری این فرمان را نشان می‌دهد.

ترفند نهم: پلاگین‌های git

همان‌طور که می‌دانید، پروژه‌ی گیت متن باز است. بنابراین شما می‌توانید از اسکریپت‌های سفارشی نوشته شده‌ی گیت استفاده کنید. هم‌چنین می‌توانید اسکریپت‌های سفارشی بنویسید و عملکرد این ابزار را گسترش دهید.

یکی از پلاگین‌هایی که توصیه می‌کنیم تا در کار با گیت، حتماً از آن استفاده کنید؛ پلاگین git-extras است. این پلاگین نکات کاربردی و دستورات مفید گیت را بیان می‌کند. روند نصب این پلاگین بسیار ساده است و از آن‌جایی که ترفندهای خوبی را نشانتان می‌دهد، بهتر است حتماً آن را نصب و امتحان کنید.

پلاگین دیگری که توصیه می‌کنیم تا نصب و استفاده از آن را حتماً تجربه کنید، git local- commit است. این پلاگین به شما امکان آن را می‌دهد تا تمام کامیت‌ها را در شاخه‌ی محلی خود فهرست کنید.

پلاگین git effort پلاگین دیگری است که تعداد کامیت‌های هر فایل با روزهای فعال را نشان می‌دهد. این پلاگین هم بسیار کاربردی است و توصیه می‌کنیم تا آن را هم نصب و استفاده کنید. در تصویر زیر، نمایی از اسکرین شات پلاگین git-extras را نشانتان داده‌ایم. پلاگین‌های git

ترفند دهم: از قابلیت تکمیل خودکار git استفاده کنید

بسیاری از ادیتورها قابلیت تکمیل خودکار دارند. این قابلیت به شما اجازه می‌دهد تا تنها با تایپ چنند حرف از حروف دستوری که می‌خواهید نوشته شود و سپس فشار دادن کلید tab صفحه کلید، عبارت مورد نظر را تایپ کنید. این موضوع برای افزایش سرعت تایپ دستورات برنامه‌نویسی، حائز اهمیت است. خوشبختانه گیت نیز این امکان را دارد که در این بخش از آموزش نکات و ترفندهای گیت به آن خواهیم پرداخت.

به عنوان مثال، اگر می‌خواهید در گیت دستور git fetch را بنویسید، کافی است تا git f را نوشته و سپس از کلید tab استفاده کنید. با این کار لیست تمام دستوراتی که با f شروع می‌شوند به شما نشان داده می‌شود و شما به سادگی می‌توانید دستور مورد نظر را تایپ کنید.

ناگفته نماند که از قابلیت تکمیل خودکار در گیت برای تایپ هر چیزی اعم از نام‌های طولانی، شاخه‌ها و غیره می‌توانید استفاده کنید. قابلیت تکمیل خودکار git

ترفند یازدهم: آخرین کامیت را مجدد بازنویسی کنید

بازنویسی در گیت بسیار ساده است. این کار از بروز اشتباهات تایپی در هنگام درج کامیت جلوگیری می‌کند. برای این منظور می‌توانید از گزینه‌ی -v استفاده کنید.

git commit -v —amend

ترفند دوازدهم: حذف تغییرات پیگیری نشده

در حالت کلی، شما با دستور git add، فایل‌های را به منطقه‌ی مرحله بندی خود اضافه می‌کنید. فایل‌های ردیابی نشده، فایل‌هایی هستند که نباید در منطقه‌ی شما وجود داشته باشند. حذف تغییرات پیگیری نشده

گاهی اوقات پیش می‌آید که به دلایل مختلف، نخواهید فایل‌ها را اضافه کنید. در این صورت می‌توانید از دستور git clean استفاده کنید تا به راحتی از شر آن فایل‌ها خلاص شوید.

git clean -f -d

ترفند سیزدهم: راهنمای گیت

شما با دستور git help می‌توانید تمام راهنماهای رایج گیت را مطالعه کنید.

git help -g راهنمای گیت

ترفند چهاردهم: در git جست‌وجو کنید

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

git rev-list –all | xargs git grep -F ‘<Your search string>‘‎

به عنوان مثال، در این‌جا عبارت «font-size: 52px» را در یک فایل css جست‌وجو کرده‌ایم.

ترفند پانزدهم: یک فایل را از تاریخچه‌ی گیت حذف کنید

برای تمرین حذف فایل از تاریخچه‌ی گیت از یک فایل .gitignore استفاده کنید. فایل gitignore کاربردهای زیادی دارد. یکی از مزایای این فایل‌ها آن است که می‌توان فایل‌های حساس که حاوی تنظیمات برنامه هستند یا کلیدهای API در آن گنجانده شده است را نادیده گرفت.

مرجع کامل انواع آموزش لینوکس + اعطای گواهینامه دوره

 

می‌دانید که افشای چنین داده‌ها و اطلاعاتی در یک فضای عمومی و مشترک، کار صحیحی نیست. با کمک gitignore می‌توان این فایل‌ها را از دسترس عموم خارج کرد. حال شما می‌توانید در کل تاریخچه‌ی گیت جست‌وجو کنید و با دستوراتی که در ادامه‌ی مطلب نشان داده‌ایم، فایل‌های حاوی اطلاعات حساس را حذف کنید.

git filter-branch –index-filter ‘git rm –cached –ignore-unmatch <your file name>’ –prune-empty –tag-name-filter cat — –all

ترفند شانزدهم: ریپازیتوری خود را بهینه کنید

برای بهینه‌سازی مخزن می‌توانید زباله‌های گیت را جمع‌آوری کنید. زباله‌ها اشیایی هستند که دیگر استفاده نشده و کاربردی نخواهند داشت. بنابراین اگر از حافظه پاک شود، به بهینه‌سازی مخزن گیت کمک می‌کند. برای این کار می‌توانید از دستور git gc استفاده کنید. توجه داشته باشید که بسیاری از دستورات گیت، این فرمان git gc را به‌صورت خودکار اجرا می‌کنند.

git gc –prune=now —aggressive git gc --prune=now —aggressive

استفاده از این فرمان، به‌خصوص برای تیم‌ها و افرادی که از دستورات push و pull به تعداد دفعات زیاد استفاده می‌کنند، توصیه می‌شود.

ترفند هفدهم: یک کامیت را کپی کنید

شما می‌توانید کامیت‌ها و دستورات انتخابی خود را در گیت به‌صورت merge درآورده و کپی کنید. Cherry-pich به شما این امکان را می‌دهد تا یک کامیت را از شاخه‌ای به دیگر شاخه‌ها کپی کنید. برای این منظور، می‌نویسیم:

git cherry-pick <commit-sha>‎

ناگفته نماند که فرمان cherry-pick همیشه بهترین انتخاب نیست. اما برای مواردی مانند رفع اشکال کدها و بازگرداندن کامیت‌های از دست رفته، بسیار کاربردی است.

پیشنهاد مطالعه: آموزش کار با گیت فلو و همه چیز در رابطه با آن

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

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

*نکته: دقت داشته باشید که این دستور برای فایل‌های ردیابی نشده است. بنابراین برای فایل‌های نادیده گرفته شده (ignore) کاربردی نخواهد داشت.

git ls-files –others –exclude-standard -z | xargs -0 tar rvf ~/backup-untracked.zip

ترفند نوزدهم: نام ریپازیتوری را بگیرید

شاید برایتان این ترفند کمی ساده به نظر برسد، اما توجه داشته باشید که زمانی که چندین پروژه‌ی مختلف را با گیت رهبری می‌کنید و روی چند مخزن مختلف کار دارید، نام ریپازیتوری‌ها چندان واضح نیست. در این شرایط، با دستور زیر می‌توانید نام ریپازیتوری را از git bash خود بدانید.

basename `git rev-parse —show-toplevel`‎basename `git rev-parse —show-toplevel`

ترفند بیستم: کامیت‌های خود را بشمارید

در گیت دستوری وجود دارد که می‌تواند تعداد کامیت‌های شما را در یک شاخه بشمارد.

git rev-list –count <branch-name>‎

به عنوان مثال، در تصویر زیر شاخه‌ی dev دارای ۳۴ کامیت است. ملاحظه می‌شود که تعداد کامیت‌ها برای شاخه‌ی master، ۳۲ عدد شمارش شده است. این ترفند برای شمارش تعداد کامیت‌های اعضای گروه مفید بوده و کاربرد دارد.

ترفند بیست و یکم: فایل‌ها را هم‌زمان ببینید

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

git diff –name-only | uniq | xargs $EDITOR

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

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

برای این‌که بتوانید در گیت اشتباهات تایپی را به‌طور خودکار تصحیح کنید، کافی است تا flag تصحیح را در گیت تنظیم کنید. دستور زیر را ببینید.

git config –global help.autocorrect 1 git config --global help.autocorrect 1

ترفند بیست و سوم: شاخه‌ها را براساس تاریخشان مرتب کنید

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

git branch –sort=-committerdate

ترفند بیست و چهارم: الگوی پیام گیت

دانستن الگوی پیام git از نکات و ترفندهای گیت است که دانستن آن بر هر کاربر واجب است. شما باید بتوانید کامیت‌های درست و استاندارد بنویسید. کامیت صحیح به اعضای تیم کمک می‌کند تا وظیفه‌ی هر کامیت به‌طرز روشن و واضح، قابل درک باشد.

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

۱- در مرحله‌ی اول شما باید config و پیکربندی گیت خود را برای استفاده از الگوی پیام، به‌روزرسانی کنید.

git config commit.template ./gitmessage

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

پیشنهاد مطالعه: مراحل و آموزش ساخت سایت با گیت‌ هاب

ترفند بیست و پنجم: از راه دور به‌روزرسانی کنید

ممکن است در حین کار، لازم شود که تغییرات محلی هود را در یک زمان بازنویسی کنید. در این وضعیت، باید ترفند به‌روزرسانی از راه دور را بلد باشید. این کار با یک دستور ساده قابل انجام است که در زیر بیان کرده‌ایم.

git fetch origin && git reset –hard origin/master && git clean -f -d

ترفند بیست و ششم: نویسنده را مجدد تنظیم کنید

اگر در گیت کانفیگ از نام مستعار خود استفاده می‌کنید و می‌خواهید آن را تغییر دهید، کافی است تا از نکات و ترفندهای گیت در این بخش استفاده کنید.

git config –global user.name ”<name>”‎ git config --global user.name ”<name>"‎

اکنون شما می‌توانید نویسنده در کامیت را مجدد تنظیم و reset کنید.

git commit –amend –reset-author —no-edit

ترفند بیست و هفتم: stash (بدون کامیت)

ممکن است بخواهید به‌طور موقت وضعیت فعلی فهرست را ذخیره کنید. در این صورت از stash استفاده خواهید کرد. Stash در واقع همان مخفیگاهی است که برای ذخیره‌سازی موقت وضعیت فهرست از آن استفاده می‌کنید.

الف) برای ایجاد Stash

git stash <your stash name>‎

ب) برای فهرست کردن تمام Stashها

git stash list

ج) برای دیدن محتوای Stash

git stash show

د) برای اعمال روی اخرین Stash

git stash pop

ترفند بیست و هشتم: ابزار ادغام (merge) را راه‌اندازی کنید

شما می‌توانید از ابزار ادغام برای تنظیم ویرایشگر مورد نظر خود استفاده کنید.

git config –global merge.tool <mergetool_path>‎

ترفند بیست و نهم: در branchهای مختلف جست‌وجو کنید

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

git branch –contains <commit>‎

به عنوان مثال، در تصویر زیر کامیت در دو شاخه‌ی dev و master در دسترس است.

ترفند سی‌ام: git alias از مهمترین نکات و ترفندهای گیت

یکی دیگر از نکات و ترفندهای گیت به گزینه‌ی git alias منتهی می‌شود. این ویژگی سبب خواهد شد تا تجربه‌ی شما از گیت سفارشی و ساده شود. پس اگر می‌خواهید یک دستور را به‌طور کامل ننویسید، می‌توانید برای آن یک شورت کات تعریف کنید. به عبارت بهتر شما برای دستور مورد نظر خود، یک نام مستعار تعریف می‌کنید و هربار که به آن نیاز داشتید، کافی است تا نام مستعار دستور را به‌کار ببرید.

git config –global alias.<handle> <command>

در دستور زیر، نام مستعار دستور git status را تعریف کرده‌ایم.

git config –global alias.s status

git aliasترفند سی و یکم: یک شاخه (نه یک ریپازیتوری) را کلون کنید

شما می‌توانید با دستور clone، یک ریپازیتوری را از راه دور، کپی کنید. اما اگر قصد داشته باشید که تنها یک شاخه را از راه دور کلون کنید، باید چه کاری انجام دهید؟ در این حالت باید از دستور git remote add استفاده کنید.

git init

git remote add -t <remoteBranchName> -f origin <remoteRepoUrlPath>‎

git checkout <localBranchName>‎

کلام نهایی

در این مطلب شما را با نکات و ترفندهای گیت آشنا کردیم. این نکات سبب می‌شوند تا بهره‌وری شما از این ابزار بسیار بالاتر برود. هم‌چنین این ترفندها در زمان شما برای کدنویسی و کار با گیت، صرفه‌جویی قابل ملاحظه‌ای را عاید خواهد شد.

مرجع کامل انواع آموزش برنامه نویسی + اعطای گواهینامه دوره مرتبط

 

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

آموزش گیت در مکتب خونه

گیت ابزار فوق‌العاده قدرتمندی است که امکانات بی‌نظیر برای نوشتن و توسعه‌ی حرفه‌ای برنامه را در خود گنجانده است. اگر می‌خواهید با این ابزار کار کنید، نکات و ترفندهای بسیار زیادی وجود دارد که می‌بایست به‌صورت گام به گام بیاموزید. شما می‌توانید از دوره‌های آموزشی مکتب خونه که برای این منظور قرار داده شده است، استفاده کنید. دوره‌های آموزش Git مکتب خونه و مقالات این وب سایت به شما کمک می‌کند صفر تا صد کار با گیت را یاد بگیرید.

کامل بهرامی

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

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا