# معرفی GitHub این درس اصول اولیه GitHub، یک پلتفرم برای میزبانی و مدیریت تغییرات کد شما را پوشش می‌دهد. ![معرفی GitHub](../../../../translated_images/webdev101-github.8846d7971abef6f947909b4f9d343e2a23778aa716ca6b9d71df7174ee5009ac.fa.png) > طراحی توسط [Tomomi Imura](https://twitter.com/girlie_mac) ## آزمون پیش از درس [آزمون پیش از درس](https://ff-quizzes.netlify.app) ## مقدمه در این درس، موارد زیر را پوشش خواهیم داد: - پیگیری کارهایی که روی دستگاه خود انجام می‌دهید - کار کردن روی پروژه‌ها با دیگران - نحوه مشارکت در نرم‌افزارهای متن‌باز ### پیش‌نیازها قبل از شروع، باید بررسی کنید که آیا Git نصب شده است یا خیر. در ترمینال تایپ کنید: `git --version` اگر Git نصب نشده است، [Git را دانلود کنید](https://git-scm.com/downloads). سپس، پروفایل محلی Git خود را در ترمینال تنظیم کنید: * `git config --global user.name "your-name"` * `git config --global user.email "your-email"` برای بررسی اینکه آیا Git قبلاً تنظیم شده است، می‌توانید تایپ کنید: `git config --list` همچنین به یک حساب کاربری GitHub، یک ویرایشگر کد (مانند Visual Studio Code)، و دسترسی به ترمینال (یا: command prompt) نیاز دارید. به [github.com](https://github.com/) بروید و اگر هنوز حساب کاربری ندارید، یک حساب ایجاد کنید یا وارد شوید و پروفایل خود را تکمیل کنید. ✅ GitHub تنها مخزن کد موجود در جهان نیست؛ مخازن دیگری نیز وجود دارند، اما GitHub شناخته‌شده‌ترین است. ### آماده‌سازی شما به یک پوشه با یک پروژه کد روی دستگاه محلی خود (لپ‌تاپ یا کامپیوتر) و یک مخزن عمومی در GitHub نیاز دارید که به عنوان نمونه‌ای برای نحوه مشارکت در پروژه‌های دیگران عمل کند. --- ## مدیریت کد فرض کنید یک پوشه محلی با یک پروژه کد دارید و می‌خواهید پیشرفت خود را با استفاده از Git - سیستم کنترل نسخه - پیگیری کنید. برخی افراد استفاده از Git را به نوشتن یک نامه عاشقانه برای خود آینده‌تان تشبیه می‌کنند. با خواندن پیام‌های commit خود پس از روزها، هفته‌ها یا ماه‌ها، می‌توانید به یاد بیاورید چرا تصمیمی گرفته‌اید یا یک تغییر را "بازگردانی" کنید - البته اگر پیام‌های commit خوبی بنویسید. ### وظیفه: ایجاد یک مخزن و commit کردن کد > مشاهده ویدیو > > [![ویدیو اصول Git و GitHub](https://img.youtube.com/vi/9R31OUPpxU4/0.jpg)](https://www.youtube.com/watch?v=9R31OUPpxU4) 1. **ایجاد مخزن در GitHub**. در GitHub.com، در تب مخازن یا از نوار ناوبری بالا سمت راست، دکمه **مخزن جدید** را پیدا کنید. 1. به مخزن خود (پوشه) یک نام بدهید. 1. گزینه **ایجاد مخزن** را انتخاب کنید. 1. **به پوشه کاری خود بروید**. در ترمینال، به پوشه (که به عنوان دایرکتوری نیز شناخته می‌شود) که می‌خواهید شروع به پیگیری کنید، بروید. تایپ کنید: ```bash cd [name of your folder] ``` 1. **مخزن Git را مقداردهی اولیه کنید**. در پروژه خود تایپ کنید: ```bash git init ``` 1. **بررسی وضعیت**. برای بررسی وضعیت مخزن خود تایپ کنید: ```bash git status ``` خروجی ممکن است چیزی شبیه به این باشد: ```output Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: file.txt modified: file2.txt ``` معمولاً دستور `git status` به شما اطلاعاتی مانند اینکه چه فایل‌هایی آماده _ذخیره_ در مخزن هستند یا تغییراتی دارند که ممکن است بخواهید حفظ کنید، می‌دهد. 1. **اضافه کردن همه فایل‌ها برای پیگیری** این مرحله همچنین به عنوان مرحله‌بندی فایل‌ها/اضافه کردن فایل‌ها به منطقه مرحله‌بندی شناخته می‌شود. ```bash git add . ``` آرگومان `git add` به همراه `.` نشان می‌دهد که همه فایل‌ها و تغییرات برای پیگیری اضافه شده‌اند. 1. **اضافه کردن فایل‌های انتخاب‌شده برای پیگیری** ```bash git add [file or folder name] ``` این دستور به ما کمک می‌کند فقط فایل‌های انتخاب‌شده را به منطقه مرحله‌بندی اضافه کنیم، زمانی که نمی‌خواهیم همه فایل‌ها را به یکباره commit کنیم. 1. **لغو مرحله‌بندی همه فایل‌ها** ```bash git reset ``` این دستور به ما کمک می‌کند همه فایل‌ها را به یکباره از مرحله‌بندی خارج کنیم. 1. **لغو مرحله‌بندی یک فایل خاص** ```bash git reset [file or folder name] ``` این دستور به ما کمک می‌کند فقط یک فایل خاص را به یکباره از مرحله‌بندی خارج کنیم که نمی‌خواهیم برای commit بعدی شامل شود. 1. **ذخیره کار خود**. در این مرحله فایل‌ها را به منطقه‌ای به نام _منطقه مرحله‌بندی_ اضافه کرده‌اید. جایی که Git فایل‌های شما را پیگیری می‌کند. برای دائمی کردن تغییر، باید فایل‌ها را _commit_ کنید. برای این کار یک _commit_ با دستور `git commit` ایجاد کنید. یک _commit_ نمایانگر یک نقطه ذخیره در تاریخچه مخزن شما است. برای ایجاد یک _commit_ تایپ کنید: ```bash git commit -m "first commit" ``` این دستور همه فایل‌های شما را commit می‌کند و پیام "اولین commit" را اضافه می‌کند. برای پیام‌های commit آینده، بهتر است توضیحات بیشتری ارائه دهید تا نوع تغییراتی که انجام داده‌اید را منتقل کنید. 1. **اتصال مخزن محلی Git خود به GitHub**. یک مخزن Git روی دستگاه شما خوب است، اما در نهایت می‌خواهید یک نسخه پشتیبان از فایل‌های خود در جایی داشته باشید و همچنین دیگران را دعوت کنید تا با شما روی مخزن کار کنند. یکی از مکان‌های عالی برای این کار GitHub است. به یاد داشته باشید که قبلاً یک مخزن در GitHub ایجاد کرده‌ایم، بنابراین تنها کاری که باید انجام دهیم اتصال مخزن محلی Git به GitHub است. دستور `git remote add` این کار را انجام می‌دهد. دستور زیر را تایپ کنید: > توجه داشته باشید، قبل از تایپ دستور به صفحه مخزن GitHub خود بروید تا URL مخزن را پیدا کنید. شما از آن در دستور زیر استفاده خواهید کرد. ```https://github.com/username/repository_name.git``` را با URL GitHub خود جایگزین کنید. ```bash git remote add origin https://github.com/username/repository_name.git ``` این دستور یک _remote_ یا اتصال به نام "origin" ایجاد می‌کند که به مخزن GitHub که قبلاً ایجاد کرده‌اید اشاره دارد. 1. **ارسال فایل‌های محلی به GitHub**. تا اینجا یک _اتصال_ بین مخزن محلی و مخزن GitHub ایجاد کرده‌اید. بیایید این فایل‌ها را با دستور `git push` به GitHub ارسال کنیم، به این صورت: > توجه داشته باشید، نام شاخه شما ممکن است به طور پیش‌فرض متفاوت از ```main``` باشد. ```bash git push -u origin main ``` این دستور commit‌های شما را در شاخه "main" به GitHub ارسال می‌کند. تنظیم شاخه `upstream` شامل `-u` در دستور، یک لینک بین شاخه محلی و شاخه remote ایجاد می‌کند، بنابراین می‌توانید به سادگی از git push یا git pull بدون مشخص کردن نام شاخه در آینده استفاده کنید. Git به طور خودکار از شاخه upstream استفاده می‌کند و نیازی به مشخص کردن نام شاخه به طور صریح در دستورات آینده نخواهید داشت. 2. **اضافه کردن تغییرات بیشتر**. اگر می‌خواهید به ایجاد تغییرات و ارسال آنها به GitHub ادامه دهید، فقط باید از سه دستور زیر استفاده کنید: ```bash git add . git commit -m "type your commit message here" git push ``` > نکته، ممکن است بخواهید یک فایل `.gitignore` را اتخاذ کنید تا فایل‌هایی که نمی‌خواهید پیگیری شوند در GitHub ظاهر نشوند - مانند فایل یادداشت‌هایی که در همان پوشه ذخیره می‌کنید اما جایی در یک مخزن عمومی ندارند. می‌توانید قالب‌های فایل `.gitignore` را در [.gitignore templates](https://github.com/github/gitignore) پیدا کنید. #### پیام‌های commit یک خط موضوع عالی برای commit در Git جمله زیر را کامل می‌کند: اگر اعمال شود، این commit <خط موضوع شما در اینجا> خواهد بود. برای موضوع از زمان حال و حالت امری استفاده کنید: "تغییر" نه "تغییر داده شده" و نه "تغییرات". همانطور که در موضوع، در متن (اختیاری) نیز از زمان حال و حالت امری استفاده کنید. متن باید انگیزه تغییر را شامل شود و این را با رفتار قبلی مقایسه کند. شما در حال توضیح دادن `چرا` هستید، نه `چگونه`. ✅ چند دقیقه وقت بگذارید و در GitHub جستجو کنید. آیا می‌توانید یک پیام commit واقعاً عالی پیدا کنید؟ آیا می‌توانید یک پیام بسیار مختصر پیدا کنید؟ به نظر شما چه اطلاعاتی مهم‌ترین و مفیدترین برای انتقال در یک پیام commit هستند؟ ### وظیفه: همکاری دلیل اصلی قرار دادن چیزها در GitHub این بود که امکان همکاری با سایر توسعه‌دهندگان فراهم شود. ## کار کردن روی پروژه‌ها با دیگران > مشاهده ویدیو > > [![ویدیو اصول Git و GitHub](https://img.youtube.com/vi/bFCM-PC3cu8/0.jpg)](https://www.youtube.com/watch?v=bFCM-PC3cu8) در مخزن خود، به `Insights > Community` بروید تا ببینید پروژه شما چگونه با استانداردهای جامعه توصیه‌شده مقایسه می‌شود. در اینجا چند مورد وجود دارد که می‌تواند مخزن GitHub شما را بهبود بخشد: - **توضیحات**. آیا توضیحی برای پروژه خود اضافه کرده‌اید؟ - **README**. آیا یک README اضافه کرده‌اید؟ GitHub راهنمایی‌هایی برای نوشتن یک [README](https://docs.github.com/articles/about-readmes/?WT.mc_id=academic-77807-sagibbon) ارائه می‌دهد. - **راهنمای مشارکت**. آیا پروژه شما دارای [راهنمای مشارکت](https://docs.github.com/articles/setting-guidelines-for-repository-contributors/?WT.mc_id=academic-77807-sagibbon) است؟ - **کد رفتار**. آیا پروژه شما دارای [کد رفتار](https://docs.github.com/articles/adding-a-code-of-conduct-to-your-project/) است؟ - **مجوز**. شاید مهم‌تر از همه، یک [مجوز](https://docs.github.com/articles/adding-a-license-to-a-repository/)؟ تمام این منابع به جذب اعضای جدید تیم کمک خواهند کرد. و این‌ها معمولاً چیزهایی هستند که مشارکت‌کنندگان جدید قبل از اینکه حتی به کد شما نگاه کنند، بررسی می‌کنند تا بفهمند آیا پروژه شما مکان مناسبی برای صرف وقت آنها است یا خیر. ✅ فایل‌های README، اگرچه زمان‌بر هستند، اغلب توسط نگهدارندگان مشغول نادیده گرفته می‌شوند. آیا می‌توانید نمونه‌ای از یک README بسیار توصیفی پیدا کنید؟ توجه: برخی [ابزارها برای کمک به ایجاد README‌های خوب](https://www.makeareadme.com/) وجود دارند که ممکن است بخواهید امتحان کنید. ### وظیفه: ادغام کد مستندات مشارکت به افراد کمک می‌کند تا در پروژه مشارکت کنند. این مستندات توضیح می‌دهد که چه نوع مشارکت‌هایی مورد نظر است و فرآیند چگونه کار می‌کند. مشارکت‌کنندگان باید مراحل مختلفی را طی کنند تا بتوانند در مخزن شما در GitHub مشارکت کنند: 1. **فورک کردن مخزن شما**. احتمالاً می‌خواهید افراد پروژه شما را _فورک_ کنند. فورک کردن به معنای ایجاد یک نسخه کپی از مخزن شما در پروفایل GitHub آنها است. 1. **کلون کردن**. از آنجا آنها پروژه را به دستگاه محلی خود کلون خواهند کرد. 1. **ایجاد یک شاخه**. شما می‌خواهید از آنها بخواهید یک _شاخه_ برای کار خود ایجاد کنند. 1. **تمرکز تغییرات روی یک بخش**. از مشارکت‌کنندگان بخواهید مشارکت‌های خود را روی یک چیز در یک زمان متمرکز کنند - به این ترتیب احتمال اینکه بتوانید کار آنها را _ادغام_ کنید بیشتر است. تصور کنید آنها یک رفع اشکال بنویسند، یک ویژگی جدید اضافه کنند، و چندین تست را به‌روزرسانی کنند - اگر بخواهید یا بتوانید فقط 2 از 3 یا 1 از 3 تغییر را اجرا کنید چه؟ ✅ یک وضعیت را تصور کنید که شاخه‌ها برای نوشتن و ارسال کد خوب به‌ویژه حیاتی هستند. چه موارد استفاده‌ای می‌توانید تصور کنید؟ > توجه، تغییراتی که می‌خواهید در جهان ببینید باشید و برای کار خود نیز شاخه ایجاد کنید. هر commitی که انجام دهید روی شاخه‌ای که در حال حاضر "چک شده" هستید انجام خواهد شد. از `git status` استفاده کنید تا ببینید کدام شاخه است. بیایید یک جریان کاری مشارکت‌کننده را مرور کنیم. فرض کنید مشارکت‌کننده قبلاً مخزن را _فورک_ و _کلون_ کرده است، بنابراین آنها یک مخزن Git آماده برای کار روی دستگاه محلی خود دارند: 1. **ایجاد یک شاخه**. از دستور `git branch` برای ایجاد یک شاخه که شامل تغییراتی است که قصد دارند مشارکت کنند، استفاده کنید: ```bash git branch [branch-name] ``` 1. **تغییر به شاخه کاری**. به شاخه مشخص‌شده تغییر دهید و دایرکتوری کاری را با `git switch` به‌روزرسانی کنید: ```bash git switch [branch-name] ``` 1. **انجام کار**. در این مرحله می‌خواهید تغییرات خود را اضافه کنید. فراموش نکنید که به Git اطلاع دهید با دستورات زیر: ```bash git add . git commit -m "my changes" ``` مطمئن شوید که به commit خود یک نام خوب بدهید، برای خودتان و همچنین نگهدارنده مخزنی که در آن کمک می‌کنید. 1. **ترکیب کار خود با شاخه `main`**. در یک نقطه شما کار خود را تمام کرده‌اید و می‌خواهید کار خود را با کار شاخه `main` ترکیب کنید. شاخه `main` ممکن است در این بین تغییر کرده باشد، بنابراین مطمئن شوید که ابتدا آن را با دستورات زیر به آخرین نسخه به‌روزرسانی کنید: ```bash git switch main git pull ``` در این مرحله می‌خواهید مطمئن شوید که هرگونه _تعارض_، موقعیت‌هایی که Git نمی‌تواند به راحتی تغییرات را _ترکیب_ کند، در شاخه کاری شما اتفاق می‌افتد. بنابراین دستورات زیر را اجرا کنید: ```bash git switch [branch_name] git merge main ``` دستور `git merge main` تمام تغییرات از `main` را به شاخه شما می‌آورد. امیدواریم بتوانید به سادگی ادامه دهید. اگر نه، VS Code به شما می‌گوید که Git کجا _گیج_ شده است و فقط فایل‌های مربوطه را تغییر دهید تا بگویید کدام محتوا دقیق‌تر است. برای تغییر به یک شاخه دیگر، از دستور مدرن `git switch` استفاده کنید: ```bash git switch [branch_name] 1. **ارسال کار خود به GitHub**. ارسال کار خود به GitHub به دو چیز نیاز دارد. ارسال شاخه خود به مخزن و سپس باز کردن یک PR، درخواست کشیدن. ```bash git push --set-upstream origin [branch-name] ``` دستور بالا شاخه را در مخزن فورک‌شده شما ایجاد می‌کند. 1. **باز کردن یک PR**. حالا می‌خواهید یک PR باز کنید. برای این کار به مخزن فورک‌شده در GitHub بروید. در GitHub یک اعلان خواهید دید که از شما می‌پرسد آیا می‌خواهید یک PR جدید ایجاد کنید. روی آن کلیک کنید و به صفحه‌ای هدایت می‌شوید که می‌توانید عنوان پیام کامیت را تغییر دهید و توضیح مناسب‌تری به آن اضافه کنید. حالا نگهدارنده مخزنی که فورک کرده‌اید این PR را می‌بیند و _انگشتان را برای شانس خوب فشار دهید_ امیدواریم که از آن قدردانی کند و PR شما را _ادغام_ کند. حالا شما یک مشارکت‌کننده هستید، یای :) 1. **پاکسازی**. بعد از اینکه یک PR را با موفقیت ادغام کردید، بهتر است که _پاکسازی_ انجام دهید. باید هم شاخه محلی و هم شاخه‌ای که به GitHub ارسال کرده‌اید را پاک کنید. ابتدا با دستور زیر آن را به صورت محلی حذف کنید: ```bash git branch -d [branch-name] ``` سپس به صفحه GitHub مخزن فورک‌شده بروید و شاخه ریموتی که به آن ارسال کرده‌اید را حذف کنید. `Pull request` شاید اصطلاح عجیبی به نظر برسد چون در واقع شما می‌خواهید تغییرات خود را به پروژه ارسال کنید. اما نگهدارنده (مالک پروژه) یا تیم اصلی باید تغییرات شما را قبل از ادغام با شاخه "اصلی" پروژه بررسی کند، بنابراین در واقع شما درخواست تصمیم‌گیری برای تغییرات را از نگهدارنده می‌کنید. یک pull request جایی است که می‌توانید تفاوت‌های ایجاد شده در یک شاخه را با بررسی‌ها، نظرات، تست‌های یکپارچه و موارد دیگر مقایسه و بحث کنید. یک pull request خوب تقریباً از همان قواعد پیام کامیت پیروی می‌کند. می‌توانید به یک مشکل در ردیاب مشکلات اشاره کنید، مثلاً وقتی کار شما یک مشکل را حل می‌کند. این کار با استفاده از `#` و سپس شماره مشکل انجام می‌شود. برای مثال `#97`. 🤞انگشتان را برای شانس خوب فشار دهید که همه بررسی‌ها موفق باشند و مالک(های) پروژه تغییرات شما را در پروژه ادغام کنند🤞 شاخه کاری محلی فعلی خود را با تمام کامیت‌های جدید از شاخه ریموت مربوطه در GitHub به‌روزرسانی کنید: `git pull` ## چگونه به منبع باز کمک کنیم ابتدا، یک مخزن (یا **repo**) در GitHub پیدا کنید که برای شما جالب باشد و بخواهید تغییری در آن ایجاد کنید. شما باید محتوای آن را به دستگاه خود کپی کنید. ✅ یک راه خوب برای پیدا کردن مخازن مناسب برای مبتدیان این است که [با برچسب 'good-first-issue' جستجو کنید](https://github.blog/2020-01-22-browse-good-first-issues-to-start-contributing-to-open-source/). ![کپی کردن یک مخزن به صورت محلی](../../../../translated_images/clone_repo.5085c48d666ead57664f050d806e325d7f883be6838c821e08bc823ab7c66665.fa.png) روش‌های مختلفی برای کپی کردن کد وجود دارد. یکی از روش‌ها "کلون کردن" محتوای مخزن با استفاده از HTTPS، SSH یا GitHub CLI (رابط خط فرمان GitHub) است. ترمینال خود را باز کنید و مخزن را به این صورت کلون کنید: `git clone https://github.com/ProjectURL` برای کار روی پروژه، به پوشه مناسب بروید: `cd ProjectURL` همچنین می‌توانید کل پروژه را با استفاده از [Codespaces](https://github.com/features/codespaces)، ویرایشگر کد داخلی GitHub / محیط توسعه ابری، یا [GitHub Desktop](https://desktop.github.com/) باز کنید. در نهایت، می‌توانید کد را در یک پوشه زیپ‌شده دانلود کنید. ### چند نکته جالب دیگر درباره GitHub شما می‌توانید هر مخزن عمومی در GitHub را ستاره‌دار کنید، دنبال کنید یا "فورک" کنید. مخازن ستاره‌دار خود را می‌توانید در منوی کشویی بالا سمت راست پیدا کنید. این شبیه به بوکمارک کردن است، اما برای کد. پروژه‌ها یک ردیاب مشکلات دارند، معمولاً در تب "Issues" در GitHub مگر اینکه به شکل دیگری مشخص شده باشد، جایی که افراد درباره مشکلات مربوط به پروژه بحث می‌کنند. و تب Pull Requests جایی است که افراد درباره تغییراتی که در حال انجام است بحث و بررسی می‌کنند. پروژه‌ها ممکن است همچنین بحث‌هایی در انجمن‌ها، لیست‌های ایمیل یا کانال‌های چت مانند Slack، Discord یا IRC داشته باشند. ✅ به مخزن جدید GitHub خود نگاهی بیندازید و چند کار انجام دهید، مانند ویرایش تنظیمات، افزودن اطلاعات به مخزن خود و ایجاد یک پروژه (مانند یک تخته کانبان). کارهای زیادی می‌توانید انجام دهید! --- ## 🚀 چالش با یک دوست همکاری کنید و روی کد یکدیگر کار کنید. یک پروژه به صورت مشترک ایجاد کنید، کد را فورک کنید، شاخه ایجاد کنید و تغییرات را ادغام کنید. ## آزمون پس از درس [آزمون پس از درس](https://ff-quizzes.netlify.app/web/en/) ## مرور و مطالعه شخصی بیشتر درباره [کمک به نرم‌افزارهای منبع باز](https://opensource.guide/how-to-contribute/#how-to-submit-a-contribution) بخوانید. [برگه تقلب Git](https://training.github.com/downloads/github-git-cheat-sheet/). تمرین، تمرین، تمرین. GitHub مسیرهای یادگیری عالی از طریق [skills.github.com](https://skills.github.com) ارائه می‌دهد: - [هفته اول در GitHub](https://skills.github.com/#first-week-on-github) همچنین دوره‌های پیشرفته‌تری نیز خواهید یافت. ## تکلیف دوره [هفته اول در GitHub](https://skills.github.com/#first-week-on-github) را کامل کنید. --- **سلب مسئولیت**: این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما هیچ مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.