نکات و اصول استفاده از سورس کنترلر Git

image post

نکات و اصول استفاده از سورس کنترلر Git


1- همیشه هنگام نامگذاری انشعاب(Branch) از عناوین کوتاه و توصیفی استفاده کنید و درصورت لزوم از خط فاصله - برای جداسازی آیتم ها کمک بگیرید.
مثال: feature-logsystem, release-2.0.4a, hotfix-3.0.2-12, stable-1.0.0
 نکته: می تونید از اسلش / هم استفاده کنید اما هنگام بکار گرفتن بعضی سرویس ها(CI) و rename کردن با دردسر مواجه میشید.

2- اگر بیش از 1 نفر بر روی یک feature مشابه کار می کنند، برای تفکیک بهتر هر انشعاب باید از نام افراد در کنار نام feature مورد نظر استفاده بشه.
مثال: feature-logger-ahmad, feature-logger-ali, feature-logger-mina

3- نام انشعاب "نباید" حاوی کاراکترهای ^ .. ~ \ : باشه.

4- همیشه برای گروه بندی Branch ها از عناوین همگانی مثل develop, feature, hotfix, poc, master/mainline, junk استفاده کنید.

5- همیشه Git رو برای push کردن انشعاب جاری/current تنظیم سراسری(default) کنید. تا به اشتباه انشعاب دیگر رو برای server ارسال نکنید:
git config —global push.default current

6- دلیل خطای warning: remote HEAD refers to nonexistent ref, unable to checkout، نداشتن انشعاب master در مخزنی هست که قراره checkout ش کنید... پس باید نام یک انشعاب رو دقیقاً ذکر کنید:
 git checkout MyBranchName

7- اصولاً هر commit باید حاوی "یک تغییر منطقی" باشه. نه اینکه چند تغییر در انواع مختلف انجام بگیره و همه در یک commit ثبت بشه!

8- هر یک fix یا add یا remove یا improvment باید فقط در یک commit ثبت بشه.

9- یک تغییر منطقی یا یک feature جدید رو باید فقط در یک commit ثبت کنید.

10- طول پیامهای commit رو کوتاه و حداکثر در 50 کاراکتر در هر خط بنویسید.

11- در پیام commit از واژه های Remove, Update, Fix, Add استفاده کنید و نه Fixed Added Removed و...
مثال: Fix bug #2, Add README, Remove pom.xml, Fix #23, Fix #552

12- هنگام نوشتن پیامهای طولانی برای commit، باید عنوان پیام رو از بدنه پیام با یک پاراگراف خالی جدا کنید.

13- هنگام merge انشعاب، اگر در اون انشعاب بیشتر از یک commit وجود داره، اون رو توسط پارامتر —no-ff الحاق/merge کنید. با اینکار history انشعاب و ساختارش هم حفظ میشه:
git merge —no-ff <branch-name>
یا برای همیشه سراسری تنظیمش کنید:
git config —add merge.ff false

14- همیشه قبل از اینکه push کنید، کدها رو کامل تست کنید تا عاری از خطا و مشکل باشن!

15- توجه داشته باشید که HEAD با deattached HEAD با ORIG_HEAD متفاوته!
 درواقع HEAD یک reference ای به آخرین commit در انشعاب جاری(checkout شده) هستش. deattached HEAD یک reference ای به یک commit خاص یا Tag هستش که معمولاً هم استفاده نمیشه. و ORIG_HEAD بک آپ رفرنسی به HEAD قبل از تغییرات هستش.

16- هرگز از پروتکل HTTP استفاده نکنید! این پروتکل بخاطر برخی کمبود ها و ضعفهای امنیتی تقریباً منسوخ شده و هیچ سروری ازش استفاده نمی کنه و خود تیم Git هم ردش میکنه.

17- مطمعن بشید که name و email شما در فایل gitconfig موجود در دایرکتوری USER درج شده باشه.
برای اینکار می تونید دستورات زیر در کنسول سیستم وارد کنید:

git config —global user.name "YOUR FULL NAME"
git config —global user.email "YOUR-EMAIL-ADDRESS"

18- نکته جزیی: توسط فایل .gitignore میتونید به Git اعلام کنید که چه فایلهایی رو هنگام fetch, pull, push, commit نادیده بگیره.

19- برای حذف انشعاب های local که دیگر در remote موجود نیستند، یکی از روش های زیر رو دنبال کنید:
⚫️ یکبار دستور git config —global fetch.prune true رو در کنسول بزنید تا همیشه بصورت خودکار انجام بشه.
نکته: این قابلیت با هربار انجام fetch یا pull فعال می شه.
⚫️ یا هر زمان که لازم بود دستور git remote prune origin رو بزنید.

20- نکته جزیی: Fork همون Clone هستش، منتها بدلیل اینکه داخل سرور و بواسطه وب در اکانت شما انجام میگیره، تغییر واژه داده... درواقع با انجام Fork، یک Clone از پروژه با تمام دسترسی هاش در سرور در اختیار شما قرار میگیره. (و بنظرم بکار گیری واژه Fork اشتباست، وقتی خود Git واژه رسمی Clone رو براش درنظر گرفته!)

21- هنگام ساخت SSh key برای Git، یادتون باشه فایل id_rsa.pub، فایل کلید عمومی هست. یعنی این کلید رو در سرور/remote ای که قراره بهش متصل بشید آپلود میکنید (که به شما گفته میشه کجا و چگونه). اما فایل id_rsa، فایل کلید خصوصی هست. پس این فایل باید در کامپیوتر شما بمونه!

22- ویندوز: در صورت بروز خطای gpg: cannot open tty 'no tty': No such file or directory هنگام استفاد از برنامه Git-GUI بهمراه GPG، بدونید که TTY سیستم توسط Git-GUI اشغال شده و GPG قادر به ارسال فرمان به TTY نیست... باید از Git-BASh استفاده کنید.

23- دستور git pull در واقع ترکیبی از دستور git fetch و git merge هستش. به اینصورت که ابتدا دستور git fetch اجرا میشه، سپس رفرنس FETCH_HEAD بروز میشه و نهایتاً دستور git merge FETCH_HEAD اجرا میشه.
 نکته: FETCH_HEAD رفرنسی به آخرین انشعاب remote ای هست که fetch شده. MERGE_HEAD رفرنسی به commit/commit ها ای هستش که با انشعاب جاری(checkout شده) merge شده.

دنیس ریچی : یونیکس بسیار ساده هست، تنها یک نابغه باید باشید تا بتوانید سادگی آن را درک کنید.