Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

چالش های کار گروهی بر روی یک مخزن گیت #27

Closed
niiima opened this issue Jun 9, 2019 · 7 comments
Closed
Labels
good first issue Good for newcomers

Comments

@niiima
Copy link
Member

niiima commented Jun 9, 2019

وقتی از گیت در کار گروهی استفاده می شود، اصولا تمامی کالابریتور ها یک فورک از کد مخزن upstream بر روی فضای کاری خود ایجاد میکنند

git clone https://github.com/iran-react-community/docs.git

نکته ای که در ادامه حائز اهمیت است، اطمینان از سینک بودن همیشگی با ریپوزیتوری اصلی در هر مرحله کار بر روی برنچ هایی است که در اختیار دیگران نیز قرار دارد.

هر شخصی در یک اجتماع اُپن سورس مسئول عملیات و مراقبت های خویش برای آسیب نرسندن به محیط مشارکتیست

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

با اجرای این کامند بلافاصله بعد از فورک ریپوزیتوری

git remote add upstream https://github.com/iran-react-community/docs.git

میتوانیم از عملکرد صحیح دستور زیر مطمئن شویم، چرا که اگر upstream به مخزن اصلی که ریپو را از آن فورک کردیم اشاره نکند، با اجرای دستور fetch ما تنها مخزن local خود را با fork خودمان سینک کرده ایم ولی نیت ما برای همکاری با پروژه های مشارکتی خدشه وارد نکردن به درخت سابقه برنچ هاست.

git fetch upstream

در نهایت اگر از صحت عملیات میخواهید مطمئن باشید دستور زیر را هم اجرا کنیم تا local با upstream یکسان شود

git rebase upstream/master

@niiima niiima added enhancement New feature or request help wanted Extra attention is needed labels Jun 9, 2019
@niiima niiima pinned this issue Jun 9, 2019
@niiima
Copy link
Member Author

niiima commented Jun 9, 2019

در صورتی که میخواهیم از برنچی که دیگران نیز بر روی آن کار میکنند استفاده کنیم مقتضی است دستور زیر را اجرا کنیم تا به جای کل ریپوی خودمان تنها آن برنچ را به صورت سینک با فضای مخزن ریموت در آوریم

git checkout --track origin/dev

@niiima
Copy link
Member Author

niiima commented Jun 10, 2019

Resolve merge conflicts in command line

در ادامه کار ممکن است با مواردی روبرو شوید که نیاز به تصحیح کانفلیکت های مرج دارد، به عنوان مثال وقتی یک لاین از کدِ یک branch در میان کار شما و دیگر مشارکت کنندگان به صورت همزمان تغییرات داشته.

git pull -s recursive -X theirs

@niiima
Copy link
Member Author

niiima commented Jun 10, 2019

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

git remote -v

اگر پیام هایی که در زیر مشاهده میکنید در ریپوی شما وجود دارد، تنظیماتتان اشتباه است

origin git@github.com:iran-react-community/docs.git (fetch)
origin git@github.com:iran-react-community/docs.git (push)

تنظیمات به این صورت باید اطلاح شود

git remote rm origin

git remote add origin git@github.com:YOUR_USER/docs.git
git remote -v

origin git@github.com:iYOUR_USER/docs.git (fetch)
origin git@github.com:YOUR_USER/docs.git (push)
upstreamgit@github.com:iran-react-community/docs.git (fetch)
upstreamgit@github.com:iran-react-community/docs.git (push)

که این آدرس fork شما از مخزن اصلی را شامل می شود. و اینکه من در نظر گرفتم که شما این موضوع را که تغیییرات باید به صورت signed ارسال شوند وگرنه امکان مرج توسط مخزن به آنها داده نخواهد شد رعایت میکنید و به جای آدرس https از ssh استفاده میکنید.

نحوه ویرایش مخزن فعلی به صورتی که همگام با تغییرات مخزن اصلی بر روی ریپوزیتوری شما به سادگی قابل بارگذاری باشد پس از تعویض origin به ریپوی خودتان ، کافیست این ریپو را با دستورات زیر پیکره بندی کنید:

git remote add upstream https://github.com/iran-react-community/docs.git

از این پس سه فضای مختلف و سلسله مراتبی قرار گیری ریپوزیتوری ها هر یک به صورت مجزا باید توسط شما مدیریت شوند:

git fetch upstream // می تواند مخزن شما را با مخزن مادر به روز کند
git fetch origin // می تواند مخزن لوکال شما را با مخزن فورک شده خود را هماهنگ کند.

@niiima niiima added the good first issue Good for newcomers label Jun 10, 2019
@niiima
Copy link
Member Author

niiima commented Jun 11, 2019

در نهایت برای حذف برنچهای اضافه که احتمالا در مسیر کار خود ایجاد کرده اید و همسان سازی کامل با upstream

git remote prune origin

@niiima
Copy link
Member Author

niiima commented Jun 11, 2019

در صورتی که به هر دلیلی مثلا عدم استفاده از .gitognor یا یک کامیت اشتباه، تاریجچۀ فایلی به اشتباه وارد مخزن شما شده است و حال نیاز دارید اطلاعات تغییر یافته خود را با پول ریکوئست به پروژه وارد نمایید ابتده با دستور زیر اقدام به حذف تاریخچه مربوط به فایل ترک شده از سابقه گیت نمایید

git rm --cached unrequire_file

@khanzadimahdi
Copy link

من متوجه نشدم این issue که شما زدین چه ربطی به این رپازیتوری داره! بهتر بود اگه میخواین تیم خودتون رو اموزش بدید یه رپازیتوری مخصوص اینکار ایجاد میکردین یا اینکه کلاس اموزشی میزاشتین براشون. و اینکه کسی که با گیت بلد نیست کار کنه چرا باید روی رپازیتوری ها به عنوان توسعه دهنده کار کنه؟

@niiima
Copy link
Member Author

niiima commented Feb 13, 2020 via email

@niiima niiima removed enhancement New feature or request help wanted Extra attention is needed labels Feb 14, 2020
@niiima niiima closed this as completed Feb 14, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

2 participants