ویرگول
ورودثبت نام
حسین جعفری
حسین جعفری
خواندن ۱۱ دقیقه·۹ روز پیش

مدیریت Collaboration در گیت و گیت‌هاب: قسمت چهارم

در دنیای توسعه نرم‌افزار، همکاری در پروژه‌های تیمی از اهمیت بالایی برخوردار است. گیت و گیت‌هاب دو ابزار اصلی هستند که به توسعه‌دهندگان کمک می‌کنند تا کدهای خود را به‌صورت همزمان مدیریت کنند و به اشتراک بگذارند. در این مقاله، به بررسی نحوه استفاده از ابزارهای collaboration در گیت و گیت‌هاب می‌پردازیم، از جمله Workflowها، Pull Requests، Issues، Milestones و نحوه مشارکت در پروژه‌های متن‌باز.

۲. ایجاد مخزن در گیت‌هاب

برای شروع همکاری در گیت‌هاب، ابتدا باید یک مخزن (Repository) ایجاد کنید. برای این کار:

  1. وارد حساب گیت‌هاب خود شوید.
  2. یک مخزن جدید ایجاد کنید و نامی مناسب (مثلاً "پروژه مشترک") به آن بدهید.
  3. مخزن خود را می‌توانید عمومی یا خصوصی تنظیم کنید و یک فایل README اولیه اضافه کنید.

اگر می‌خواهید مخزن برای همه قابل مشاهده باشد گزینه public و اگر می‌خواهید انتخاب کنید چه کسی باید بتواند مخزن را مشاهده کند گزینه private را انتخاب کنید.


سپس روی "ایجاد مخزن" کلیک کنید، با این کار اولین commit ایجاد می شود.

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

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

برای اضافه کردن همکاران به یک مخزن گیت‌هاب مراحل زیر را دنبال کنید:

  1. به صفحه اصلی مخزن خود بروید و بر روی Settings کلیک کنید.
  2. در بخش "Access" در نوار کناری، گزینه Collaborators را انتخاب کنید.
  3. بر روی Add people کلیک کنید.
  4. نام شخص مورد نظر را در فیلد جستجو وارد کرده و از لیست نتایج نام آن را انتخاب کنید.
  5. بر روی Add [NAME] to REPOSITORY کلیک کنید.
  6. کاربر یک ایمیل دعوت دریافت خواهد کرد که پس از پذیرش، به مخزن شما دسترسی خواهد داشت.


۴. کلون کردن یک مخزن گیت‌هاب

  1. به صفحه اصلی مخزن مورد نظر در GitHub.com بروید.
  2. بالای لیست فایل‌ها روی Code کلیک کنید.


  1. آدرس URL مخزن را کپی کنید:برای کلون کردن با HTTPS، گزینه HTTPS را انتخاب کنید و برای استفاده از کلید SSH، روی SSH کلیک کنید و برای استفاده از GitHub CLI، گزینه GitHub CLI را انتخاب کنید.
  1. ترمینال را باز کنید.
  2. به دایرکتوری‌ای که می‌خواهید مخزن در آن کلون شود، بروید.
  3. دستور زیر را تایپ کنید و URL کپی شده را اضافه کنید:
git clone <https://github.com/YOUR-USERNAME/YOUR-REPOSITORY>

با فشردن Enter کلون انجام خواهد شد.

با دستور زیر لیست commit ها رو میبینیم

git log --oneline

در تصویر، بخش‌های قرمز مربوط به "origin/main" و "origin/HEAD" نشان‌دهنده‌ی شاخه‌ها و رفرنس‌های اصلی مخزن ریموت هستند:

  • origin/main:

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

  • origin/HEAD:

این نشان می‌دهد که HEAD (اشاره‌گر فعلی) در مخزن ریموت به شاخه‌ی main اشاره می‌کند. HEAD نمایانگر آخرین حالت مخزن است که در اینجا به شاخه‌ی main اشاره دارد.

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

۵. Fetch و Merge

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

خب برای اینکه خیلی بهتر این مورد رو متوجه بشیم بریم توی عمل ببینیم این موارد رو

از داخل repository میریم و فایل README.md رو یه تغییر میدیم، میبینیم که یه commit به لیست commit ها اضفه میشن.

خب الان اگه برگردیم به ترمینال میبینیم که تنها همون commit اولی رو داریم و اگه بخوایم این commit های جدید رو بیاریم روی سیستم لوکال از دستور fetch استفاده می کنیم.

الان میبینیم که commit های دیگه اومدن روی سیستم لوکال اما اعمال نشدن

git log --oneline --all

ما با دستور زیر میتونیم وضیت branch های لوکال رو ببینیم که میبینیم که میگه یه دونه commit عقب تر هست

git branch -vv

خب الان میتونیم با دستور git merge میتونیم دایرکتوری لوکال رو آبدیت کنیم که مثل remote repository بشه

و اگه لاگ رو ببینیم میبینیم main و origin/main جفتشون به commit آخری اشاره میکنن.

‏ ۶. Pull کردن تغییرات

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

  1. ‏git pull به صورت خودکار تغییرات را از مخزن ریموت دریافت و سپس با مخزن محلی ادغام می‌کند.
  2. اگر شاخه‌های محلی و ریموت تغییرات متفاوتی داشته باشند، git pull یک ادغام سه‌طرفه انجام می‌دهد.
  3. برخی توسعه‌دهندگان از merge commits راضی نیستند و برای داشتن تاریخچه خطی، از rebase استفاده می‌کنند.
  4. ‏git pull --rebase تغییرات محلی را روی تغییرات ریموت دوباره اجرا می‌کند و تاریخچه را ساده‌تر و بدون کامیت‌های ادغام نگه می‌دارد.

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

خب مجددا میریم یخ تغییر توی README.md توی remote repositiry اعمال می کنیم.


بعد توی لوکال کارهای زیر رو انجام میدیم تا commit توی لوکال داشته باشیم

echo hello > file1.txt git add . git commit -m &quotadd new file1.txt &quot

الان اگه log رو ببینیم میبینیم که main که branch لوکال ما هست یه دونه commit جلوتر از origin/main هست

git log --oneline --all

خب الان با دستور git pull تغیرات رو روی لوکال اعمال میکنیم و اگه لاگ رو ببینیم میبینیم که تغیرات اعمال شدن

git log --oneline --all --graph

حالا برای اینکه سناریو دوم یعنی rebase م انجام بدیم با دستور زیر به یه commit قبل بر میگردیم

و الان با دستور زیر باهم ادغامشون میکنیم.

git pull --rebase

و الان میبینیم به صورت خطی تمام commit ها پشت هم قرار گرفتن،‌ نکته ای که وجود داره اینجا اینه اشاره گر main و origin/main به یک commit اشاره نمیکن، این مورد زمانی که شما دستور pull رو میزنین به صورت خودکار اتفاق میفته، تو قسمت بعدی نشون میدم این مورد رو

‏ ۶. Push کردن تغییرات

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

الان اگه لاگ رو ببینین میبینید که اشاره گر main و origin/main به یک commit اشاره میکنن


الان اگه توی repository بریم میبینیم که ۴ تا commit داریم و آخرین commit همونی هست که توی لوکال ایجاد کردیم.

۷. مدیریت برچسب‌ها (Tags) و نسخه‌ها

به صورت پیش فرض tag هایی که به commit خاصی میزنیم به remote repository ارسال نمیشن و درصورتی که بخوایم tag ها هم ارسال بشن باید از دستور زیر استفاده کنیم

git push origin <tag-name>

خب برای بررسی این مورد میایم به تگ ایجاد میکنیم و ارسال میکنیم به remote repository

git tag v1.0 git push origin v1.0

میتونیم ببینیم که تگ ارسال شده به remote repository ما

و اگه اشتباهی این تگ رو فرستاده بودین میتونین اون رو با دستور زیر حذف کنین و میبینین که دیگه در دسترس نیست

git push --delete origin v1.0

و اگه بخواین از لوکال هم این تگ رو حذف کنین از دستور زیر استفاده میکنین

git tag -d v1.0

۸. مدیریت انتشار (Releases) در GitHub

مدیریت انتشار در GitHub این امکان را فراهم می‌کند که نرم‌افزار خود را همراه با کد منبع، فایل‌های باینری و یادداشت‌های انتشار به صورت بسته‌بندی شده منتشر کنید. برای ایجاد یک انتشار، به تب "Releases" در مخزن خود بروید و تگ جدیدی ایجاد یا انتخاب کنید. سپس یادداشت‌های مربوط به انتشار را بنویسید و در صورت نیاز فایل‌های اضافی مثل باینری‌ها را ضمیمه کنید. همچنین می‌توانید انتشار خود را به عنوان پیش‌انتشار (pre-release) علامت‌گذاری کنید. این ویژگی بر اساس تگ‌های Git ساخته شده و امکانات بیشتری ارائه می‌دهد.

وارد قسمت release میشیم و توضیحاتی که نیاز داره رو مینویسیم، تنها نکته ای که داره release ها از تگ ها استفاده میکنن، درصورتی که تگی از قبل وجود داره از اون استفاده میکنه و اگه تگ وجود نداره به آخرین commit یه تگ میدیم توی release ازش استفاده می کنیم.

و توی صفحه اصلی پروژه قسمت سمت راست هم میتونیم لیستی از release ها رو ببینیم

اشتراک‌گذاری شاخه‌ها (Branches) در GitHub

در این بخش، نحوه‌ی ایجاد، ارسال (push)، و حذف شاخه‌ها در یک مخزن GitHub توضیح داده می‌شود. به‌طور پیش‌فرض، شاخه‌ها در مخزن محلی شما خصوصی هستند. برای اشتراک‌گذاری آن‌ها با دیگران، باید به‌صورت دستی از دستور git push -u origin <branch-name> استفاده کنید. پس از ارسال، همکاران می‌توانند روی شاخه کار کنند. وقتی کار تمام شد، می‌توانید شاخه را با دستور git push origin --delete <branch-name> از مخزن حذف کرده و برای حذف محلی از git branch -d <branch-name> استفاده کنید.

خب میایم یه branch روی لوکال میسازیم و لگه بخوایم اونو به remote repositiry بفرستیم با خطای زیر روبرو میشیم

git switch -c feature/change-password git push

این خطا داره میگه که برای این branch هیچ branch توی repo اصلی وجود نداره و برای حل این مشکل باید دستور زیر رو بزنی

git push --set-upstream origin feature/change-password

خب قبل از اون با دستور git branch -vv میتونیم ببینیم که main به origin/main متصل هست اما feature/change-password به جایی متصل نیست

و همچنین برای دیدن لیست remote branch ها میتونیم از دستور git branch -r استفاده کنیم که میبینیم برای feature/change-password توی remote هیچ Branch ی تعریف نشده


حب الان دستور رو میزنیم و میتونیم تغییرات رو ببینیم

مثل قبل با دستور git branch -vv میتونیم ببینیم که main به origin/main متصل هست و الان feature/change-password به origin وصل شده


و هر زمان نیاز به این branch نداشتیم میتونیم اون رو روی remote repository با دستور زیر حذف کنیم

git push -d origin feature/change-password


۸. Pull Request و Review

یکی از ابزارهای پرکاربرد گیت‌هاب، Pull Request است. با استفاده از Pull Request می‌توانید تغییرات خود را به تیم پیشنهاد دهید و منتظر بازبینی (Review) آن باشید. این روش برای دریافت بازخورد تیم و اطمینان از کیفیت کد بسیار مفید است.

خب تو این سناریو میایم یه branch توی لوکال میسازیم و با این سناریو میریم جلو

git switch -c feature/login echo hello > file3.txt git add . git commit -m &quotadd file3.txt&quot

خب میبینیم که درخواستی اومده توی repo ما مبنی بر compare and pull

ما میتونیم بریم توی قسمت pull request ها و ببینیم چه تغییراتی قراره اضافه بشه به main

زمانی که درخواست pull request رو میزنیم با عکس زیر روبرو میشیم و title و اگه توضیحاتی خاصی نیاز داره میدیم بهش و create pull request رو میزنیم.

خب تو قسمت بعدی هم باید تغیر رو بررسی کنیم و merge کنیم که ۳ نوع merge میتونیم اینجا انجام بدیم، هرکدوم برای شرایط خاصی استفاده میشه.

در آخر میتونیم برگردیم توی main و تغییرات رو از remote repository دریافت کنیم، میبینیم که file3.txt به branch main اضافه شده


بررسی confilict توی سناریو قبلی

git switch feature/logout echo hello > file1.txt git commit -am &quotwrite hello file1.txt&quot git push -u origin git push -u origin feature/logout

خب برای ایجاد confilict بریم به main همین فایل رو تغییر بدیم ببینیم چی میشه

git switch main echo world > file1.txt git commit -am &quotwrite world to file1.txt&quot

خب زمانی که compare & pull رو میزنیم میبینیم که اجازه نمیده مستقیم merge بشه اونم بخاطر confilict هست که باید fix بشه

خب قبلا این جا merge میکردیم و تمام اما الان میبینیم که confilict داریم و باید خطا رو رفع کنیم

گزینه resove confilict رو میزنیم و میریم برای حل confilict که داریم و در آخرم گزینه commit merge رو میزنیم

حالا مجددا میرسیم به جایی که قبلا بودیم و الان merge میکنیم.

۹. مدیریت مسائل (Issues) و نقاط عطف (Milestones)

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

خب بریم یه issue ایجاد کنیم، میتونیم به شخص خاصی ارجاع بدیم و همچنین میتونیم از label هایی که داره استفاده کنیم.

خب بریم ببینیم چطور میتونیم پیشرفت یه issue رو پیگیری کنیم یه milestone میسازیم

و برمیگردیم توی issue ها و هرکدوم از isseu ها رو که میخوایم اضافه میکنیم به این milestone

و اگه ما issue رو ببنیدیم milestone نیز بسته خواهد شد.

۱۰. مشارکت در پروژه‌های متن‌باز

یکی از بزرگ‌ترین مزایای گیت‌هاب، مشارکت در پروژه‌های متن‌باز (Open Source) است. برای مشارکت در این پروژه‌ها، ابتدا مخزن را fork کنید، سپس تغییرات خود را در شاخه جدید اعمال و در نهایت یک Pull Request ارسال کنید تا تغییرات شما بازبینی و در صورت تأیید، با پروژه اصلی ادغام شوند.

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

گیت گیت‌هابgitتوسعهٔ نرم‌افزاردستور gitمخزن ریموت
شاید از این پست‌ها خوشتان بیاید