-
1. شروع به کار
- 1.1 دربارهٔ کنترل نسخه
- 1.2 تاریخچهٔ کوتاهی از گیت
- 1.3 گیت چیست؟
- 1.4 خط فرمان
- 1.5 نصب گیت
- 1.6 اولین راهاندازی گیت
- 1.7 کمک گرفتن
- 1.8 خلاصه
-
2. مقدمات گیت
- 2.1 دستیابی به یک مخزن گیت
- 2.2 ثبت تغییرات در مخزن
- 2.3 دیدن تاریخچهٔ کامیتها
- 2.4 بازگردانی کارها
- 2.5 کار با ریموتها
- 2.6 برچسبگذاری
- 2.7 نامهای مستعار در گیت
- 2.8 خلاصه
-
3. شاخهسازی در گیت
- 3.1 شاخهها در یک کلمه
- 3.2 شاخهسازی و ادغام مقدماتی
- 3.3 مدیریت شاخه
- 3.4 روند کاری شاخهسازی
- 3.5 شاخههای ریموت
- 3.6 ریبیسکردن
- 3.7 خلاصه
-
4. گیت روی سرور
- 4.1 پروتکلها
- 4.2 راهاندازی گیت در سرور
- 4.3 ساختن کلید عمومی SSH
- 4.4 نصب و راهاندازی سرور
- 4.5 دیمن گیت
- 4.6 HTTP هوشمند
- 4.7 گیتوب
- 4.8 گیتلب
- 4.9 گزینههای شخصی ثالث میزبانی شده
- 4.10 خلاصه
-
5. گیت توزیعشده
- 5.1 روندهای کاری توزیعشده
- 5.2 مشارکت در یک پروژه
- 5.3 نگهداری یک پروژه
- 5.4 خلاصه
-
6. GitHub
-
7. Git Tools
- 7.1 Revision Selection
- 7.2 Interactive Staging
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Advanced Merging
- 7.9 Rerere
- 7.10 Debugging with Git
- 7.11 Submodules
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 Summary
-
8. Customizing Git
- 8.1 Git Configuration
- 8.2 Git Attributes
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Summary
-
9. Git and Other Systems
- 9.1 Git as a Client
- 9.2 Migrating to Git
- 9.3 Summary
-
10. Git Internals
- 10.1 Plumbing and Porcelain
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Packfiles
- 10.5 The Refspec
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Summary
-
A1. پیوست A: Git in Other Environments
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Visual Studio Code
- A1.4 Git in Eclipse
- A1.5 Git in IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.6 Git in Sublime Text
- A1.7 Git in Bash
- A1.8 Git in Zsh
- A1.9 Git in PowerShell
- A1.10 Summary
-
A2. پیوست B: Embedding Git in your Applications
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. پیوست C: Git Commands
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
2.5 مقدمات گیت - کار با ریموتها
کار با ریموتها
برای اینکه بتوانید در هر پروژهٔ گیت همکاری کنید، دانستن شیوهٔ مدیریت مخزنهای ریموت لازم است. مخازن ریموت یک نسخه از پروژهٔ شما هستند که در اینترنت یا جایی دیگر در شبکه قرار دارند. میتوانید چند تا از آنها داشته باشید که معمولاً هر کدام برای شما یا فقط قابل خواندن یا خواندنی/نوشتی هستند. همکاری با دیگران شامل درگیری با مدیریت این مخازن ریموت و پوش و پول کردن داده از و به آنها به هنگام اشتراک کار است. مدیریت مخازن ریموت به مفهوم دانستن نحوه افزودن مخازن ریموت، حذف کردن ریموتهای منقضی، مدیریت شاخههای گوناگون ریموت و تعریف آنها به عنوان دنبالشده یا دنبالشنده و غیره است. در این بخش ما درباره برخی از مهارتهای مدیریت-ریموت صبحت خواهیم کرد.
یادداشت
|
مخازن ریموت میتوانند روی کامپیوتر محلی خودتان باشند.
به سادگی امکان پذیر است که شما با مخازن «remote» کار کنید که در واقع روی همان میزبانی هستند که شما هستید. واژهٔ «remote» لزوماً به معنی این نیست که مخزن دور از دسترس، روی اینترنت یا هرجای دیگری از شبکه باشد، تنها به این معنی است که مخزن جای دیگری است. کارکردن با اینگونه مخازن ریموت نیز همانند هر ریموت دیگری نیز شامل عملیاتهای پوش، پول و فچ رایج است. |
نمایش ریموتها
برای دیدن سرورهای ریموت که پیکربندی شدهاند، میتوانید دستور 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)
این به معنی است که ما میتوانیم مشارکتها را از هر کدام از این کاربرها به راحتی دریافت کنیم. شاید ما به علاوه دسترسی برای پوش به یک یا چندی از این مخازن را نیز داشته باشیم، اگرچه در اینجا نمیتوانیم به آن پی ببریم.
دقت کنید که این ریموتها از پروتکلهای متنوعی استفاده میکنند؛ ما درباره این موضوع در راهاندازی گیت در سرور بیشتر خواهیم گفت.
اضافه کردن مخازن ریموت
پیشتر ذکر کردیم و چند مثال را بررسی کردیم که چگونه دستور 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
در محیط ترمینال به جای کل آدرس آن مخزن استفاده کنید.
برای مثال، اگر بخواهید تمام اطاعاتی را که پاول دارد اما شما ندارید را فچ کنید، میتوانید دستور 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 fetch <remote>
دستور به پروژه ریموت مراجعه میکند و همهٔ اطلاعات آن پروژه ریموت را که شما ندارید را پول میکند. بعد از انجام این کار، باید رفرنسهایی به تمام برنچهای آن ریموت داشته باشید، که میتوانید آنها را در هر لحظه ادغام یا مورد نمایش قرار دهید.
اگر شما یک مخزن را کلون کنید، دستور به صورت خودکار آن مخزن را تحت عنوان «origin» اضافه میکند.
پس git fetch origin
تمامی کارها و اتفاقات جدیدی را که در آن سرور از وقتی که شما آن را کلون کردهاید (یا آخرین فچی که از آن کردید) دریافت میکند.
خیلی مهم است که دقت کنید که دستور git fetch
فقط اطلاعات را در مخزن محلی شما دانلود میکند — این دستور به صورت خودکار آن را با هیچکدام از کارهای شما ادغام یا کارهای فعلی شما را ویرایش نمیکند.
اگر برنچ جاری شما تنظیم شده باشد تا یک شاخه ریموت را دنبال کند (بخش بعدی و شاخهسازی در گیت را برای اطلاعات بیشتر ببینید)،
میتوانید از دستور git pull
استفاده کنید تا به صورت خودکار فچ و سپس ادغام آن با برنچ ریموت به برنچ فعلی شما انجام شود.
شاید این، روند کاری راحتتر یا آسانتری برای شما باشد، و به صورت پیشفرض دستور git clone
به طور خودکار برنچ master
محلی شما را برای
دنبال کردن برنچ master
(یا هر چیزی که شاخه پیش فرض نامیده شود) ریموت آن سروری که از آن کلون کردید تنظیم میکند.
اجرا کردن git pull
به صورت کلی تمام دادهها را از سروری که ابتدا از آن کلون کرده بودید فچ میکند و به صورت خودکار سعی میکند تا آنرا در کدی که اکنون روی آن کار میکنید ادغام کند.
پوش کردن به ریموتهایتان
زمانی که پروژهای دارید که در درجهای است که میخواهید آن را به اشتراک بگذارید، باید آن را به بالادست پوش کنید.
دستور این کار ساده است: git push <remote> <branch>
.
اگر میخواهید برنچ master
را به سرور origin
خود پوش کنید (مجدداً، کلون کردن هر دو این نامها را به طور اتوماتیک برای شما تنظیم میکند)،
میتوانید این دستور را اجرا کنید تا هر کامیتی که گرفتهاید را به سرور پوش کنید.
$ git push origin master
این دستور فقط زمانی کار میکند که شما مخزنی را از سروری کلون کرده باشید که دسترسی نوشتن نیز داشته باشید و کسی در این حین پوش نکرده باشد. اگر شما و شخصی دیگر در آن واحد کلون کنید و آنها به بالادست پوش کنند و سپس شما به بالادست پوش کنید، پوش شما بلافاصله رد خواهد شد. ابتدا شما کار آنها را فچ کنید و آنرا در کار خود تعبیه کنید، پیش از اینکه مجاز به پوش شوید. برای جزئیات بیشتر درباره نحوه پوش روی یک سرور ریموت بخش شاخهسازی در گیت را مطالعه کنید.
بازرسی ریموت
اگر میخواید درباره یک ریموت خاص اطلاعات بیشتری ببینید، میتوانید از دستور 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 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
یکبار که مرجع یک ریموت را به این صورت پاک کنید، تمامی برنچهای پیگیر و پیکیربندیهای مرتبط با آن ریموت نیز از بین خواهند رفت.