انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: در گیت هاب تغییرات در ریپوزیتوری اصلی روی نسخه فورک شده هم اعمال می شه؟  (دفعات بازدید: 3292 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین tirdad

  • Newbie
  • *
  • ارسال: 7
از گیت هاب به عنوان محل ذخیره فایل استفاده می کردم (نمی دونم اخلاقی هست یا نه یا با TOS گیت هاب مغایرتی داره یا نه)، به هر حال از دیروز تصمیم گرفتم از گیتهاب استفاده کاربردی بکنم و یک پروژه مربوط به رشته م رو فورک کردم (ترجمه کتاب).
اگر در پروژه اصلی تغییری داده بشه در نسخه ای که من فورک کردم هم اون تغییر داده میشه؟
گیت رو روی سیستم خودم نصب کردم. پروژه رو روی سیستمم clon کردم. یک فولدر برای زبان فارسی ساختم و دارم ترجمه می کنم. اگر در این مدت متن پروژه اصلی تغییر کنه من که دارم Offline ترجمه می کنم تا بعدا push کنم تکلیفم چیه؟
« آخرین ویرایش: 15 دی 1392، 11:58 ق‌ظ توسط tirdad »

آفلاین مجتبی باغبان

  • Hero Member
  • *
  • ارسال: 780
  • جنسیت : پسر
نقل‌قول
اگر در پروژه اصلی تغییری داده بشه در نسخه ای که من فورک کردم هم اون تغییر داده میشه؟
تا جایی که یادمه به خودی خود نه باید تنظیم کنی تا تغییرات اتوماتیک اعمال بشه

آفلاین tirdad

  • Newbie
  • *
  • ارسال: 7
در مورد نسخه کلون روی سیستم خودمون چی؟ راهی هست که git‌ لحظه به لحظه یا دوره ای تغییرات رو بررسی و اطلاع بده؟

آفلاین tirdad

  • Newbie
  • *
  • ارسال: 7
تا جایی که یادمه به خودی خود نه باید تنظیم کنی تا تغییرات اتوماتیک اعمال بشه
در بخش settings رپوزیتوری فورک شده چنین تنظیماتی نداره! اینا آپشن هاشه:
Settings: Repository Name, Default Branch
Features: Wikis, Restrict edits to Collaborators only, Issues
GitHub Pages: Update your site
Danger Zone: Make this repository private, Transfer Ownership, Delete this repository

آفلاین مجتبی باغبان

  • Hero Member
  • *
  • ارسال: 780
  • جنسیت : پسر
تا جایی که یادمه به خودی خود نه باید تنظیم کنی تا تغییرات اتوماتیک اعمال بشه
در بخش settings رپوزیتوری فورک شده چنین تنظیماتی نداره! اینا آپشن هاشه:
Settings: Repository Name, Default Branch
Features: Wikis, Restrict edits to Collaborators only, Issues
GitHub Pages: Update your site
Danger Zone: Make this repository private, Transfer Ownership, Delete this repository
منظورم تنظیمات توی سایت نیست.
توی ترمینال باید کارهاش رو انجام بدی

مقاله خود سایت github
رو بخون

آفلاین سلمان م.

  • ناظر انجمن
  • *
  • ارسال: 4106
  • جنسیت : پسر
  • GNU Operating System - سیستم عامل گنو
حواست باشه فولدر زبون فارسی رو که ایجاد کردی توی خود فولدر اصلی که clone کردی نباشه. یک جای دیگه باید درست کنی. اگه خود مخزنی که fork کردی روی رایانه‌ات رو دست‌کاری کنی دیگه نمی‌شه upstream رو با مخزن خودت قاطی (merge) کنی. باید یک سری کارهایی قبلش انجام بدی تا بشه. خلاصه، برای راحتی خودت یک مخزن جدا ایجاد کن و فایل‌های فارسی‌شده رو رون‌جا بذار.

آفلاین tirdad

  • Newbie
  • *
  • ارسال: 7
خلاصه، برای راحتی خودت یک مخزن جدا ایجاد کن و فایل‌های فارسی‌شده رو رون‌جا بذار.
پس چطوری پوشه فارسی رو ب پروژه اصلی اضافه کنم؟! بقیه زبان ها در همون پروژه اصلی یک دایرکتوری اختصاصی دارند! تصمیم داشتم در نسخه فورک شده یک پوشه فارسی بسازم و Pull Request بفرستم.

آفلاین سلمان م.

  • ناظر انجمن
  • *
  • ارسال: 4106
  • جنسیت : پسر
  • GNU Operating System - سیستم عامل گنو
فرض کن برنامه‌ی روی گیت‌هاب نسخه‌ی ۱۰۰ هست و تو اون رو کامپیوترت clone می‌کنی. الآن دو تا مخزن گیت وجود دارند که مثل همدیگه هستند. تا این‌جا مشکلی نیست.
شما روی کامیپوترت فرض کن یک فایل فارسی اضافه می‌کنی و بعد commit می‌کنی اون رو. الآن نسخه‌ی روی کامپیوترت ۱۰۱ هست.
حالا یک نفر روی مخزن اصلی کدی رو اضافه می‌کنه (push می‌کنه) و الآن نسخه‌ی روی گیت‌هاب هم ۱۰۱ هست.

الآن شما pull می‌کنی (یعنی می‌خوای که فایل‌های روی گیت‌هاب رو بگیری و جایگزین فایل‌های قبلی کنی). در این لحظه گیت بهت پیغام خطا می‌ده و می‌گه که merge conflict داری:

CONFLICT (content): Merge conflict in test1
Automatic merge failed; fix conflicts and then commit the result.

در این لحظه گیت به خودش می‌گه: اگه نسخه‌ی روی گیت‌هاب رو بیارم روی کامپیوترش، فایل‌های که این همه بنده‌ی خدا ویرایش کرده ناپدید می‌شه. اگر هم نیارم که کارش راه نمی‌افته. :) در نتیجه مغزش هنگ می‌کنه و پیغام خطا می‌ده. که برای حل کردنش نیاز به دنگ و فنگ داری.

------------
راه حلی که بنظر من می‌رسه این هست:
۱. شما مخزن اصلی روی گیت‌هاب رو دو جا روی کامپیوترت clone کن. اسمشون رو می‌ذاریم مثلاً clone_1 و clone_2.
۲. یک مخزن گیت خالی روی مثلاً گیت‌هاب درست کن (البته من خودم از گیتوریس استفاده می‌کنم) و اسمش رو می‌ذاریم مثلاً fa_1
۳. حالا شما فقط روی clone_1 کار کن و فایل‌ها رو ترجمه کن و بعد commit و بعد push روی مخزن fa_1
۴. به clone_2 کاری نداشته باش و فقط روی اون git pull بزن.
۵. روی clone_2 بعد از هر بار به‌روزرسانی diff بزن و تفاوت‌ها رو به صورت دستی به clone_1 اضافه کن و بعد commit و پوش.
۶. وقتی کار ترجمه تموم شد. pull request بده.

موفق باشی.
« آخرین ویرایش: 15 دی 1392، 06:37 ب‌ظ توسط سلمان م. »

آفلاین ngc0der

  • Full Member
  • *
  • ارسال: 106
به نظرم راه ساده تر اینه که بعد از clone یک branch بسازین و تغییرات رو اونجا انجام بدین و هر چند وقت هم master رو آپدیت کنین و با branchی که ساختین merge کنین و بعد از رفع conflictهای احتمالی branchی که ساختین با master مرج کنین.اگه تغییرات رو هر چند وقت با پروژه اصلی merge نکنین احتمال conflict بیشتر و دردسر رفعشون هم بیشتر میشه. مثل مثال پایین می تونین عمل کنین(ممکنه بعضی مراحل جا افتاده باشه یا بعضی جاها اشتباه باشه ولی به هر حال روش کلی رو نشون میده):
git clone .../project.git
cd project
git checkout -b fatranslate
... changes ...
git add .
git commit -m "first section translated"
git checkout master
git pull
git checkout fatranslate
git merge master
... conflicts resolve ...
git commit ...
git checkout master
git merge fatranslate
git checkout fatranslate
... changes and continue like above! ...

آفلاین سلمان م.

  • ناظر انجمن
  • *
  • ارسال: 4106
  • جنسیت : پسر
  • GNU Operating System - سیستم عامل گنو
ngc0der عزیز، فکر کنم دوستمون به مخزن اصلی دسترسی pull نداشته باشه. و می‌خواد بعد از ترجمه pull request بده.

آفلاین ngc0der

  • Full Member
  • *
  • ارسال: 106
درسته کمی حق با شماست! من چون یه مدت با یک مخزن private کار می کردم که دسترسی کامل داشتم کلا روش فورک رو فراموش کرده بودم!
به هر حال همه به مخزن اصلی دسترسی pull دارن و در واقع دسترسی push ندارن(در واقع pull request به این معنی که از فردی که پروژه اونو فورک کردیم درخواست می کنیم که تغییرات رو از پروژه ما pull کنه) و از طرفی نیازی به دو clone نیست و به جای clone دوم در مثال شما باید پروژه اصلی رو با دستور git remote add با یه اسمی اضافه کرد و تغییرات اونو pull و هر چند وقتی با پروژه فورک شده sync کرد:
git clone .../forkedproject.git
git remote add upstream .../mainproject.git
cd forkedproject
git checkout -b fatranslate
... changes ...
git add .
git commit -m "first section translated"
git checkout master
git fetch upstream
git merge upstream/master
... conflicts resolve ...
git checkout fatranslate
git merge master
... conflicts resolve ...
git commit ...
... changes and continue like above! ...

البته باید اعتراف کنم که خودم هنوز بعضی چیزها رو در git کامل درک نمی کنم هر چند مثلا مواردی مثل اینو هم خوندم : http://www.sbf5.com/~cduan/technical/git