برای همکاری در پروژههای گیت، دانستن شیوهٔ مدیریت مخزنهای ریموت لازم است. مخازن ریموت یک نسخه از پروژهٔ شما هستند که در اینترنت یا جایی دیگر در شبکه قرار دارند. میتوانید چند تا از آنها را داشته باشید که هر کدام یا فقط قابل خواندن یا خواندنی/نوشتی هستند. همکاری با دیگران شما را با مدیریت این مخازن و دریافت داده از آنها و انتقالداده به آنها درگیر می کند. که بتوانید کارهایتان را به اشتراک بگزارید. مدیریت مخازن ریموت به مفهوم افزودن مخازن ریموت، حذف کردن مخازن بلا استفاده، مدیریت شاخههای گوناگون و تعریف آنها به عنوان دنبال شونده با بر داشتن این تعریف و کارهای دیگر است. در این بخش ما درباره برخی از مهارتهای مدیریت-ریموت صبحت خواهیم کرد.
Note
|
مخازن ریموت میتوانند روی کامپیوتر خودتان باشند.
به سادگی امکان پذیر است که شما با مخازن |
برای دیدن سرورهای ریموت که پیکربندی شدهاند، میتوانید دستور git remote
را اجرا کنید.
این دستور نامهای کوتاه سرورهای ریموتی که شما برگزیدید را نشان خواهد داد.
اگر نسخهای از یک مخزن ریموت بردارید، باید دست کم یک origin
ببنیند. — گیت به شکل پیش فرض به سروری که با آن کار می کند این نام را می دهد:
$ 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 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)
این به معنی است ما میتوانیم مشارکتهارا از هر کاربری به راحتی پول یا دریافت کنیم. شاید ما به علاوه دسترسی برای پوش یا ارسال به یک یا بیشتر مخازن داشته باشیم که اینجا نمیتوانیم بگوییم. دقت کنید که این ریموتها از پروتکلهای متنوعی استفاده میکنند؛ ما درباره این موضوع در [_getting_gin_on_a_server] بیشتر گفتهایم.
ما پیشتر درباره چگونه دستور git clone
به طور غیر مستقیم یک ریموت origin
برای شمامیسازد.
خب حالا میگیم چطور یک مخزن ریموت جدید اضافه کنید.
برای اضافه کردن یک مخزن گیت ریموت جدید با یک نام کوتاه میتوانید به آدرس آن اشاره کنید و
تقریبا یک آلیاز از آدرس مخزن با نام کوتاه بسازید. با اجرای دستور 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
در محیط ترمینال به جای کل آدرس آن مخزن استفاده کنید.
برای مثال، اگر شما بخواهید تمام اطاعاتی که 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
پاول حالا به صورت لوکال در master/pb
قابل دسترس دسترس است — شما میتوانید این شاخه را در هر کدام از برنچهای دلخواه
ادغام کنید. یا میتوانید برنچ لوکال خود را چکاوت کنید تا اطلاعات را بازرسی کنید.
(ما درباره برنچهای و چگونگی استفاده از آنها با جزئیات بیشتر در بخش [_git_branching] گفتهایم.)
همانطور که مشاهده کردید، برای دریافت اطلاعات از پروژههای ریموت خود،میتوانید این دستور را اجرا کنید:
$ git fetch <remote>
دستور مراجعه میکند به پروژه ریموت و همهی اطلاعات آن را پول میکند. بعد از انجام این کار، شما میتوانید به همهی شاخهها از ریموت مراجعه کنید، که میتوان در هر لحظه ادغام یا مورد نمایش قرار دهید.
اگر شما یک مخزن را کلون کنید، دستور به صورت خودکار نام مخزن را تحت عنوان origin
میسازد. پس git fetch origin
تمامی کارها و
اتفاقات جدید که در آن سرور از وقتی که شما آن را کلون کردهاید(اخرید فچی که شما داشتید) دریافت میکند.
خیلی مهم است که دقت کنید که دستور git fetch
فقط اطلاعات را در مخزن لوکال شما دریافت میکند — این دستور به صورت خودکار
اطلاعات را با برنچهایی که روی آن کار میکنید یا هر برنچ دیگری ادغام نمیکند.
اگر از دستور فچ استفاده کردید باید به صورت دستی فعلا مرج یا ادغام را انجام دهید.
اگر برنچ جاری شما تنظیم شده باشد تا یک شاخه ریموت را دنبال کند (بخش بعدی و [_git_branching] را برای اطلاعات بیشتر ببینید.)،
میتوانید از دستور git pull
به صورت خودکار فعل فچ و ادغام یا مرج آن ریموت در برنچ جاری شما انجام شود.
این کار شاید برای شما خیلی راحتتر یا مورد استقبالتر باشد، و به صورت پیش فرض دستور git clone
خودکار برنچ مستر لوکال شما را برای
دنبال کردن برنچ مستر(یا هرچی که آن شاخه به صورت پیش فرض نامیده شود) ریموت تنظیم میکند.
اجرا کردن git pull
به صورت کلی تمام اطلاعات را از سروری که شما کلون اصلی را انجام دادید؛ فچ میکند و به صورت خودکار سعی میکند
به ادغام یا مرج کردن کدهای سرور در جایی که شما در حال کار کردن هستید.
زمانی که شما پروژهای دارید که میخواهید آن را به اشتراک بگذارید، شما باید آن را به آپاستریم پوش کنید.
دستور این کار خیلی ساده است: git push {remote} {branch}
.
اگر میخواهید برنچ master
را به سرور origin
پوش کنید،(یادتون باشه، اسامی که گفتیم بعد از کلون کردن به صورت اتوماتیک ساخته میشوند)
، بعد میتوانید با اجرای دستور پوش هر دستوری که کامیت کرده بودید را به سمت سرور بفرستید.
$ git push origin master
این دستور فقط زمانی کار میکند که شما مخزنی را از سمت سروری کلون کرده باشید که دسترسی نوشتن نیز داشته باشید و اگر کسی در خلال کار شما پوش نکرده باشد، چرا که وقتی شخصی دیگر از همان مخزن اطلاعات را کلون کرده باشد و پوش هم کرده باشد درخواست پوش شما رد خواهد شد، به این دلیل که اطلاعات شما باید عین چیزی باشد که بر روی سرور قرار داد یعنی باید به روز باشد پس باید اول اطلاعات سرور را فچ کنید بعد اجازه دارید اطلاعات خودتون رو به سرور پوش کنید. برای جزئیات بیشتر در این باره که چطور بر روی یک سرور ریموت پوش کنید بخش [_git_branching] را مطالعه کنید.
اگر میخواید درباره یک ریموت خاص اطلاعات بیشتری ببینید، میتوانید از دستور
git remote shot {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)
این دستور آدرس مخزن ریموت و همچنین اطلاعات برنچهایی که دنبال میشوند را لیست میکند و مفید و مختصر به شما میگوید که اگر
بر روی برنچ مستر هستید و دستور git pull
را اجرا کنید، به صورت اتوماتیک اطلاعات که دریافت میکند در برنج مستر شما مرج میکند
و همچنین لیست تمام ریموتهای منبع که از آن پول کرده است را نمایش میدهد.
این سادهترین مثالی است که شما با آن برخورد خواهید کرد.
وقتی از گیت در سطح وسیعتری استفاده کنید،احتمالا اطلاعات بیشتری با این دستور به شما نشان داده شود، git remote show
:
$ 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
یکبار که یک ریموت را به این صورت پاک کنید، تمامی برنچها و پیکیربندیهایی همراه آن وجود داشت نیز از بین خواهند رفت.