<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های ایلیا لسانی</title>
        <link>https://virgool.io/feed/@iliyalesani</link>
        <description>https://winscript.ir</description>
        <language>fa</language>
        <pubDate>2026-04-15 10:32:35</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/19321/avatar/N7kHzi.png?height=120&amp;width=120</url>
            <title>ایلیا لسانی</title>
            <link>https://virgool.io/@iliyalesani</link>
        </image>

                    <item>
                <title>تنظیم GitLab برای اتصال SSH</title>
                <link>https://virgool.io/coderlife/%D8%AA%D9%86%D8%B8%DB%8C%D9%85-gitlab-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-ssh-l68uw7tv5yo6</link>
                <description>در مطالب قبلی نحوه اتصال GitHub و Azure DevOps از طریق HTTPS توضیح داده شد، در این پست قصد ایجاد کلید Public و وارد کردن آن در سایت GitLab را داریم. برای این کار نیاز به یک ترمینال خواهیم داشت. اگر هنوز سیستم گیت را نصب نکرده اید به پست زیر برای راه اندازی Git Bash مراجعه کنید: https://vrgl.ir/gExZt برنامه Git Bash را اجرا و دستور زیر را وارد کنید:$ cd ~/.ssh اگر بنا به هر دلیلی پوشه ssh در دایرکتوری کاربر شما وجود نداشت آن را با دستور زیر ایجاد کنید:$ mkdir .sshسرویس های میزبانی گیت مانند GitHub و GitLab برای اتصال SSH نیاز به id_rsa و id_rsa.pub خواهند داشت که با دستور زیر به همراه وارد کردن آدرس ایمیل ایجاد می‌شوند:$ ssh-keygen -t rsa -C &#039;foo@bar.baz&#039;با وارد کردن دستور بالا پیامی به این شکل ظاهر خواهد شد:Enter file in which to save the key (/home/demo/.ssh/id_rsa):کلید اینتر را بزنید تا فایل با نام پیش فرض ایجاد شود. سپس از شما درخواست رمز عبور خواهد شد:Enter passphrase (empty for no passphrase):انتخاب رمز عبور برای دسترسی به کلید SSH لزومی ندارد و با زدن اینتر می‌توان آن را نادیده گرفت.Enter same passphrase again:اگر رمز عبوری انتخاب کرده‌اید آن را وارد و در غیر اینصورت آن را نادیده بگیرید.فایل کلید شما ایجاد خواهد شد. دقت داشته باشید id_rsa کلید خصوصی و id_rsa.pub کلید عمومی شما می‌باشد. کلید عمومی را با ویرایشگر متن مانند VS Code باز کنید:$ code id_rsa.pubکلید عمومی شما با کلمه ssh-rsa آغاز می‌شود. تمام متن آن را کپی کرده و به لینک زیر بروید:https://gitlab.com/profile/keysنیازی به حساب جدید نخواهید داشت، می‌توانید با حساب فعلی گیت‌هاب، گوگل و ... خود وارد سایت شوید.کلید عمومی را در کادر مشخص شده وارد و سپس در کادر Title یک نام دلخواه برای کلید خود انتخاب کنید. وارد کردن تاریخ انقضا اجباری نمی‌باشد. در نهایت دکمه Add key را بزنید.برای اتصال از طریق SSH آماده هستید. کافی است به ریپو خود رفته و آن را git clone کنید.موفق باشید ?</description>
                <category>ایلیا لسانی</category>
                <author>ایلیا لسانی</author>
                <pubDate>Sat, 13 Jun 2020 20:31:12 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش مبتدی Git: بخش سوم</title>
                <link>https://virgool.io/apieco/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D8%A8%D8%AA%D8%AF%DB%8C-git-%D8%A8%D8%AE%D8%B4-%D8%B3%D9%88%D9%85-vzakpy0t12fm</link>
                <description>Pushing git to remote repositoriesبه بخش پایانی آموزش مبتدی سیستم کنترل نسخه گیت خوش آمدید. در بخش قبلی به دستورات تکمیلی کار با گیت اشاره شد که مطالعه آن پیش از یادگیری مطالب این بخش توصیه می‌شود: https://vrgl.ir/0JsOI تا به الان تمام موارد گفته شده به کار با گیت در ریپو های local که بر روی سیستم هر شخص قرار دارد مربوط بوده است. در این بخش به اشتراک گذاری ریپو ها و کار با گیت به صورت remote اشاره خواهیم کرد. نوبت اشاره به بخش سیستم های توزیع شده است. وبسایتی که در این بخش برای میزبانی ریپو گیت استفاده خواهیم کرد، گیت‌هاب می‌باشد: https://github.com/ در صورت داشتن حساب کاربری به آن وارد و در غیر این صورت یک حساب کاربری جدید ایجاد کنید.سپس از منوی سمت راست بالا برای ایجاد یک ریپو جدید اقدام کنید.نام مناسب برای ریپو انتخاب کنید. اگر چیزی به ذهنتان خطور نمی‌کند گیت نامی به شما پیشنهاد می‌دهد.به دلخواه توضیحاتی به ریپو خود اضافه کنید اما انجام این کار اجبار نمی‌باشد. گزینه های Public و Private برای مانند دسترسی محیط های اجتماعی می‌باشند. در حالت Private فقط شما و افرادی که انتخاب می‌کنید حق دیدن و ارسال کامیت به این ریپو را خواهند داشت و در مقابل آن ریپو Public به همه اجازه مشاهده ریپو شما را می‌دهد. در حال حاضر به دلایل تحریم غرب دسترسی به ریپو Private ممکن نمی‌باشد و فعلا راه حل مناسب برای ریپو های خصوصی استفاده از میزبان دیگری مانند مایکروسافت آژور دوواپس (Azure DevOps) و گیت‌لب (GitLab) است که در این مطلب به مایکروسافت آژور و در مطالب بعدی به گیت‌لب اشاره خواهیم کرد. فعلا با هدف یادگیری یک ریپو عمومی (Public) در گیت‌هاب ایجاد کنید.و در این بخش حق انتخاب ایجاد فایل readme.md برای ارائه توضیحات، فایل gitignore برای چشم پوشی از فایل های دیگر و در نهایت مجوز نحوه استفاده از پروژه خود خواهید داشت.روش های زیادی برای اتصال به ریپو میزبانی شده وجود دارد که اتصال SSH بیشترین امنیت را به ما ارائه می‌دهد اما صرفا برای سادگی از HTTPS استفاده خواهیم کرد. آدرس گیت ریپو خود را کپی کنید. به فرآیند راه اندازی ریپو در سیستم شخصی clone کردن می‌گویند که با دستور زیر ممکن است:$ git clone &lt;URL&gt;هنگام clone کردن می‌توانید نام کاربری و رمز عبور خود را همراه نشانی ریپو وارد کنید. برای مثال:$ git clone https://&lt;USERNAME&gt;@github.com/username/repository.gitبعد از وارد کردن نام کاربری، گیت‌هاب از شما درخواست خواهد کرد تا رمز عبور خود را وارد کنید.یک پوشه ایجاد کرده و درون آن ریپوی خود را clone کنید. زمانی که پروژه گیت clone می‌شود به وجود origin پی خواهید برد. گفتیم که گیت یک سیستم توزیع شده است و دسترسی به آن در یک سرور متمرکز نیست. زمانی که remote به سیستم شما اضافه می‌شود در واقع یک branch برای master در گیت local و یک branch به نام origin/master متعلق به remote دارید.https://git-scm.com/book/en/v2/Git-Branching-Remote-Branchesبرای مشاهده آدرس origin از دستور زیر استفاده کنید:$ git remote -vتغییری در ریپو ایجاد و آن را ثبت کنید. کامیت شما فقط به ریپو local اضافه خواهد شد. همانطور که در بالا مشاهده می‌کنید دو آدرس برای fetch و push وجود دارد. دستور fetch برای فراخوانی آخرین تغییرات شاخه origin و دستور push برای ارسال تغییرات به remote کاربرد دارند:$ git fetchو$ git pushاگر هنگام clone اطلاعات ورود خود را وارد نکرده‌اید، گیت‌هاب از شما درخواست وارد کردن آن خواهد کرد.کامیت ریپو local با موفقیت در ریپو remote ثبت گردیده است. برای واکشی تغییرات، افراد تیم شما می‌توانند از دستور pull استفاده کنند:$ git pull? دستور pull همزمان fetch را هم انجام می‌دهد. دستور fetch فقط تغییرات ریپو remote را فراخوانی می‌کند اما کامیت آن را به تاریخچه local اضافه نمی‌کند. برای اعمال تغییرات fetch باید عمل merge همراه با شاخه معادل local صورت گیرد. برای مثال برای شاخه master تغییرات remote اینگونه اعمال می‌شوند:$ git merge origin/master دستور pull تغییرات fetch را در ریپو local علاوه بر remote اعمال کرده و خودکار یک merge انجام می‌دهد.Ubuntu.exe ? توجه داشته باشید که دستور push بطور پیش فرض فقط برای شاخه master تغییرات را ارسال می‌کند.اگر شاخه ای ایجاد و تغییرات آن را push کنید با خطا مواجه خواهید شد. باید خود شاخه هم ارسال کنید:$ git push -u origin &lt;BRANCH&gt;معادل شاخه ارسال شده در remote ایجاد شد. این شاخه در سایت گیت‌هاب هم قابل مشاهده است.با تغییر شاخه می‌توان ساختار هر کدام را مشاهده کرد.اما دقت داشته باشید که شاخه های جدید مستقیما به ریپو local دیگران اضافه نخواهد شد.ریپو شمادیگران پس از pull کردن شاخه ها، نتیجه متفاوتی در فهرست شاخه ها خواهند داشت.ریپو بقیهبرای انتقال شاخه از remote به local تنها کافی است عمل checkout صورت گیرد که شاخه ای با همان تغییرات در local ساخته خواهد شد:$ git checkout &lt;BRANCH&gt;ریپو گیت تنها محدود به یک میزبان نمی‌باشد و می‌توان remote های بیشتری به آن متصل کرد:$ git remote add &lt;NAME&gt; &lt;URL&gt;و فهرست remote ها با همین دستور قابل مشاهده است:$ git remoteبرای مثال به سایت آژور مراجعه کرده و با اکانت مایکروسافت خود وارد شوید (یا یک حساب جدید ایجاد کنید): https://dev.azure.com/ هنگام وارد شدن از شما نام Organization درخواست می‌شود که برای دسترسی به آژور شما به کار می‌رود.سپس با صفحه ساخت پروژه مواجه خواهید شد.ترجیحا نام ریپو خود را با بقیه ریپو ها یکسان بزارید تا سردرگم نشوید. این بار برخلاف گیت‌هاب استفاده از ریپو خصوصی (Private) مانعی ندارد.از بخش Repos گزینه Files را انتخاب و لینک گیت را کپی کنید. توجه داشته باشید که نام origin را به گیت‌هاب تعلق داده‌اید. نام دیگری برای آن انتخاب کنید.پس از اضافه کردن remote جدید اطلاعات حساب کاربری مایکروسافت شما درخواست می‌شودحساب خود را وارد کرده و remote دیگری به ریپو شما اضافه خواهد شد.با موفقیت فایل های ریپو شما و شاخه های آن به مایکروسافت آژور اضافه گردید.در این بخش نحوه clone کردن ریپو remote از گیت‌هاب و نحوه push کردن ریپو local موجود (existing) به سرور آژور بررسی شد. اگر تمام بخش های این آموزش را مطالعه کرده‌اید با ذکر خسته نباشید، شما به مباحث مورد نیاز برای شروع کار با گیت مسلط هستید. تبریک ?برای دیدن مطالب بیشتر از بنده ممنون می‌شوم من را دنبال کنید. موفق و سربلند باشید ?</description>
                <category>ایلیا لسانی</category>
                <author>ایلیا لسانی</author>
                <pubDate>Wed, 10 Jun 2020 21:50:35 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش مبتدی Git: بخش دوم</title>
                <link>https://virgool.io/coderlife/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D8%A8%D8%AA%D8%AF%DB%8C-git-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-ypyydbhlkbr5</link>
                <description>Tracking changes in Gitاین پست ادامه مطلب دیگری است که مطالعه آن به دانش بخش قبلی نیاز دارد: https://vrgl.ir/TatUg مقدمهدر سیستم کنترل گیت بازگردانی محتویات فایل در چند مقطع امکان پذیر است:هنگام انجام تغییرات (Working)هنگام ردیابی کردن تغییرات (Staging)هنگام ثبت تغییرات در تاریخچه (Committing)در بخش قبلی مورد سوم یعنی بازگردانی تغییرات کامیت شده را بررسی کردیم. در این بخش علاوه بر کامیت ها تغییرات ثبت نشده را هم بررسی خواهیم کرد. ترمینال گیت را اجرا و با یک پروژه جدید آغاز می‌کنیم:در مسیر دلخواه یک دایرکتوری ایجاد کرده و به داخل آن می‌رویم. این بار ابتدا چندین فایل آماده را به پروژه اضافه کرده و سپس گیت را فراخوانی می‌کنیم:$ touch file.txt readme.mdمرسوم است فایل readme با پسوند md در ریشه دایرکتوری گیت ایجاد شود تا توضیحات در آن ارائه گردد.گیت را فراخوانی کرده و فایل های موجود را در آن ثبت می‌کنیم. کامیت Initial commit اولین نقطه قابل بازگشت پروژه ما است که هیچ محتوایی درون file.txt و readme.md قرار ندارد. می‌خواهیم مقاطع مختلف بازرگردانی را بررسی کنیم.بازگردانیمقطع Working directoryاین مقطع زمانی است که تغییراتی در فایل ها ایجاد و آن ها را ذخیره می‌کنیم اما در گیت اضافه نمی‌کنیم. می‌توان با دستور echo بدون باز کردن فایل، به آن متنی اضافه کرد:$ echo &#039;Hello, World!&#039; &gt;&gt; file.txtمتن جدید به فایل اضافه شده‌ است اما برفرض این کار به اشتباه انجام شده و می‌خواهیم آن را لغو کنیم. دقت داشته باشید این تغییر حتی به Stage هم اضافه نشده است. دستور زیر را استفاده می‌کنیم:$ git checkout -- file.txtتا به الان از دستور checkout برای ایجاد و تغییر شاخه ها استفاده می‌کردیم اما اینبار با نوشتن دو خط تیره و سپس نام فایل می‌توانیم تغییرات Stage نشده را لغو کنیم.تغییرات اعمال شده بر روی file.txt لغو شده و در نتیجه به حالت کامیت Initial بازگشتیم.مقطع Staging areaمتن جدیدی همزمان به جفت فایل پروژه با دستور زیر اضافه می‌کنیم:$ echo &#039;this file is not empty&#039; | tee file.txt readme.txtتغییرات را به مرحله Stage می‌بریم. در این مرحله برحسب فرض از آماده کردن فایل ها برای کامیت پشیمان شدیم. با دستور reset می‌توانیم فایل ها را از مقطع Stage به Working directory بازگردانیم:$ git reset HEADتوجه داشته باشید اگر فقط یک فایل را می‌خواهید بازگردانید کافی است نام آن را روبروی HEAD بنویسید.حال می‌توان مانند مقطع قبلی تغییرات Stage نشده را این بار برای هر دو فایل لغو کرد:$ git checkout -- .با موفقیت به مقطع Initial commit بازگشتیم.مقطع Repositoryاین نوع بازگردانی را در بخش اول با دستور checkout انجام داده‌ایم. این بار روش دیگری را بررسی می‌کنیم.$ echo &#039;Adding more new stuff&#039; | tee file.txt readme.md &gt; /dev/nullدستور بالا مانند قبل متن جدیدی را به چند فایل اضافه می‌کند با این تفاوت که آن را دوباره چاپ نمی‌کند.تغییرات را Stage و سپس Commit می‌کنیم. برحسب فرض این تغییرات به اشتباه صورت گرفته است. این دستور تغییرات کامیت با مشخصه SHA-1 وارد شده را لغو کرده و محتوای فایل را بازمی‌گرداند:$ git revert &lt;SHA&gt;ویرایشگر تعریف شده در گیت (پیش فرض Vim) باز شده و به ترتیب:نام کامیت جدید برای ثبتمشخصه کامیت برگشت داده شدهراهنمای ثبت کامیتشاخه در حال تغییرلیست تغییراترا ارائه می‌دهد. آن را ذخیره کرده و پس از خروج از ویرایشگر تغییرات به عنوان کامیت ثبت خواهد شد. برای ذخیره و خروج از ویرایشگر پیش فرض Vim ابتدا کلید ESC و سپس دستور زیر را بنویسید::xتغییرات کامیت شده با موفقیت لغو شدند.ویرایشاز دیگر قابلیت های گیت می‌توان به ویرایش کامیت ها اشاره کرد. فایل جدیدی ایجاد و آن را کامیت می‌کنیم.بطور مثال پرونده جدیدی با پسوند rtf ایجاد کردیم اما به اشتباه آن را با پسوند docx کامیت کردیم. دستور:$ git commit --amendآخرین کامیت را برای تغییر در ویرایشگر پیش فرض باز می‌کند.تغییرات لازم را ایجاد و از ویرایشگر خارج می‌شویم. در ویرایشگر vim کلید i به حالت تایپ رفته و پس از پایان کلید ESC و سپس با کاراکتر : و به دنبال آن حرف x از ویرایشگر با ذخیره تغییرات خارج می‌شویم.نام و مشخصه کامیت با موفقیت تغییر می‌کند.حالات دیگربازگردانی تغییرات با دستور reset فقط به Stage محدود نمی‌شود و کاربرد های دیگری هم دارد:$ git reset --&lt;MODE&gt; &lt;SHA&gt;سه حالت برای سویچ reset ممکن است:نرم یا softسخت یا hardترکیبی یا mixed (پیش فرض)در حالت نرم اشاره گر HEAD به مشخصه کامیت وارد شده تغییر و فهرست Stage تغییرات انجام شده پس از ریسِت کامیت را شامل می‌شود. با ثبت دستور git commit دوباره به کامیتی که از آن بازگشتیم، باز خواهیم گشت. در حالت ترکیبی اشاره گر HEAD به کامیت مشخص شده حرکت می‌کند و تنها تغییرات آن کامیت را در فهرست Stage شامل می‌شود و تمام تغییرات پس از آن در Working directory بصورت Untracked هستند. در حالت سخت اشاره گر به کامیت مشخص شده حرکت کرده اما تغییراتی که ثبت نشده‌اند و تغییرات کامیت های پس از کامیتی که اشاره گر به آن اشاره می‌کند از بین خواهند رفت. برای مثال:$ git reset --hard &lt;SHA&gt;پروژه ما شامل لیستی از تغییرات و کامیت ها می‌باشد. پس از ریست سخت به Initial commit تمام فایل ها و تغییرات و حتی تاریخچه کامیت ها از بین خواهند رفت.حالت soft بیشترین کاربرد و حالت hard بیشترین خطر از دست رفتن تاریخچه را دارد.چشم پوشیگاهی اوقات فایل هایی هستند که نمی‌خواهیم در گیت ثبت شوند. ممکن است فایل یا فولدر یا حتی مجموعه ای از فایل ها با پسوند مشخصی باشند. این روش برای جلوگیری از اضافه کردن فایل حجیم یا محرمانه است.چندین فایل جدید برای آزمایش تولید می‌کنیم:$ touch 1.tmp 2.tmp 3.tmp password.txt crashlog.mdmp need.extاز بین تمام این فایل ها برفرض فقط به need.ext در گیت نیاز خواهیم داشت. یک پوشه هم ایجاد می‌کنیم:$ mkdir folder &amp;&amp; touch folder/secret.fileبرای چشم پوشی کردن در گیت باید یک فایل تحت نام gitignore ایجاد کنیم:$ touch .gitignoreآن را با یک ویرایشگر متن باز می‌کنیم:$ code .gitignoreبرای چشم پوشی کردن از یک دایرکتوری و تمام محتویات داخل آن کافی است نام آن را بنویسیم:اگر یک status دیگر بگیریم متوجه تغییر خواهیم شد.گیت به folder دیگر اهمیتی نمی‌دهد. فرآیند افزودن فایل هم مانند دایرکتوری است.از کاراکتر # برای افزودن کامنت یا توضیحات استفاده می‌شود و تاثیری در نحوه عملکرد گیت ندارد.کاراکتر * به معنای همه می‌باشد. در اینجا تمام فایل ها با پسوند tmp و تمام پسوند ها با نام crashlog از دید گیت چشم پوشی و به ریپو اضافه نمی‌شوند. مرسوم است فایل gitignore جداگانه کامیت شود.و در آخر بر حسب فرض فایل need.ext که تنها فایل مورد نیاز ما بود را کامیت خواهیم کرد. دقت داشته باشید gitignore تغییری در فایل ایجاد نمی‌کند بلکه تنها آن را در ساختار ریپو نادیده می‌گیرد.کاراکتر ! برای مشخص کردن استثنا به کار می‌رود. در اینجا یعنی همه پسوند های tmp به غیر از عنوان 2.قالب های زیادی برای gitignore وجود دارد و بر اساس کاربرد خود مانند زبان برنامه نویسی یا محیط توسعه یکپارچه (مانند Visual Studio) می‌توانید قالبی برای پروژه خود در این ریپو پیدا کنید: https://github.com/github/gitignore تاریخچهبا دستور log در بخش اول آشنا شدیم و گفتیم که اگر روبروی آن عددی بنویسیم به تعداد آن عدد تاریخچه ما محدود می‌شود. در این بخش چند سویچ دیگر را مشاهده خواهیم کرد. سویچ since برای نمایش تاریخچه از تاریخ مشخصی مانند سه روز پیش یا دیروز یا یک ساعت پیش و این چنین به کار می‌رود:$ git log --since=&#039;yesterday&#039;یا$ git log --since=&#039;1 hour ago&#039;سویچ دیگر until است که همراه since کاربرد دارد. مثلا از ساعت 12 تا ساعت مشخصی:$ git log --since=&#039;12:00&#039; --until=&#039;16:45:30&#039;سویچ پر کاربرد دیگری مشخصات فرد ثبت کننده کامیت است:$ git log --author=&#039;foo&#039;یا$ git log --author=&#039;foo@bar.baz&#039;همچنین راهی برای فیلتر کردن نام کامیت ها با استفاده از سویچ grep وجود دارد:$ git log --grep=&#039;Create&#039;دستور دیگری برای مشاهده تغییرات اعمال شده در کامیت مشخص وجود دارد:$ git log -p &lt;HASH&gt;اگر تغییرات بین چندین فایل است می‌توانیم نام فایل مشخصی را به آن ارائه دهیم، برای مثال:$ git log -p 861894c file.txtمی‌توان تاریخچه را با جزئیات بیشتری نیز مشاهده کرد:$ git log --statو$ git log --summaryکه در صورت ادغام این دو سویچ می‌توان بیشترین جزئیات را برای هر کامیت در تاریخچه مشاهده کرد. حتی می‌توان تمام سویچ های گفته شده را در کنار هم به کار برد:$ git log --since=&#039;3 days ago&#039; --until=&#039;yesterday&#039; --author=&#039;foobar&#039; --grep=&#039;file.txt&#039; --oneline -5فهرست 5 کامیت آخری که از 3 روز پیش تا دیروز توسط foobar شامل file.txt ثبت شده را خطی نمایش بده!برای مشاهده تمام قابلیت های git log به مستندات رسمی گیت مراجعه کنید: https://git-scm.com/docs/git-log شاخه بندیگاهی لازم است که تغییرات جدیدی به پروژه خود اضافه کنیم بدون آنکه اشتباهی در اسناد مهم خود مرتکب شویم. گاهی اوقات هم در یک تیم بر روی بخش های مختلف یک فایل کار می‌کنیم و تغییرات هر شخص ممکن است باعث از بین رفتن یا عملکرد نادرست تغییرات افراد دیگری شود. برای رفع این مشکل و اضافه کردن مجموعه تغییرات جدید، شاخه های جدیدی در کنار شاخه master ایجاد کرده و در پایان ادغام می‌کنیم. در بخش اول با دستور branch آشنا شدیم که فهرستی از شاخه های موجود ارائه می‌کند. کافی است روبروی دستور branch از یک نام دلخواه استفاده کنیم تا آن شاخه ایجاد شود:$ git branch &lt;NAME&gt;در صورت نیاز برای پاک کردن شاخه:$ git branch -d &lt;NAME&gt;و پاک کردن شاخه ای که شامل تغییرات ادغام نشده است:$ git branch -D &lt;NAME&gt;و برای رفتن به شاخه جدید ایجاد شده:$ git checkout &lt;NAME&gt;برای تسریع عمل ایجاد و رفتن به شاخه جدید از دستور دیگری می‌توان استفاده کرد:$ git checkout -b &lt;NAME&gt;شاخه ای جدید ایجاد و به دلخواه تغییراتی در آن اعمال و ثبت می‌کنیم. به یاد داشته باشید می‌توانید نام شاخه فعلی را تغییر دهید:$ git branch -m &lt;NAME&gt;این تغییر در تاریخچه به همراه شاخه ای که به آن تعلق دارد ثبت می‌گردد. اما این تاریخچه اختصاصی است!عملیاتی که در شاخه ای صورت گرفته است در دیگر شاخه ها تداخلی ایجاد نمی‌کند. برای مشاهده تفاوت بین دو شاخه از این دستور استفاده کنید:$ git diff master..&lt;BRANCH&gt;نوبت ادغام رسیده است. در بخش اول عمل merge را اینگونه انجام داده‌ایم:$ git merge &lt;BRANCH&gt;به این حالت fast-forward گفته می‌شود که تمام کامیت های شاخه مورد نظر را ادغام می‌کند. حالت دیگر:$ git merge &lt;BRANCH&gt; --no-ffحالت عادی merge برای زمانی استفاده می‌شود که محتوای گیت تغییر کرده و آن تغییرات از master جلوتر است اما در حالت بدون fast-forward زمانی کاربرد دارد که ساختار گیت در دو شاخه متفاوت باشد. این دستور مانند یک کامیت ثبت شده و نیاز به توضیحات دارد.حالت سریعتر برای نوشتن پیام کامیت fast-forward این گونه است:$ git merge &lt;BRANCH&gt; --no-ff --message=&#039;&lt;DESC&gt;&#039; همچنین می‌توان هنگام مشاهده تاریخچه، تغییر شاخه را بصورت گراف مشاهده کرد:$ git log --oneline --graphاحتمال دارد هنگام merge کردن با مشکل تعارض (conflict) برخورد کنید. در این صورت مانند بخش قبل با ویرایشگر متن فایل های مورد تعارض را تغییر داده و آن را دوباره Stage و کامیت کنید.انباشتنهرزگاهی نیاز است هنگام اعمال تغییرات به ریپوی گیت، شاخه جدیدی ایجاد کرد. در صورت داشتن تغییرات کامیت نشده در Staging area موقع ایجاد شاخه جدید، فهرست تغییرات Stage به شاخه ساخته شده انتقال پیدا می‌کند که می‌تواند اثر مخربی داشته باشد. راهکار گیت برای تغییراتی که آماده کامیت نیستند اما باید کنار گذاشته شوند دستور stash است که تغییرات را انبار می‌کند.تغییراتی اعمال می‌کنیم. برای انبار کردن آن از دستور زیر استفاده می‌کنیم:$ git stash save &#039;&lt;DESC&gt;&#039;برای مشاهده فهرست ذخایر انبار از این دستور استفاده می‌کنیم:$ git stash listو برای مشاهده تغییرات انباشته شده هر مشخصه در فهرست:$ git stash show &lt;STASH_ID&gt;برای فراخوانی آخرین تغییرات انباشته شده را با دستور زیر برمی‌گردانیم:$ git stash popیا با استفاده از مشخصه آن، دستور زیر را به کار می‌بریم:$ git stash pop &lt;STASH_ID&gt;دستور pop تغییر انبار شده را فراخوانی و آن را از انبار پاک می‌کند. شاید بخواهیم چندین بار از تغییر انبار شده در آینده استفاده کنیم بدون آنکه از انبار پاک شود، در چنین شرایطی به جای pop از apply استفاده می‌کنیم:$ git stash apply &lt;STASH_ID&gt;در صورت نیاز برای لغو تغییرات انبار شده از این دستور استفاده می‌کنیم:$ git stash drop &lt;STASH_ID&gt;اگر انبار تغییراتی زیادی را ذخیره کرده باشد اما به هیچکدام از آن ها نیاز نداشته باشیم این دستور جایز است:$ git stash clearدر بخش بعدی کار با گیت بصورت remote و مطالب مربوط به همکاری تیمی گفته خواهد شد: https://vrgl.ir/WnfSe  موفق باشید ?</description>
                <category>ایلیا لسانی</category>
                <author>ایلیا لسانی</author>
                <pubDate>Tue, 09 Jun 2020 21:16:40 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش مبتدی Git: بخش اول</title>
                <link>https://virgool.io/wptips/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D8%A8%D8%AA%D8%AF%DB%8C-git-%D8%A8%D8%AE%D8%B4-%D8%A7%D9%88%D9%84-pphgrzpkrd0j</link>
                <description>Distributed version-control systemدر این مطلب قصد دارم نحوه کار با گیت را به شما توضیح بدهم. پیش نیاز این مبحث مطلب زیر ‌می‌باشد: https://vrgl.ir/gExZt مفاهیمهمانطور که در پست قبلی اشاره کردم:&quot;گیت یک سیستم کنترل نسخه برای نظارت بر روی تغییرات اعمال شده در طول توسعه نرم افزار می‌باشد.&quot;ابتدا با مفهوم کنترل نسخه (Version Control) آشنا خواهیم شد. وظیفه کنترل نسخه ثبت تغییرات و ارائه تاریخچه ای از آن ها است. به شرح تصویر برای جلوگیری از چنین کاری:کنترل نسخه دستی =))اما ویژگی بسیار مهم گیت امکان کار گروهی می‌باشد و می‌توانید ببینید چه تغییراتی توسط چه شخصی در چه زمانی صورت گرفته است. احتمالا قبل از گیت برای کار تیمی از طریق فلش یا آپلود و دانلود کردن فایل جا به جا می‌کردید که شیوه قابل اطمینانی نیست. کنترل های نسخه دو دسته هستند: متمرکز (Centralized) و توزیع (Distributed) شده. در نوع متمرکز فایل های پروژه و تاریخچه آن بر روی سرور مرکزی نگهداری شده و سیستم ها با اتصال به سرور به داده ها دسترسی پیدا می‌کنند. ایراد اصلی این نوع کنترل نسخه غیر قابل اعتماد بودن آن است زیرا در صورت اختلال در اتصال به سرور یا قطعی سرور مرکزی، تاریخچه و دیگر ویژگی های کنترل نسخه از دسترس خارج خواهد شد. برای حل این مشکل، کنترل نسخه توزیع شده به میان آمد که فایل های پروژه و تاریخچه آن علاوه بر سرور، بر روی کلاینت کاربر هم قابل دسترس است. با این توضیحات، گیت یک سیستم کنترل نسخه توزیع شده است که از ویژگی های آن می‌توان به موارد زیر اشاره کرد:سریع و کم حجمشاخه بندیتاریخچه عملیاتبازگردانی تغییراتمقایسه تغییرات?مباحث این مطلب در محیط خط فرمان Git Bash توضیح داده شده‌اند اما در نرم افزار های دیگر هم قابل استفاده هستند.git-bash.exeتنظیماتسیستم گیت مانند هر نرم افزار دیگری دارای تنظیمات مختص به خود می‌باشد. تنظیمات آن به سه بخش تقسیم می‌شود:تنظیم مجزا برای هر پروژه (Local)تنظیم کلی برای تمام پروژه های کاربر فعلی (Global)تنظیم کلی برای تمام پروژه های کاربران سیستم عامل (System)یک بار تنظیم Global اکثر نیاز های شما را پاسخ می‌دهد. این تنظیمات در یک فایل کانفیگ با نام .gitconfig در دایرکتوری یوزر شما (C:\Users\&lt;Username&gt;\.gitconfig) ذخیره می‌شوند. این فایل از ترمینال Git Bash با این دستور قابل دسترس است:$ git config --global --editاگر در صورت نوشتن این دستور با محیط ترمینال وحشتناکی مواجه شدید حتما دارید از Vim استفاده می‌کنید:؟?؟نگران نباشید برای خروج از Vim متن زیر را تایپ و کلید اینتر را بزنید::qa!توصیه می‌شود در صورت نصب بودن از Visual Studio Code استفاده کنید:$ code .gitconfigتغییرات اعمال شده در تاریخچه گیت شامل نام و آدرس ایمیل کاربر هستند. برای تعریف نام:$ git config --global user.name &#039;foo bar&#039;و برای تعریف ایمیل:$ git config --global user.email &#039;foo@bar.baz&#039;کانفیگ گلوبال در git bashحال اگر دوباره به gitconfig نگاه کنید شاهد ذخیره شدن این تغییرات خواهید بودcode .gitconfigبرای مشاهده تمام تنظیمات اعمال شده:$ git config --listتنظیم Local هم شبیه به Global است با این تفاوت که gitconfig فقط config نامیده شده و داخل پوشه مخفی git در هر پروژه قرار دارد. نوشتن دستور git config بدون --global بصورت local اعمال می‌شود.ایجادمی‌خواهیم با دستورات یونیکس پوشه ای ایجاد کرده و درون آن یک سیستم گیت راه اندازی کنیم. خوب است که هرزگاهی صفحه ترمینال را تمیز کنیم:$ clearبصورت پیش فرض Git Bash در دایرکتوری کاربر یعنی C:\Users اجرا می‌شود که در یونیکس معادل ~ است. برای رفتن به دسکتاپ می‌توان از دستور Change Directory استفاده کرد:$ cd ~/Desktopمی‌خواهیم با دستور Make Directory پوشه ای بر روی صفحه دسکتاپ ایجاد کرده و به درون آن برویم:$ mkdir myGitو برای رفتن به داخل آن:$ cd myGitدر صورت نیاز برای خارج شدن از یک فولدر کافی است روبروی دستور cd از دو کاراکتر نقطه استفاده کنید. همچنین می‌توان از دستور Print Working Directory از دایکرتوری فعلی اطمینان حاصل کرد:$ pwdایجاد فولدر بر روی دسکتاپ و باز کردن آنبه پروژه هایی که توسط گیت مدیریت می‌شوند اصطلاحا ریپو (ابتدای کلمه Repository) گفته می‌شود. برای ایجاد یک repo خالی کافی است از دستور زیر استفاده کنیم:$ git initاین دستور یک پوشه مخفی git درون دایکرتوری فعلی ایجاد می‌کند. با دستور List Structure دیده می‌شود:$ ls -a.gitتا اینجای کار یک ریپو ایجاد کردیم. ریپوی گیت برای ارائه کنترل نسخه نیاز به محتوا برای کار کردن دارد پس:$ touch note.txtاین دستور یک فایل متنی با نام note و پسوند txt در مسیر جاری ایجاد می‌کند. (برای حذف هم دستور rm). این فایل در حال حاضر خالی است و محتوایی برای نمایش ندارد اما در هر صورت می‌خواهیم ایجاد شدن آن را در تاریخچه گیت ثبت کنیم. تمام فایل هایی که در ریپوی گیت ایجاد می‌شوند Untracked هستند به این معنا که گیت هیچ تعاملی با آن ها ندارد. چطور می‌توان از وضعیت هر فایل در گیت خبردار شد؟ با دستور:$ git statusایجاد فایل و بررسی وضعیت آنبه متن قرمز رنگ دقت کنید، اسامی فایل های Untracked در اینجا نمایان می‌شوند. قبل از ثبت شدن فایل ها به تاریخچه گیت، فایل ها باید آماده ثبت شوند که به آن Stage کردن می‌گویند:$ git add note.txtآوردن فایل به Stageوضعیت فایل از Untracked تغییر کرده و به رنگ سبز در آمده است. حال فایل Stage شده آماده ثبت در تاریخچه گیت می‌باشد که به آن Commit گفته می‌شود. عمل Commit نیازمند ارائه توضیحاتی در مورد تغییرات رخ داده در ریپو است که بطور متداول ابتدای آن با فعل امری از عمل رخ داده نوشته می‌شود:$ git commit -m &amp;quotCreate note.txt&amp;quotاولین کامیت به گیت ارسال شده است و در آینده می‌توان وضعیت فایل را به وضعیت کامیت های ثبت شده بازگرداند. این نکته را هم به یاد داشته باشید که مرسوم است متن اولین کامیت &quot;Initial commit&quot; ثبت شود. برای مشاهده کامیت های ثبت شده در ریپو از دستور زیر استفاده کنید:$ git logدستور log اطلاعاتی همچون مشخصه کامیت به همراه شاخه متعلق به آن، نام و آدرس ایمیل فرد ثبت کننده، تاریخ دقیق و جزئیات کامیت را چاپ می‌کند. مشخصه های کامیت با الگوریتم رمزنگاری SHA-1 تولید و Hash می‌شوند. مشاهده log مرتب و خطی نیز بدین صورت است:$ git log --onelineدو نوع نمایش git logتصویر زیر نحوه ثبت شدن فایل در ریپو را شرح می‌دهد، آن را به خاطر بسپارید:How git worksدر ادامه برای مرور می‌خواهیم چندین فایل جدید به ریپو اضافه کنیم:$ touch file1 file2 file3لزوما نیازی نیست فایل ها پسوندی داشته باشند. همچنین لزومی هم ندارد خودمان فایل ها را ایجاد کنیم، می‌توانیم فایل های موجود در سیستم را به پوشه ریپو کپی کنیم.ایجاد چندین فایلفایل های جدید در حالت Untracked قرار گرفتند. می‌توان تمام تغییرات را همزمان به Staging اضافه کرد:$ git add .در صورت منصرف شدن از Stage کردن:$ git restore --staged .و مانند قبل برای کامیت فایل های Stage شده:$ git commit -m &amp;quotAdd multiple files&amp;quotکامیت چندین فایلکامیت ها دنباله ای از لیست های پیوندی هستند که علاوه بر تغییرات فعلی، کامیت های قبل خود را نیز شامل می‌شوند. کامیت ها فقط می‌توانند یک والد (Parent) داشته باشند مگر اینکه از دو شاخه (Branch) ادغام (Merge) شده باشند.لیست پیوندیحذفحذف یک یا چند فایل از ریپو نیز با کامیت یک مجزا امکان پذیر است. در حالاتی که می‌خواهید تمام فایل ها را با git add به stage برده و آن ها را کامیت کنید، این دستور جایگزین سریعتری است:$ git commit -am &amp;quotRemove file&amp;quotاما استفاده از این نوع کامیت دقت کار را کاهش داده و از همین رو استفاده از آن پیشنهاد نمی‌شود.(git add + git commit)کنترل نسخه گیت فقط به حذف و اضافه پرونده ها محدود نمی‌شود بلکه محتویات درون آن ها را هم نظارت می‌کند که در ادامه خواهیم دید.تغییرمی‌خواهیم تغییری در یکی از فایل ها ایجاد کرده و آن را به تاریخچه گیت اضافه کنیم. یکی از خصوصیات برنامه Visual Studio Code تشخیص خودکار ریپو و باز کردن آن بصورت Workspace می‌باشد. کافی است داخل دایرکتوری ریپو دستور زیر را بنویسیم:$ code .یکی از فایل های Workspace باز شده را از پنل Explorer سمت چپ باز کرده و متنی داخل آن می‌نویسیم. فایل را با کلید میانبر Ctrl + S ذخیره می‌کنیم. نوشتن متن در note.txt و ذخیره آنسپس دوباره به ترمینال Git Bash رفته و status می‌گیریم:بررسی تغییراتهمانطور که مشاهده می‌کنید دیگر متن Untracked نمایان نمی‌شود زیرا گیت در حال Track کردن تغییرات آن است و متن not staged در اینجا دیده می‌شود. این بدان معناست که گیت بر روی این فایل نظارت دارد و تغییرات آن را با متن قرمز رنگ modified اعلام می‌کند. مانند قبل برای ثبت تغییرات:$ git add note.txtسعی کنید برای کامیت پیامی بنویسید که حداقل برای خودتان و در پروژه های تیمی برای همه واضح باشد:$ git commit -m &amp;quotUpdate note.txt with greetings&amp;quot?دستورات گیت در ترمینال Microsoft Visual Studio Code نیز قابل اجرا هستند: Ctrl + Shift + `می‌خواهیم با یکی دیگر از دستورات مفید گیت آشنا شویم. تغییرات بیشتری داخل note.txt ایجاد می‌کنیم:چند خط به note.txt اضافه کردیمبرای اینکه از جرئیات تغییرات اعمال شده مطلع شویم کافی است دستور زیر را بنویسیم:$ git diffتغییرات فایل note.txtتغییرات قبل و بعد نمایش داده می‌شود. دقت کنید تغییرات note.txt در Stage قرار نگرفته‌اند. پس از اضافه کردن فایل به Stage اگر از دستور git diff استفاده کنیم با همچین رخدادی روبرو خواهیم شد:تغییر بی تغییر؟باید برای مشاهده جزئیات تغییرات فایل های Stage شده از دستور زیر استفاده کنیم:$ git diff --stagedپس از مطمئن شدن از تغییرات آن ها را کامیت می‌کنیم:$ git commit -m &amp;quotAdd new lines to note.txt&amp;quotاز دیگر مشکلات این چنین که ممکن است با آن روبرو شویم هنگام تغییر نام فایل است. از دستور یونیکس Move برای انتقال فایل به فایل دیگری و از این رو تغییر نام آن استفاده می‌کنیم: (چند بار جمله قبل رو توی ذهنتون تکرار کنید ? )$ mv file2 file_newپارامتر اول نام فایل قدیمی و پارامتر دوم نام فایل جدید است یعنی file2 به file_new تغییر نام داده است:rename with mvاما از دید گیت اتفاق دیگری رخ داده به این صورت که file2 حذف و file_new ایجاد شده است.file2 =/= file_newشیوه صحیح تعریف کردن این عمل تغییر نام به گیت بدین صورت است که ابتدا فایل جدید را به Staging می‌بریم:$ git add file_newو سپس فایل قبلی را پاک می‌کنیم:$ git rm file2file2 == file_newتوانستیم با موفقیت گیت را از این تغییر با خبر کنیم و حالا نوبت ثبت این تغییر است:$ git commit -m &amp;quotRename file2 to file_new&amp;quotبه یاد داشته باشید می‌توانید تعداد نتایج git log خود را با نوشتن یک عدد مقابل آن محدود کنید:$ git log -3 --onelineفقط نمایش سه کامیت آخربازگردانیهمانطور که در ابتدای مطلب اشاره شد، گیت یک سیستم کنترل نسخه است به این معنی که تاریخچه ای از تمام تغییرات نگهداری می‌کند. این تغییرات قابل بازیابی هستند و گیت می‌تواند حالت فعلی ریپو را به یک نسخه‌ی قدیمی‌تر بازگرداند. برای این کار باید از دستور checkout به همراه کل یا بخشی از مشخصه SHA-1 کامیت (مانند مشخصه oneline) استفاده کنیم.$ git checkout &lt;SHA&gt;سفر در زمانمی‌خواهیم به قبل اضافه شدن خطوط جدید به فایل note.txt بازگردیم. مشخصه آن برای شما متفاوت است.جدا شدن HEAD تا به الان با کلمه HEAD زیاد مواجه شده‌ایم. در واقع HEAD یک اشاره گر (pointer) به شاخه فعلی است. متن آبی رنگ در تصویر را با دقت نگاه کنید، این اشاره گر با دستور Concatenate هم قابل فراخوانی است:$ cat .git/HEADاشاره HEAD به کامیت در تاریخچهدر حالت عادی HEAD به refs/heads/master اشاره می‌کند. فایل note.txt را باز می‌کنیم.مشاهده کامیتتمام تغییرات بعد از کامیت مشخصی که به آن checkout کرده‌ایم از بین رفته‌اند. تغییرات جدیدی ایجاد و آن را کامیت می‌کنیم:کامیت جدیدپس از تغییر در زمان گذشته می‌خواهیم به زمان حال برگردیم:$ git checkout masterاما اتفاقی ناخوشایند در انتظار ما است!تغییر در گذشته زمان حال را تغییر نمی‌دهدتغییراتی که در گذشته اعمال کردیم به زمان حال انتقال پیدا نکرده‌اند. فایل note.txt را باز کنید و ببینید.$ cat note.txtمحتویات فایل تغییری نکردچه اتفاقی رخ داده است؟master branchتغییرات detached به شاخه master تعلق ندارند و کامیت 1f0517d به هیچ شاخه ای متصل نیست. می‌خواهیم تغییراتی که در گذشته اعمال کردیم جایگزین محتوای فعلی note.txt شوند اما checkout کردن کامیت از طریق SHA غیرمتصل ممکن نیست. از تاریخچه HEAD با دستور reflog می‌توان آن را پیدا کرد:  $ git reflogبررسی تاریخچه قرارگیری HEADکافی است مشخصه اشاره گر را checkout کنیم:$ git checkout HEAD@{1}محتوای فایل را در صورت نیاز تغییر داده و پس از ذخیره آن را کامیت می‌کنیم:تغییر کلی متن و کامیت آنبرای اطمینان log را بررسی می‌کنیم:کامیت های detached نوبت ایجاد یک شاخه جدید است. برای این کار از سویچ b مقابل دستور checkout استفاده می‌کنیم:$ git checkout -b &lt;NAME&gt;ایجاد شاخه و ورود به آنشاخه جدید و مجزا از master ایجاد کردیم. برای دیدن لیست شاخه ها از دستور branch استفاده می‌کنیم:$ git branchلیست شاخه هامتن سبز رنگ و کاراکتر asterisk کنار آن نشانگر شاخه فعلی است. شاخه مانند دو جهان موازی در کنار هم وجود دارند اما سرانجام باید به شاخه اصلی یعنی master ختم شوند. برای اعمال تغییرات شاخه جدید در master باید عمل ادغام (merge) صورت گیرد. برای ادغام به شاخه ای که قرار است عمل merge بر روی آن انجام شود checkout می‌کنیم. این بار تغییرات اعمال شده بر روی branch قرار دارند و مستقیما قابل دستیابی هستند. می‌توانید برای متوجه شدن این عمل جفت فایل note.txt در master و شاخه جدید را cat کنید:$ cat note.txtتغییر شاخه$ git checkout masterبررسی مجدد$ cat note.txtتفاوت note.txt در دو شاخه موازیتغییرات temp-fix-note را در master ادغام می‌کنیم:$ git merge &lt;temp-fix-note&gt;اما با مشکل رایجی تحت نام Conflict برخورد خواهیم کرد.تعارض در ادغامهمانطور که مشاهده می‌کنید گیت پیغام وجود conflict در فایل note.txt را گزارش می‌دهد. این اتفاق زمانی رخ می‌دهد که محتوای فایل در شاخه های مختلف احتمال جایگزینی و از بین رفتن محتویات فعلی شوند. اگر از دستور cat دوباره استفاده کنید متوجه خواهید شد که گیت تفاوت این دو فایل را نمایش می‌دهد:تفاوت در ادغاممتن Hello, World در هر دو یکسان است اما از جایی که مشخص گردیده تفاوت دو شاخه دیده می‌شود. برنامه VS Code این تفاوت را بهتر نمایش می‌دهد:$ code note.txtافزونه GitLensرفع conflict به عهده خودتان هست. باید یکی از محتویات یا هر دو را پاک کنید. برای سادگی کار تمام متن بعد از Hello, World را پاک و آن را کامیت می‌کنیم:$ git commit -a -m &amp;quotResolve merge conflict by deleting both&amp;quotو در نهایت برای اطمینان عمل ادغام را تکرار می‌کنیم:$ git merge temp-fix-noteادغام موفقیت آمیزدر بخش بعدی نگاه عمیق تری به شاخه ها و دستوراتی همچون reset و revert خواهیم داشت: https://vrgl.ir/0JsOI موفق باشید ?</description>
                <category>ایلیا لسانی</category>
                <author>ایلیا لسانی</author>
                <pubDate>Mon, 08 Jun 2020 14:08:28 +0430</pubDate>
            </item>
                    <item>
                <title>راهنمای نصب Git برای مبتدیان</title>
                <link>https://virgool.io/@iliyalesani/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D9%86%D8%B5%D8%A8-git-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%85%D8%A8%D8%AA%D8%AF%DB%8C%D8%A7%D9%86-lday4dsavmmz</link>
                <description>Git by Linus Torvaldsگیت یک سیستم کنترل نسخه برای نظارت بر روی تغییرات اعمال شده در طول توسعه نرم افزار می‌باشد. این سیستم برای هماهنگی برنامه نویس ها طراحی شده است اما می‌توان از آن برای دنبال کردن تغییرات در هر گونه نوع فایل یا پروژه ای استفاده کرد. هدف گیت فراهم کردن سرعت (Speed)، یکپارچگی داده (Data integrity)، محیط‌ کار غیرخطی (Non-linear) و توزیع شده (Distributed) می باشد.پیشنهاد می‌شود که ابتدا برنامه ویژال استودیو کُد را نصب کنید: https://vrgl.ir/ZN61w/  در ادامه به نحوه نصب گیت می پردازیم. برای دانلود به وبسایت زیر مراجعه کنید: https://git-scm.com/ ظاهر وب سایت git-scmبر روی Download 2.27.0 for Windows کلیک کنید. در زمان نوشتن این مطلب 2.27 آخرین نسخه منتشر شده می‌باشد و کسانی که در آینده این مطلب را مطالعه می‌کنند نسخه جدیدتری را دانلود خواهند کرد.پیام دانلود در مرورگر Edgeصبر کنید تا پیام دانلود نمایان شود و پس از دانلود آن را اجرا کنید.توافق نامهبا انتخاب دکمه Next توافق نامه را بپذیرید.محل نصبدر این صفحه می توانید محل نصب را تغییر دهید. پیشنهاد می شود محل نصب را تغییر ندهید.جزئیات نصبپیشنهاد می‌شود مطابق عکس موارد را انتخاب کنید. توضیح هرکدام:گزینه Additional icons بر روی صفحه دسکتاپ شما یک میانبر می سازد.گزینه Windows Explorer integration به شما این امکان را می‌دهد تا با کلیک راست بتوانید Git را در مسیر جاری اجرا کنید. Git Bash محیط تحت خط‌ فرمان و Git GUI محیط گرافیکی می‌باشد.گزینه Git LFS یا Large File Support برای کار کردن با فایل های حجیم طراحی شده است و از دانلود چندباره آن ها با جایگزینی پوینتر جلوگیری می‌کند.گزینه Associate .git* configuration files with the default text editor قابلیت شناسایی پسوند git و باز کردن آن با ویرایشگر پیش فرض (مانند VSCode) را به سیستم عامل شناسایی می‌کند. تنظیمات این گزینه جلوتر توضیح داده خواهد شد.گزینه Associate .sh files to be run with Bash قابلیت شناسایی پسوند sh (اسکریپت Unix Shell) با محیط خط فرمان Bash را به سیستم عامل شناسایی می‌کند. اگر مایل هستید از خط فرمان های Bash دیگری مانند Cygwin به جای MSYS تعبیه شده استفاده کنید این گزینه را انتخاب نکنید.گزینه Use a TrueType font in all console windows پشتیبانی بهتر از کاراکتر های Unicode در محیط خط فرمان را فراهم می‌کند. استفاده از این قابلیت لزومی ندارد.گزینه Check daily for Git for Windows updates بطور روزانه بروزرسانی های گیت را اعلام می‌کند.نام پوشه منوی استارتنام پوشه برنامه در منوی استارت ویندوز را می توانید تعیین کنید. این صفحه  حائز اهمیت نیست و می توانید با انتخاب Next از آن عبور کنید.انتخاب ویرایشگردر این بخش ویرایشگر برای git انتخاب می‌شود. همانطور که مشاهده می‌کنید انتخاب پیش فرض Vim می‌باشد. Vim یک ویرایشگر محبوب در ترمینال است اما کار با آن نسبت به ویرایشگر های دیگر سخت بوده و برای افراد که تجربه کار با آن را ندارند، پیشنهاد نمی‌شود.انتخاب Visual Studio Codeپس مطابق تصویر Use Visual Studio Code as Git&#x27;s default editor را انتخاب و سپس بر روی Next کلیک کنید. اگر مراحل نصب VSCode را در هین نصب گیت انجام داده‌اید باید Git Setup را کاملا ببندید و مراحل نصب را از ابتدا تکرار کنید. در صورت نیاز، ویراشگر پیش فرض از طریق خط فرمان قابل تغییر است. مثال تغییر به ویرایشگر ++Notepad:$ git config --global core.editor &amp;quot&#039;C:/Program Files/Notepad++/notepad++.exe&#039; -multiInst -notabbar -nosession -noPlugin&amp;quotتعریف PATHمقادیر PATH به شما این امکان را می‌دهند که بتوانید به ابزار مورد نیاز در سیستم عامل دسترسی داشته باشید مانند استفاده از دستور git در PowerShell یا Command Prompt که با انتخاب مطابق تصویر امکان پذیر است. توضیح هر مورد:گزینه Use Git from Git Bash Only: تغییری در آدرس PATH ایجاد نخواهد شد و ابزار git تنها از طریق Git Bash قابل دسترس خواهد بود.گزینه Git from the command line and also from 3rd-party software: دسترسی به git از هر برنامه سیستم عامل علاوه بر Git Bash فراهم خواهد شد.گزینه Use Git and optional Unix tools from the Command Prompt: تمام ابزار Unix و دستورات git از خط فرمان ویندوز قابل دسترس بوده و جایگزین ابزار های سیستم عامل خواهند شد.پروتکل امن لایه انتقالبرای اتصال HTTPS از کتابخانه OpenSSL استفاده کنید.تنظیم autocrlfاین بخش برای مشخص کردن کنترل کاراکتر و نوع پایان یافتن دستورات در فایل های متنی است. سیستم عامل ویندوز از CRLF (مخفف Carriage Return Line Feed) استفاده می‌کند پس در نتیجه گزینه Checkout Windows-style, commit Unix-style line ending پیشنهاد می‌شود. انتخاب خط فرمان اجراییسپس نوبت به انتخاب خط فرمان می‌رسد. گزینه اول برای اجرای Git Bash به همراه یک ترمینال شبیه سازی شده یونیکس (MinGW) و گزینه دوم برای اجرا Git Bash به داخل خط فرمان ویندوز (cmd) است. استفاده از گزینه دوم مخصوصا در نسخه های قدیمی‌تر ویندوز توصیه نمی‌شود. گزینه Use MinTTY را انتخاب کنید.تنظیم git pullیکی از دستورات git عمل pull برای فراخوانی کد منبع از گیت می‌باشد که با آن آشنا خواهید شد. در این بخش رفتار عمل pull مشخص می‌شود که بطور پیش فرض fast-forward or merge است. در نسخه های قدیمی‌تر Git Setup این بخش قابل تنظیم نیست.تنظیمات ویژگی های اضافی امکانات دیگر git را در این بخش برای نصب فعال کنید. ویژگی استفاده از symbolic link ها کاربرد زیادی ندارد.تنظیمات ویژگی های آزمایشیبخش تنظیمات ویژگی های آزمایشی در هر نسخه گیت متفاوت است اما استفاده از آن ها لزومی ندارد. برای ادامه گزینه Install را انتخاب کنید.در حال نصبصبر کنید تا نصب به پایان برسد.پایان نصبگیت با موفقیت بر روی سیستم شما نصب شده است. با انتخاب Launch Git Bash و سپس Next آن را اجرا کنید.گیت Bashبا اجرای Git Bash پنجره‌ای مانند محیط ترمینال لینوکس نمایان خواهد شد که نام کاربر به همراه @ و سپس نام سیستم را نمایش می‌دهد. گیت آماده استفاده می‌باشد. برای استفاده از گیت، علاوه بر git bash نرم افزار های زیادی وجود دارد، در ادامه با شیوه استفاده از دستورات git در vscode آشنا خواهید شد.اجرای vscodeبرنامه Visual Studio Code را اجرا کنید.Ctrl + Shift + `از سربرگ Terminal گزینه New Terminal یک ترمینال جدید باز کنید.git versionدستور زیر را وارد کنید:git versionاین دستور نسخه فعلی نصب شده گیت را نمایش می‌دهد. برای بروزرسانی گیت می‌توانید از دستور زیر استفاده کنید:git update-git-for-windowsgit updateدر صورت بروز بودن پیام Up to date و در غیر این صورت پیام Download and install ظاهر شده و با وارد کردن کاراکتر Y مراحل دانلود آغاز می‌شود.Up to dateپس از اتمام دانلود، دیالوگ Git Setup اجرا و مراحل نصب گیت دوباره تکرار می‌شود.تبریک می‌گویم گیت آماده صرفه جویی در زمان شما است! ?مطلب بعدی: https://vrgl.ir/TatUg </description>
                <category>ایلیا لسانی</category>
                <author>ایلیا لسانی</author>
                <pubDate>Wed, 03 Jun 2020 17:30:33 +0430</pubDate>
            </item>
                    <item>
                <title>توسعه C++/C در VS Code</title>
                <link>https://virgool.io/coderlife/%D8%AA%D9%88%D8%B3%D8%B9%D9%87-cc-%D8%AF%D8%B1-vs-code-im6abhcl5vot</link>
                <description>سلام، در این نوشته قصد دارم نحوه راه اندازی یک محیط توسعه کامل برای خطایابی و اجرای کد سی و سی پلاس پلاس را به شما آموزش بدهم. در ادامه تمام موارد مورد نیاز را توضیح خواهم داد.Microsoft Visual Studio Code C/C++ابتدا نیاز به نصب برنامه ویژال استودیو کُد دارید که در این پست توضیح داده ام: https://vrgl.ir/ZN61w سپس ابزار توسعه مورد نیاز را طبق این پست راه اندازی کنید: https://vrgl.ir/hxz6N حال برنامه Visual Studio Code را اجرا کنید.Ctrl + Shift + Xمانند تصویر از منوی سمت چپ گزینه Extensions برای مشاهده افزونه های قابل نصب را انتخاب کنید.انتخاب افزونهبا نوشتن حرف C در کادر جستجوی افزونه ها، اولین افزونه نمایان شده را انتخاب کنید. دقت داشته باشید افزونه مانند تصویر بالا توسط مایکروسافت (Microsoft) منتشر شده باشد. سپس Install را انتخاب کنید.نصب افزونهافزونه به حالت Installing تغییر می کند، صبر کنید تا دانلود و نصب آن به پایان برسد.پایان نصب افزونهدر صورت مشاهده This extension is enabled globally افزونه آماده به کار است. توجه داشته باشید وظیفه این افزونه تنها کمک به تکمیل کد سی و یا سی پلاس پلاس می باشد و برای اجرای کد نیاز به افزونه دیگری است.Code Runner by Jun Hanعبارت Code Runner را جستجو و افزونه ای با همین نام را نصب کنید.دکمه Run Codeبعد از نصب Code Runner گزینه ای در سمت راست بالای VS Code نمایان می شود که برای کامپایل و اجرای هر نوع زبان برنامه نویسی ای کاربرد دارد. در ادامه با نحوه اجرای کد آشنا می شوید.Ctrl + Nیک فایل جدید بسازید.Ctrl + Shift + Sپنجره ذخیره سازی را باز کنید.main.cفایل را در مسیر دلخواه با نام دلخواه به همراه پسوند نقطه C ذخیره کنید.mainهمچنین می توانید بجای نوشتن پسوند بصورت دستی، از طریق Save as type نوع پسوند فایل را انتخاب و آن را Save کنید.کد، ذخیره و کامپایل1. کد زیر را برای صحت از عملکرد وارد کنید:#include &lt;stdio.h&gt;

int main()
{
    printf(&amp;quotHello World!&amp;quot);
}Unsaved2. سپس با کلید میانبر Ctrl + S یا از طریق منوی File و Save کد را ذخیره کنید. دایره در کنار نام فایل نشانگر کد ذخیره نشده است. حتما آن را قبل از اجرا ذخیره کنید. 3. سپس از سمت راست بالا کد را اجرا کنید. ▶Hello World!پس از اجرا پنجره Terminal در پایین صفحه ظاهر می شود. اگر اجرای شما موفقیت آمیز باشد متن وارد شده در کد یعنی Hello World در ترمینال به نمایش در می آید. در غیر اینصورت پیام خطای قرمز رنگ به همراه توضیحات برای رفع خطا نمایش داده می شود.False positiveدر صورت مشاهده چنین خطایی (مانند contains a virus) نرم افزار آنتی ویروس خود را غیر فعال کنید.main.exeفایل اجرایی کامپایل شده در کنار فایل کد در همان پوشه یا مسیر قرار می گیرد.برای کد سی پلاس پلاس همین کار را تکرار کنید:فایل جدید بسازید (میانبر Ctrl + N)آن را با پسوند نقطه cpp یا نوع ++C ذخیره کنید. (میانبر Ctrl + Shift + S)کد برنامه را بنویسید.کد را ذخیره کنید (مینابر Ctrl + S)کد را کامپایل و اجرا کنید (میانبر Ctrl + Alt + N)نمونه کد Hello World برای سی پلاس پلاس:#include &lt;iostream&gt;

using namespace std;

int main()
{
    cout &lt;&lt; &amp;quotHello World!\n&quot;
    return 0;
}نکته: افزونه مایکروسافت برای C++/C امکان مرتب سازی کد نافُرم و به هم ریخته را برای شما فراهم می کند. کلید میانبر آن Shift + Alt + F می باشد. برای مثال:کد آشفته!کلیک راست و Format Document (میانبر Shift + Alt + F)کد مرتب و تمیزجمع بندیبرای توسعه برنامه C++/C در VS Code به موارد زیر نیاز دارید:Visual Studio CodeMinGWC/C++ ExtensionCode Runner Extensionبرای توسعه به نکات زیر دقت کنید:ایجاد فایلذخیره فایل با پسوند مرتبطنوشتن یا ویرایش کدمرتب سازی کدذخیره سازی تغییراتکامپایل، دیباگ و اجراتکرار!? از توجه شما سپاسگزارم. موفق باشید. ?</description>
                <category>ایلیا لسانی</category>
                <author>ایلیا لسانی</author>
                <pubDate>Wed, 22 Apr 2020 21:19:51 +0430</pubDate>
            </item>
                    <item>
                <title>راهنمای نصب Visual Studio Code برای مبتدیان</title>
                <link>https://virgool.io/coderlife/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D9%86%D8%B5%D8%A8-visual-studio-code-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%85%D8%A8%D8%AA%D8%AF%DB%8C%D8%A7%D9%86-uviwj2wmeiog</link>
                <description>Microsoft Visual Studio Codeویژوال استودیو کد یک ویراشگر متن توسط شرکت مایکروسافت برای توسعه برنامه تحت سیستم عامل ویندوز، لینوکس و مک است. این ویراشگر قابلیت هایی نظیر اشکال زدایی (Debugging) کنترل نسخه (Version control) مانند Git و اتصال به GitHub، برجسته کردن دستور (Syntax highlighting)، تکمیل سازی کد هوشمند (Intelligent code completion) تکه کد های آماده (Snippets)، بازسازی ساختار کد (Refactoring) و مجموعه کاملی از افزونه (Extension) را برای تسهیل کار دارا می باشد. در ادامه به نحوه نصب آن می پردازیم.برای دانلود به وبسایت زیر مراجعه کنید: https://code.visualstudio.com/ ظاهر وب سایت vscodeگزینه Download را انتخاب کنید.پیام دانلود در مرورگر Edgeصبر کنید تا پیام دانلود نمایان شود و پس از دانلود آن را اجرا کنید.هشدار نصبدر صورت مواجه شدن با همچین پیامی OK را انتخاب کنید. دقت داشته باشید VS Code فقط برای کاربر فعلی در ویندوز نصب می گردد.توافق نامهبا انتخاب I accept the agreement و سپس دکمه Next توافق نامه را بپذیرید.محل نصبدر این صفحه می توانید محل نصب را تغییر دهید. پیشنهاد می شود محل نصب را تغییر ندهید.نام پوشه منوی استارتنام پوشه برنامه در منوی استارت ویندوز را می توانید تعیین کنید. این صفحه حائز اهمیت نیست و می توانید با انتخاب Next از آن عبور کنید.وظایف افزودهدر این صفحه پیشنهاد می کنم تمام موارد را تیک بزنید. توضیح هرکدام:گزینه Create a desktop icon بر روی صفحه دسکتاپ شما یک میانبر می سازد.گزینه Add &quot;Open with Code&quot; action to Windows Explorer file context menu به شما این امکان را می دهد تا با انتخاب فایل و کلیک راست، گزینه Open with code برای ویرایش هر فایلی نمایان شود.گزینه Add &quot;Open with Code&quot; action to Windows Explorer directory context menu به شما این امکان را می دهد تا با انتخاب پوشه و کلیک راست، گزینه Open with code برای افزودن پوشه به محیط کار (Workspace) نمایان شود.گزینه Register Code as an editor for supported file types تمام فایل های متنی با پسوند پشتیبانی شده در سیستم شما با VS Code باز می شوند. (مانند .cpp و .py)گزینه Add to PATH (requires shell restart) عبارت code را به آدرس PATH ویندوز اضافه می کند که به شما امکان اجرای VS Code با دستور code از خط فرمان را می دهد. این گزینه را حتما فعال کنید.آماده نصبحال برنامه آماده نصب می باشد. Install را انتخاب کنید.در حال نصبصبر کنید تا نصب به پایان برسد.پایان نصببرنامه VS Code با موفقیت بر روی سیستم شما نصب شده است. با انتخاب Launch Visual Studio Code و سپس Finish آن را اجرا کنید.خوش آمدیدتبریک می گویم، ویژوال استودیو کد آماده نبرد است! ?</description>
                <category>ایلیا لسانی</category>
                <author>ایلیا لسانی</author>
                <pubDate>Wed, 22 Apr 2020 19:16:44 +0430</pubDate>
            </item>
                    <item>
                <title>راهنمای قدم به قدم نصب MinGW</title>
                <link>https://virgool.io/coderlife/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D9%82%D8%AF%D9%85-%D8%A8%D9%87-%D9%82%D8%AF%D9%85-%D9%86%D8%B5%D8%A8-mingw-x5zrd69fvwky</link>
                <description>GCC / G++ Windows 10ابتدا با معرفی این نرم افزار شروع می کنیم. محیط توسعه Minimalist GNU for Windows مجموعه کامپایلر و ابزاری متن‌باز بوده که برای کاربران ویندوز بصورت رایگان عرضه شده است. این ابزار در محیط های توسعه یکپارچه (IDE) همچون CLion ، Code::Blocks ، Eclipse ، NetBeans به خصوص Visual Studio Code برای اجرای سی و سی پلاس پلاس کاربرد دارند. برای دانلود به وبسایت زیر مراجعه کنید:https://osdn.net/projects/mingw/releasesظاهر وب سایت MinGWدر بالای سایت گزینه Downloads را انتخاب کنید.mingw-get-setup.exeکمی پایین تر می توانید گزینه دانلود برنامه را مشاهده کنید.پیام دانلود در مرورگر Edgeصبر کنید تا پیام دانلود نمایان شود.صفحه ابتداییگزینه Install را انتخاب کنید.مسیر نصب و ایجاد میانبرتوصیه می شود آدرس محل نصب را تغییر ندهید. گزینه Continue را انتخاب کنید.در حال دانلود MinGW Installation Managerصبر کنید تا دانلود تمام شود.اتمام دانلودگزینه Continue را انتخاب کنید.اجرای Installation Managerتا اینجای کار با موفقیت MinGW Installation Manager را نصب کردیم. وظیفه این برنامه مدیریت پکیج های GNU هست که در هر زمان برای ما امکان نصب یا حذف هرکدوم از این پکیج ها را فراهم می کند. پکیج های ذکر شده به این ترتیب هستند:ابزار توسعه مورد نیاز برای تولید برنامه های تحت ویندوز (win32)کامپایلر و ابزار (لینکر، دیابگر، کتابخانه استاندارد و ...) زبان Cکامپایر و ابزار زبان Adaکامپایلر و ابزار زبان Fortranکامپایلر و ابزار زبان ++Cکامپایلر و ابزار زبان Objective-Cمجموعه خدمات تحت خط فرمان bash پکیج های MinGW تنها به این موارد محدود نمی شود و می توانید تمام پکیج ها را با انتخاب All Packages از پنل سمت چپ مشاهده کنید.انتخاب پکیجبا کلیک راست بر روی هر پکیج و انتخاب گزینه Mark for Installation آن ها را برای نصب آماده کنید. اگر به اشتباه گزینه ای را انتخاب کردید، با کلیک راست و گزینه Unmark آن ها را می توانید از انتخاب در بیاورید. پکبج های انتخاب شدهبرای توسعه در IDE ها به زبان C++/C به این پکیج ها نیاز داریم:mingw-developer-toolkit-binmingw32-base-binmingw32-gcc-g++-binmsys-base-binاعمال تغییراتاز منوی Installation زیرمنوی Apply Changes را برای اعمال تغییرات انتخاب کنید.عملیات در انتظاردر پنجره ظاهر شده گزینه Apply را انتخاب کنید.دانلود پکیجصبر کنید تا دانلود پکیج ها تمام شود. این مرحله ممکن است کمی طول بکشد.استخراج پکیجپس از اتمام دانلود، پنجره نصب ظاهر می شود. منتظر بمانید تا تمام پکیج ها از حالت فشرده خارج و نصب شوند. با زدن گزینه Close dialogue automatically پنجره پس از نصب خود به خود بسته می شود. توجه داشته باشید اگر پیام All changes were applied successfully در بالای پنجره (مانند تصویر) ظاهر شد، نشانگر اتمام نصب می باشد و می توانید پنجره را با زدن Close ببندید.آماده استفادهپکیج های نصب شده به رنگ سبز تغییر می کنند و آماده استفاده هستند. پس از اتمام نصب می توانید برنامه MinGW Installation Manager را ببندید. حال برای استفاده از کامپایلر های نصب شده باید آدرس آن ها را برای برنامه های ویندوز مشخص کنیم.تعریف آدرس در PATHSystem Propertiesبه Properties ویندوز بروید. این کار از چند طریق ممکن است:کلیک راست روی This PC یا My Computer و انتخاب Propertiesمراجعه به Control Panel و انتخاب Systemترکیب کلید Win + PRTSCRسپس از سمت چپ همین پنجره گزینه Advanced system settings را انتخاب کنید.تنظیمات پیشرفته ویندوزباز کردن این پنجره در ویندوز 10 با نوشتن path در منوی استارت با نام Edit the system environment variables در دسترس هست.سربرگ Advanced را انتخاب و بر روی دکمه Environment Variables کلیک کنید.Environment Variablesدر این پنجره دقت داشته باشید که Path در قسمت User variables انتخاب شده باشد. سپس بر روی Edit کلیک کنید. اگر می خواهید تمام کاربران ویندوز (اکانت های دیگر) هم دسترسی به ابزار گنو داشته باشند، بجای کادر بالا در کادر پایین Path را انتخاب کنید.مسیر کامپایلردر پنجره ظاهر شده گزینه New را انتخاب و آدرس محل نصب کامپایلر (gcc.exe) را در کادر وارد کنید. کامپایلر بطور پیش فرض در این مسیر قرار دارد:C:\MinGW\binتمام پنجره های باز را با زدن OK ببندید. اگر تمام مراحل بالا را به درستی انجام داده باشید، کامپایلر های MinGW آماده استفاده هستند. برای اطمینان ترمینال ویندوز (Command Prompt یا PowerShell) را اجرا کنید. این کار از طریق نوشتن کلمه cmd در منوی استارت ممکن هست. سپس دستور زیر را وارد کنید:gcc -vاگر مانند تصویر gcc version را مشاهده کردید، تبریک میگم سیستم شما آماده توسعه برنامه هست! ?در غیر اینصورت اگر با خطایی مانند is not recognized مواجه شدید، سیستم را ریستارت، از صحت محل نصب اطمینان حاصل کرده و مراحل قبل را مرور کنید. فایل های MinGW به راحتی قابل انتقال به سیستم های دیگر است (مثلا به علت عدم توانایی اتصال به اینترنت) و فقط باید مقدار PATH را مانند تصاویر بالا تغییر دهید.? موفق و سربلند باشید ?</description>
                <category>ایلیا لسانی</category>
                <author>ایلیا لسانی</author>
                <pubDate>Tue, 07 Apr 2020 18:55:32 +0430</pubDate>
            </item>
                    <item>
                <title>تصمیم گیری بهتر</title>
                <link>https://virgool.io/@iliyalesani/%D8%AA%D8%B5%D9%85%DB%8C%D9%85-%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A8%D9%87%D8%AA%D8%B1-vwhzlehspvhc</link>
                <description>چندراهیمی خواهم با شما خواننده محترم کمی دید خودم را در مورد این جمله به اشتراک بزارم:صحت یک تصمیم خوب، نتیجه آن نیست.ما نمی توانیم از تصمیم خود طوری اطمینان حاصل کنیم که به شکست منجر می شود یا پیروزی و همین امر باعث رعشه در مهارت های تصمیم گیری ما می شود. تصمیمی بهتر است که توسط فرد درست گرفته شود به این معنا که شاید تصمیمی برای شما اشتباه اما برای فرد دیگری درست باشد.پس بیاید اینطور نگاه کنیم که چطور آن فرد درست برای تصمیمات خود باشیم.درست و غلطفرض کنیم که هر تصمیم زندگی ما منحصر به فرد بوده و تجربیات ما نقشی در آن ها ایفا نمی کنند. تنها یک فرد خردمند می تواند مرتکب اشتباه نشود. منشأ حکمت و خرد یادگیری است. در یادگیری دانسته های ما برای کاربرد عمومی در ذهنمان تعمیم داده شده و برای کاربرد در مورد به خصوصی تغییر شکل می دهند. مقصود حرف من این است که با گسترده کردن دامنه دانش یا همان &quot;یادگیری&quot; می توانیم از اشتباهات پرهیز کنیم.حال نقش تجربه را دوباره در نظر بگیریم. بخش وسیعی از تجربه، از آموختن اشتباهات گذشته به دست می آید. پس هر تصمیمی که می گیرید به یاد داشته باشید نتایج آن را بررسی کنید، از آن ها یاد بگیرید و تجربه کسب کنید.قبل از اینکه تصمیم جدیدی بگیرید، با خود فکر کنید که آیا درس عبرتی برای این تصمیم من وجود دارد؟ بارز ترین نمونه آن ضرب المثل های خودمان هست. تو می ‏توانی چاقویی در دل انسانی فرو کنی و آن را بیرون آوری، اما هزاران بار عذرخواهی هم نمی تواند زخم ایجاد شده را خوب کند.مورد دیگر تردید است. هیچ گاه نمی توانید به آن اندازه که مایل هستید از کار های خود اطمینانِ خاطر حاصل کنید. پس دست از وانمود کردن بردارید و احتمال رخداد های ناشناخته را بپذیرید. با خود بگویید: &quot;اگر تصمیم من صد در صد اشتباه بود، اونوقت چی میشه؟!&quot; تمام سناریو های ممکن را بررسی کنید و به خودتان راهکاری ارائه دهید. برای تمام فاکتور های مجهول موقعیت خود را در نظر بگیرید. گزینه های بیشتر احتمال موفقیت را افزایش می دهند به شرط آنکه بیش از حد نشوند. به گفته روانشناس معروف بری شوارتس: احاطه شدن به بیش از 5 گزینه باعث پارادوکس تصمیم می شود. بسته به تعداد گزینه ها، شک و تردید یا بهتر است بگویم ترس در انتخاب پدید می آید.یک گزینه - هیچ انتخابی نداریددو گزینه - دیلما (دوراهی دشوار)سه گزینه - یک انتخاب واقعیقبل از اتخاذ تصمیم با دیگران مناظره کنید. کار شما سخت تر اما در قبال آن ارزش تصمیمتان بیشتر می شود. سلسله دلایل قابل قبولی برای توجیه کردن تصمیم خود بیاورید، اگر فرد متقابل بتواند آن را قبول کند باید بدانید که تصمیم شما ارزشمند است.استدلالمناظره با دیگران باعث می شود چشم انداز های مختلفی نسبت به مسائل داشته باشیم. حتی می توان مزایا و معایب هر نظر متفاوت را دسته بندی کرد. جمع آوری اطلاعات بیشتر فقط به نفع خودمان هست. تعامل با دیگران می تواند دنیای شما را تغییر دهد. امتحان کردن هم ایده خوبی‌ست به طوری که می توانید چندین آزمایش طراحی کنید و خصوصیت های آن را ملاک بگیرید (مثل هزینه، زمان و ...). از این طریق مناسب ترین انتخاب های شما مشخص می شوند. به قول گفتنی:یک آزمایش خوب از هزار پیش‌بینی و تئوری بهتر است.به یاد داشته باشید که خودتان می توانید تصمیم خودتان را خراب کنید و منبع آن ایده آل های خودمان است. شاید در مقطع زمانی مشخصی طرفدار موجودیت به خصوصی (مثل رنگ، نام بِرَند و ...) بوده باشیم و از روی تعصب حرف بزنیم. تعصب امری غیرمنطقی و مخرب بوده که فقط باعث بی عدالتی به خودتان می شود. احتمال این وجود دارد که در آینده نظرتان تغییر کند و از انتخاب خود پشیمان شوید اما اگر با بررسی تمام جوانب تصمیم بگیرید هرگز افسوس نخواهید خورد.تعصبتبعیض قائل بودن تاثیراتی بر روی ما دارد که خودمان متوجه آن نمی شویم و فقط حرف هایی که خودمان به آن تمایل داریم را می شنویم. استدلال هایی که برعلیه اعتقاد ما هستند را بطور کل نادیده گرفته و گاها تظاهر می کنیم که اصلا انتخاب دیگری وجود ندارد! این نوع تصمیم گیری فقط به ضرر ما تمام می شود.دیدگاه علمی برای رفع این مشکل، رویکرد تهاجمی است. به دنبال داده ای بگردیم که بطور کل انتخاب ما را بر خلاف باور هایمان اثبات یا نقض کند. فعالانه به دنبال این نوع داده بگردید و در صورت صحت نداشتن انتخابتان به جای دفاع از آن به دنبال آلترناتیو (جایگزین) بگردید تا از فاجعه احتمالی پرهیز شود.یک رویکرد فوق العاده موثر در تصمیم گیری &quot;تمرین پیش از مرگ&quot; (premortem exercise) نام دارد به این صورت که تصور کنید پس از اتخاذ یک تصمیم بسیار مهم همه چیز بر خلاف تصور شما رخ داده و کاملا خلاف خواسته های شما هست. در این سناریو شما از انتها به ابتدا برگشته و تک تک عوامل بالقوه موثر در شکل گرفتن فاجعه را یادداشت می کنید. ساده بگویم، با خود نقش بازی می کنید و می گویید: &quot;چی شد که انقدر بد شد؟!&quot;بعد از خود بپرسید چه چیزی باعث این مصیبت شد. پیدا کردن علت مخرب فرضی میزان ریسک در تصمیم نهایی را کاهش می دهد. با تغییر دید خود از &quot;راه های موفقیت&quot; به &quot;راه های شکست&quot; ذهن شما در تصمیم نهایی بازتر می شود.گوناگونیدر تصمیم گیری فقط به افراد هم نوع با سلایق مشترک اتکا نکنید. تنوع و گوناگونی در انتخاب های شما نقش به سزایی دارد. در صورت تصمیم گیری تیمی (غیر انفرادی) پرس و جو کردن از افرادی که به تیم شما تعلق ندارند مانعی ندارد/ممنوع نیست. این امر سه مزیت برای شما دارد:آن ها متفاوت هستند پس متفاوت هم فکر می کنندآن ها می توانند مسائلی را مطرح کنند که به فکرتان خطور نکرده بودآن ها هدف واقعگرایانه تری دارند و کمتر به رابطه شما با هم تیمی هایتان اهمیت می دهندهمچنین آن ها احتمال دارد سوالات ساده تری که از دید شما پیش پا افتاده هستند مطرح کنند. با تفکر هوشمندانه و پاسخ به این سوالات درک عمیق تری به آن مسائل پیدا می کنید و به مستحکم بودن پایه اطلاعات خود اطمینان پیدا خواهید کرد. و آخرین پیشنهاد:گوش فرا دهید! بعدا هم می توانید مشارکت کنید.به قول گفتنی شش دانگ حواس خود را جمع کنید. نکته ای از قلم نندازید و فیلتر &quot;درست و غلط&quot; را موقتا کنار بگذارید. وقت برای قضاوت بعدا هم هست. حقایق (facts) را جمع آوری کنید و میزان موثر بودن آنها را در تصمیم خود به چالش بکشید.در شنیدن نظر دیگران شکیبایی به خرج دهید و نگذارید همان چند کلمه اول حرف دیگران باعث عصبانیت و واکنش خشن شما شود. با رفتار مسالمت آمیز جویا شوید که برداشت آن ها از تصمیم شما چیست.جمع بندی:از تاریخ درس بگیریداز تردید پرهیز نکنید، از آن بهره ببریدانتخاب ها را بررسی کنیدمناظره و بحث کنیددلیل بیاوریدامتحان ضرر نداردتعصب بی تعصبشکست را در نظر بگیریدمتفاوت فکر کنیدگوش کنیدبابت مطالعه شما خواننده محترم متشکرم و امیدوارم که در تصمیم های خود موفق و پیروز باشید. ?? ویراستار: MohFA</description>
                <category>ایلیا لسانی</category>
                <author>ایلیا لسانی</author>
                <pubDate>Mon, 06 Apr 2020 04:01:38 +0430</pubDate>
            </item>
                    <item>
                <title>کدام ابزار وب برای شما مناسب هستند؟</title>
                <link>https://virgool.io/JavaScript8/%DA%A9%D8%AF%D8%A7%D9%85-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1-%D9%88%D8%A8-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%B4%D9%85%D8%A7-%D9%85%D9%86%D8%A7%D8%B3%D8%A8-%D9%87%D8%B3%D8%AA%D9%86%D8%AF-tt5xylz3sa3h</link>
                <description>WebPackبا سلام خدمت تمام عزیزان، قصد داریم تا درباره ابزار های Grunt.js ، Gulp.js و WebPack صحبت کنیم و به ویژگی هر کدام بپردازیم. این مطلب در دانشکده فنی و حرفه ای شهید شمسی پور در مقطع کارشناسی نرم افزار ارائه شده است:  https://www.aparat.com/v/Bg5qL متن ویدیوسلام، می خواهیم درباره استفاده از ابزار JavaScript یا Tooling Options صحبت کنیم.یکی از اساسی ترین مهارت هایی که شما به عنوان یک توسعه دهنده وب باید داشته باشید راه اندازی کار در محیط های کاری مختلف یا به اصطلاح Environment است. می خواهم با شما درباره محیط ابزار مختلف و علت خاص بودن و اهمیت دانستن آن ها صحبت کنم. خب، در واقع ابزار چه کاربرد هایی برای شما دارند؟ ابزار به شما راهی برای اتوماسیون وظایف متداول توسعه مانند کاهش کد، اجرا و آزمایش سرور های محلی برای پیش نمایش کد هنگام کار شما می دهند. ابزار بنا بر محیط کار شما از قابلیت های شخصی سازی بالایی بهره مند هستند.افراد مختلف از ابزار مختلف استفاده می کنند و تیم های توسعه دهنده معمولا برنامه های متناسب خود را دارا هستند. شما حتی می توانید ببینید که همان تیم ها از برنامه های مختلف نسبت به نوع پروژه خود استفاده می کنند. بزرگترین ابزار مورد استفاده در وب Grunt و Gulp و همچنین WebPack هستند. اندک نسخه های مشابه این ابزار و کتابخانه های دیگر هم موجود هستند و با این وجود شاید این ابزار محبوب ترین نباشند اما با داشتن کمی تجربه کاری قابل عرضه می باشند.علاوه بر آن می توان از قابلیت های اسکریپت نویسی NPM یا Node Package Manager که همراه با Node.js نصب می شود استفاده کرد. تمام این ابزار ها از جمله Grunt، Gulp و WebPack بر اساس Node.js ساخته شده اند و برخی از افراد ابزار های خود را بر روی Node برای مدیریت پروژه های خود می نویسند. بعضی مواقع این ابزار ها با نام CLI یا محیط خط فرمان شناخته می شوند و در واقع Grunt، Gulp و WebPack همگی CLI هایی هستند که بر روی Node.js پیاده سازی شده اند.حال برخی افراد اسکریپت های خود را نوشته یا ترکیبی از این ابزار را برای مدیریت وظایف خود استفاده می کنند. بیاید نگاهی به این  گزینه های مختلف بیندازیم. اولین گزینه پدر تمام ابزار های کاری GruntJS محیط خط فرمانی برای اجرا وظایف مختلف می باشد. بطور ساده، وظیفه کاری است که می خواهید بر روی کد خود انجام دهید. برای مثال کاهش یا حتی آزمایش کد شما یک وظیفه محسوب می شود. برای آنکه این کار را انجام دهید، کافی است یک فایل تنظیمات بسازید و در این تصویر می توانید یکی از این فایل ها را مشاهده کنید.این فایل از JSON برای پیکربندی اتوماسیون استفاده می کند. با استفاده از این فایل می توانید مجموعه ای از وظایف را تعیین کرده و همچنین می توانید وظایفی برای انجام کار هایی مانند پردازش SASS ، کاهش کد HTML و اجرای یک سرور زنده در هنگام توسعه ایجاد کنید. در اینجا می توانید ببینید که یک وظیفه SASS را دارم و ما می خواهیم از افزونه ای استفاده کنیم که به ما امکان تعیین نحوه تبدیل دلخواه SASS و قابلیت مشخص کردن محل فایل اصلی و مسیری که پردازش در آن صورت خواهد گرفت را بدهد.می توانید ببینید که وظایف دیگری مانند اجرای یک سرور زنده در اینجا قرار دارند. برای مثال می بینید که در اینجا می توانیم نام port مد نظر خود که برای اجرای سرور زنده استفاده خواهیم کرد را مشخص کنیم. حال در اینجا وظیفه ای تحت نام Watch داریم که به دنبال تغییرات فایل های مختلف می گردد و سپس مجددا کار خود را انجام می دهد. در این زیر یک وظیفه پیش فرض ثبت خواهیم کرد که پس از هر بار نوشتن دستور Grunt اجرا خواهد شد.علاوه بر این می توانیم هر کدام از این وظایف را بصورت جداگانه اجرا کنیم. GruntJS قدیمی ترین گزینه در بین ابزار ها می باشد. من به شما می گویم که باید بدانید این ابزار چیست و چگونه عمل می کند. احتمالا با پروژه هایی که از Grunt استفاده می کنند مواجه خواهید شد اما چیزی نیست که برای فهمیدن آن نیاز به تجربه کاری زیادی داشته باشد. همانطور که فکر می کنید، این فایل JSON به راحتی قابل فهم هست. ابزار بعدی Gulp.js یا Gulp نام دارد و کمی بیشتر از یک سال بعد از Grunt منتشر شد پس تشابه زیادی به آن دارد و تفاوت اصلی آن استفاده از JavaScript عادی به جای JSON برای پیکربندی پروژه می باشد.این به این معناست که انعطاف پذیری بیشتری نسبت به Grunt دارد و علت آن وجود کنترل بیشتر در انجام کار ها می باشد. فایل پیکربندی آن به این شکل است. می توانید بگویید که  بسیار شبیه به پیکربندی Grunt هست با این تفاوت که ما فقط از JavaScript ساده به جای JSON استفاده می کنیم. تفاوت دیگر در افزونه های این دو ابزار می باشد بطوری که افزونه های Gulp بر روی انجام یک وظیفه و افزونه های Grunt بر روی انجام چندین وظیفه همزمان تمرکز دارند. به همین دلیل Gulp می تواند سریعتر و همچنین به لطف سادگی و تشابه افزونه ها می تواند بصورت نامتناقض اجرا شود.در وظایف Gulp متوجه خواهید شد که همیشه یک وظیفه نقش تعیین مبدا دیگر وظایف و یک وظیفه برای تعیین مقصد وظایف دیگر را دارا است تا بتوانند به یک صورت اجرا و تمام شوند و معمولا پیکربندی های بیشتری مثلا برای style ها دقیقا مانند Grunt انجام شوند. تفاوت دیگر این است که Gulp از مفهوم جریان داشتن استفاده می کند در حالیکه اجرای Grunt بصورت متوالی است. Gulp اجرای هر وظیفه را مجزا کرده و آن ها را در حافظه دسته بندی می کند و این باعث می شود تا وظایف بتوانند بصورت همزمان اجرا شوند.حال متوجه خواهید شد که یادگیری کار با Gulp در صورت دانستن JavaScript بسیار ساده است و یک مزیت بزرگ نسبت به ابزار بعدی ما که راجب آن صحبت خواهیم کرد، محسوب می شود. WebPack در سال های اخیر بسیار محبوب شده است و علت اصلی آن پیشرفت ماژول ها در توسعه وب می باشد. در حال حاضر محبوب ترین و بروز ترین فریم ورک های JavaScript از جمله Angular ، React و Vue.js بر مفهوم تعیین قطعات کوچک محتاط به نام ماژول طراحی شده اند.ابزار WebPack با در نظر گرفتن ماژول ها به جای وظایف طراحی شده اند. یک مثال خوب، یکی از ویژگی های بسیار خوب WebPack قابلیت پردازش تغییر در یک ماژول بدون نیاز به پردازش بقیه ماژول ها می باشد در حالیکه Gulp یا Grunt به پروژه به دید دنباله ای از وظایف نگاه می کنند. ماژول ها می توانند بطور مستقل بروز رسانی شوند و این باعث می شود که برای کتابخانه های مدرن فوق العاده سریع و عملکرد عالی داشته باشند. علاوه بر آن می تواند توابع پیچیده مانند tree shaking که به شما امکان حذف بخش های استفاده نشده کتابخانه در برنامه را می دهد، را انجام دهد.بنابراین تمرکز ماژولار و قابلیت های پیشرفته باعث می شود که این یک کتابخانه محبوب مخصوصا مناسب برای انجام پروژه های مدرن باشد. به علت طراحی و نحوه عملکرد خاص، راه اندازی و درک WebPack پیچیده تر است. اگر نگاهی به فایل پیکربندی WebPack بی اندازید، می توانید ببینید که از مجموعه ای از loader ها و افزونه ها برای مدیریت انجام کار ها استفاده می کند. برای مثال با اینکه برای شما یک سرور در حال اجرا دارد، شما نیازی به راه اندازی چیزی ندارید چرا که از قبل این عمل برای شما صورت گرفته است. WebPack در چگونگی اجرای محیط کاری شما تصمیماتی اتخاذ می کند.به وضوح WebPack پیچیده ترین اما قدرتمند ترین ابزار در بین task runner ها است و برای کار با آن نیاز به یادگیری یا حداقل دانستن نحوه تنظیم کردن دارد. در اینجا چندین صفحه معرفی می کنم که به شما اطلاعات بیشتری درباره نحوه کار کردن با این ابزار و همچنین دوره های آموزشی مرتبط می دهد.از اینکه تا اینجا با من همراه بودید متشکرم.خدا نگهدار.دوره های آموزشی مرتبطhttps://www.lynda.com/Web-Design-tutorials/Web-Project-Workflows-Gulp-js-Git-Browserify/154416-2.htmlhttps://www.lynda.com/Grunt-js-tutorials/Web-Workflows-Grunt-js/368921-2.htmlhttps://www.lynda.com/Webpack-tutorials/Learning-Webpack-3/628711-2.htmlمنبع https://www.lynda.com/Web-Development-tutorials/Mastering-Web-Developer-Interview-Code/580663-2.html </description>
                <category>ایلیا لسانی</category>
                <author>ایلیا لسانی</author>
                <pubDate>Tue, 25 Dec 2018 19:55:15 +0330</pubDate>
            </item>
                    <item>
                <title>هدف NET Standard. و پیدایش NET Core.</title>
                <link>https://virgool.io/shamsipour/%D9%87%D8%AF%D9%81-net-standard-%D9%88-%D9%BE%DB%8C%D8%AF%D8%A7%DB%8C%D8%B4-net-core-eav7jz9b57wi</link>
                <description>Microsoft .NET Foundationبا سلام خدمت همه عزیزان، نگاهی خواهیم داشت به توسعه برنامه های Cross-Platform تحت فریم ورک دات نت و طرز کار Class Library های گوناگون.این مطلب در دانشکده فنی و حرفه ای شهید شمسی پور در مقطع کارشناسی نرم افزار ارائه شده است: https://www.aparat.com/v/UXMu3 نسخه های دات نت استاندارد:https://github.com/dotnet/standard/blob/master/docs/versions.mdکاتالوگ دات نت:https://apisof.net/Visual Studioمنبع:https://www.wintellectnow.com/Videos/Watch?videoId=net-standard-for-mere-mortals</description>
                <category>ایلیا لسانی</category>
                <author>ایلیا لسانی</author>
                <pubDate>Thu, 13 Dec 2018 16:35:13 +0330</pubDate>
            </item>
            </channel>
</rss>