برای اینکه بتوانید در هر پروژه گیت همکاری کنید، باید بدانید که چگونه مخازن از راه دور خود را مدیریت کنید. مخازن از راه دور نسخه هایی از پروژه شما هستند که در اینترنت یا شبکه جایی میزبانی می شوند. شما می توانید چند تا از آنها را داشته باشید، که هر یک از آنها به طور کلی فقط برای خواندن یا خواندن / نوشتن برای شما است. همکاری با دیگران شامل مدیریت این مخازن از راه دور و فشار دادن و کشیدن داده ها به آنها و از آنها زمانی که شما نیاز به به اشتراک گذاشتن کار. مدیریت مخازن از راه دور شامل دانستن چگونگی اضافه کردن مخازن از راه دور، حذف کنترل های از راه دور که دیگر معتبر نیستند، مدیریت شاخه های از راه دور مختلف و تعریف آنها به عنوان ردیابی یا نه و بیشتر است. در این بخش، ما برخی از این مهارت های مدیریت از راه دور را پوشش خواهیم داد.
|
Note
|
Remote repositories can be on your local machine.
کاملا ممکن است که شما با یک مخزن " `remote ` " کار کنید که در واقع در همان میزبان شما است. کلمه “remote” لزوماً به این معنی نیست که مخزن در جایی دیگر در شبکه یا اینترنت است ، فقط این است که در جای دیگری است. کار با چنین مخزن از راه دور هنوز هم شامل تمام استاندارد فشار، کشیدن و گرفتن عملیات به عنوان با هر از راه دور دیگر. |
برای دیدن اینکه کدام سرورهای از راه دور را پیکربندی کرده اید، می توانید دستور git remote را اجرا کنید.
نام های کوتاه هر دستگیره ای که مشخص کرده اید را لیست می کند.
اگر مخزن خود را کلان کرده اید، حداقل باید origin را ببینید — این نام پیش فرضی است که Git به سرور که از آن کلان کرده اید می دهد:
$ git clone https://github.com/schacon/ticgit
Cloning into 'ticgit'...
remote: Reusing existing pack: 1857, done.
remote: Total 1857 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1857/1857), 374.35 KiB | 268.00 KiB/s, done.
Resolving deltas: 100% (772/772), done.
Checking connectivity... done.
$ cd ticgit
$ git remote
originشما همچنین می توانید -v را مشخص کنید، که به شما URL هایی را نشان می دهد که Git برای نام کوتاه ذخیره کرده است که هنگام خواندن و نوشتن به آن از راه دور استفاده می شود:
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)اگر شما بیش از یک ریموت دارید، دستور همه آنها را لیست می کند. به عنوان مثال، یک مخزن با چندین کنترل از راه دور برای کار با چندین همکار ممکن است چیزی شبیه به این باشد.
$ cd grit
$ git remote -v
bakkdoor https://github.com/bakkdoor/grit (fetch)
bakkdoor https://github.com/bakkdoor/grit (push)
cho45 https://github.com/cho45/grit (fetch)
cho45 https://github.com/cho45/grit (push)
defunkt https://github.com/defunkt/grit (fetch)
defunkt https://github.com/defunkt/grit (push)
koke git://github.com/koke/grit.git (fetch)
koke git://github.com/koke/grit.git (push)
origin git@github.com:mojombo/grit.git (fetch)
origin git@github.com:mojombo/grit.git (push)این به این معنی است که ما می توانیم به راحتی از هر یک از این کاربران کمک بگیریم. ما ممکن است علاوه بر این اجازه داشته باشیم که به یکی یا چند مورد از این ها فشار بیاریم، اگرچه نمی توانیم این را اینجا بگوییم.
توجه داشته باشید که این کنترل های از راه دور از پروتکل های مختلفی استفاده می کنند؛ ما بیشتر در مورد این موضوع در ch04-git-on-the-server.asc صحبت خواهیم کرد.
ما اشاره کرده ایم و برخی از تظاهرات را نشان داده ایم که چگونه دستور `git clone ` به طور ضمنی ریموت `origin ` را برای شما اضافه می کند. در اینجا نحوه اضافه کردن یک ریموت جدید به طور صریح است. برای اضافه کردن یک مخزن Git از راه دور به عنوان یک نام کوتاه که به راحتی می توانید به آن مراجعه کنید، `git remote add <shortname> <url> ` را اجرا کنید:
$ git remote
origin
$ git remote add pb https://github.com/paulboone/ticgit
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
pb https://github.com/paulboone/ticgit (fetch)
pb https://github.com/paulboone/ticgit (push)حالا شما می توانید از رشته pb در خط فرمان به جای کل URL استفاده کنید.
به عنوان مثال، اگر می خواهید تمام اطلاعاتی را که Paul دارد اما هنوز در مخزن خود ندارید، بدست آورید، می توانید git fetch pb را اجرا کنید:
$ git fetch pb
remote: Counting objects: 43, done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 43 (delta 10), reused 31 (delta 5)
Unpacking objects: 100% (43/43), done.
From https://github.com/paulboone/ticgit
* [new branch] master -> pb/master
* [new branch] ticgit -> pb/ticgitشعبه master پاول در حال حاضر به صورت محلی به عنوان pb/master قابل دسترسی است — شما می توانید آن را به یکی از شعبه های خود ادغام کنید، یا اگر می خواهید آن را بازرسی کنید می توانید یک شعبه محلی را در آن نقطه بررسی کنید.
ما در ch03-git-branching.asc درباره شاخه ها و نحوه استفاده از آنها به طور مفصل تر صحبت خواهیم کرد.
همانطور که دیدید، برای دریافت داده ها از پروژه های از راه دور، می توانید دستورات را اجرا کنید.
$ git fetch <remote>این فرمان به سمت آن پروژه ی از راه دور می رود و تمام داده هایی را که شما هنوز ندارید از آن پروژه ی از راه دور می گیرد. بعد از انجام این کار، شما باید مرجع تمام شاخه ها را از آن ریموت داشته باشید، که می توانید در هر زمان ادغام یا بازرسی کنید.
اگر یک مخزن را کلان کنید، دستور به طور خودکار آن مخزن از راه دور را با نام “origin” اضافه می کند.
بنابراین، git fetch origin هر کار جدیدی را که از زمانی که کلونش کردید (یا آخرین بار از آن گرفته شده اید) به آن سرور ارسال شده است، می آورد.
مهم است که توجه داشته باشید که دستور git fetch فقط داده ها را به مخزن محلی شما دانلود می کند — آن را به طور خودکار با هر یک از کارهای شما ادغام نمی کند یا آنچه در حال حاضر روی آن کار می کنید را اصلاح نمی کند.
وقتی آماده شدی باید دست به دست با کارت ادغامش کنی.
اگر شاخه فعلی شما برای ردیابی یک شاخه از راه دور تنظیم شده است (برای اطلاعات بیشتر به بخش بعدی و ch03-git-branching.asc مراجعه کنید) ، می توانید از دستور git pull برای گرفتن خودکار و سپس ادغام آن شاخه از راه دور در شاخه فعلی خود استفاده کنید.
این ممکن است یک جریان کار ساده تر یا راحت تر برای شما باشد؛ و به طور پیش فرض، دستور git clone به طور خودکار شاخه محلی master شما را برای ردیابی شاخه master از راه دور (یا هر نام دیگری که شاخه پیش فرض نامیده می شود) در سرور که از آن کلون شده است، تنظیم می کند.
اجرای git pull به طور کلی داده ها را از سرور که در اصل از آن کلان کرده اید می گیرد و به طور خودکار سعی می کند آن را در کد که در حال حاضر روی آن کار می کنید ادغام کند.
|
Note
|
از نسخه 2.27 Git به بعد، اگر متغیر اگر می خواهید رفتار پیش فرض گیت را داشته باشید (اگر امکان دارد سریع پیش بروید، در غیر این صورت یک commit ادغام ایجاد کنید):
اگه ميخواي موقع کشيدن بازي کني:
|
وقتی پروژه تان را در نقطه ای قرار می دهید که می خواهید به اشتراک بگذارید، باید آن را به سمت بالا بکشید.
دستور برای این کار ساده است: git push <remote> <branch> `.
اگر می خواهید شاخه `master خود را به سرور origin خود فشار دهید (باز هم، کلون کردن به طور معمول هر دو نام را برای شما به طور خودکار تنظیم می کند) ، پس می توانید این کار را انجام دهید تا هر کاری که انجام داده اید را به سرور برگردانید:
$ git push origin masterاین دستور فقط در صورتی کار می کند که شما از یک سرور که به آن دسترسی نوشتن دارید و اگر هیچ کس در این میان فشار نداده است، کلان کنید. اگر شما و شخص دیگری در همان زمان شبیه سازی کنید و آنها به سمت بالا فشار بیاورند و سپس شما به سمت بالا فشار بیاورید، فشار شما به درستی رد خواهد شد. بايد اول کار اونا رو بگيري و اونو به کار خودت اضافه کني تا بتوني فشار بياري برای اطلاعات دقیق تر در مورد نحوه ارسال به سرورهای از راه دور، به ch03-git-branching.asc مراجعه کنید.
اگر می خواهید اطلاعات بیشتری در مورد یک ریموت خاص مشاهده کنید، می توانید از دستور git remote show <remote> استفاده کنید.
اگر شما این دستور را با یک نام کوتاه خاص اجرا کنید، مانند origin، چیزی شبیه به این به دست می آورید:
$ git remote show origin
* remote origin
Fetch URL: https://github.com/schacon/ticgit
Push URL: https://github.com/schacon/ticgit
HEAD branch: master
Remote branches:
master tracked
dev-branch tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)این لیست URL برای مخزن از راه دور و همچنین اطلاعات شاخه ردیابی را لیست می کند.
دستور به شما کمک می کند که اگر شما در شاخه master هستید و git pull را اجرا کنید، آن را به طور خودکار شاخه master از راه دور به محلی پس از آن آورده شده است.
همچنین تمام ارجاعات از راه دور را که برداشته است لیست می کند.
این یک مثال ساده است که احتمالا با آن روبرو خواهید شد. با این حال، هنگامی که شما از گیت به شدت استفاده می کنید، ممکن است اطلاعات بیشتری از `git از راه دور نمایش ` مشاهده کنید:
$ git remote show origin
* remote origin
URL: https://github.com/my-org/complex-project
Fetch URL: https://github.com/my-org/complex-project
Push URL: https://github.com/my-org/complex-project
HEAD branch: master
Remote branches:
master tracked
dev-branch tracked
markdown-strip tracked
issue-43 new (next fetch will store in remotes/origin)
issue-45 new (next fetch will store in remotes/origin)
refs/remotes/origin/issue-11 stale (use 'git remote prune' to remove)
Local branches configured for 'git pull':
dev-branch merges with remote dev-branch
master merges with remote master
Local refs configured for 'git push':
dev-branch pushes to dev-branch (up to date)
markdown-strip pushes to markdown-strip (up to date)
master pushes to master (up to date)این دستور نشان می دهد که چه شاخه ای به طور خودکار فشار داده می شود زمانی که شما git push را در حالی که در شاخه های خاص اجرا می کنید.
همچنین به شما نشان می دهد که چه شاخه های از راه دور در سرور شما هنوز وجود ندارد، چه شاخه های از راه دور شما از سرور حذف شده است، و چندین شاخه محلی که قادر به ادغام به طور خودکار با شاخه های ردیابی از راه دور خود را هنگامی که شما اجرا git pull.
شما می توانید git remote rename
را اجرا کنید تا نام کوتاه یک ریموت را تغییر دهید.
به عنوان مثال، اگر می خواهید نام pb را به paul تغییر دهید، می توانید این کار را با git remote rename انجام دهید:
$ git remote rename pb paul
$ git remote
origin
paulلازم به ذکر است که این تغییر نام تمام شاخه های ردیابی از راه دور شما را نیز تغییر می دهد.
آنچه که قبلاً در pb/master به آن اشاره می شد، اکنون در paul/master است.
اگر می خواهید از راه دور برای برخی از دلایل حذف کنید - شما سرور را جابجا کرده اید یا دیگر از یک آینه خاص استفاده نمی کنید، یا شاید یک مشارکت کننده دیگر مشارکت نمی کند - شما می توانید از `git remote remove ` یا `git remote rm ` استفاده کنید:
$ git remote remove paul
$ git remote
originهنگامی که شما ارجاع به یک ریموت را از این طریق حذف می کنید، تمام شاخه های ردیابی از راه دور و تنظیمات پیکربندی مرتبط با آن ریموت نیز حذف می شوند.