در
اولین قسمت این سری، گیت و در
قسمت دوم ، SVN را بررسی کردیم؛ در این مقاله قصد داریم یک جمع بندی از این دو مقاله داشته باشیم.
احتمالا در مورد این دو سیستم حرفهای زیادی شنیدهاید و احتمالا بیشتر آنها در مورد گیت نظر مساعدتری داشتهاند؛ ولی تفاوتهایی بین این دو سیستم هست که باید به نسبت هدف و نیازی که دارید آن را مشخص کنید. یکی از اصلیترین این تفاوتها این است که svn یک سیستم مرکزی است؛ ولی گیت اینگونه نیست که در ادامه تفاوت این دو مورد را تشریح میکنیم.
یک. SVN یک مخزن مرکزی دارد که همهی تغییراتی که روی کپیها انجام میشود، باید به سمت مخزن مرکزی Commit یا ارسال شوند. ولی در سیستم گیت یک سیستم مرکزی وجود ندارد و هر مخزنی که fork یا Clone میشود، یک مخزن جداگانه به حساب میآید و Commit شدن تنها به مخزن کپی شده صورت میگیرد و در صورت pull request ادغام با مخزن اولیه خودش صورت میگیرد.
دو. گیت به نسبت svn از پیچیدگی بیشتری برخوردار است؛ ولی برای پروژههای بزرگتر که کاربران زیادی با آن کار میکنند و احتمال شاخه بندیهای زیادتر، در آن وجود دارد بهتر عمل میکند. موقعی که یک پروژه یا تیم کوچکی روی آن کار میکنند به دلیل commit شدن مستقیمی که svn دارد، کار راحتتر و آسانتر صورت میگیرد ولی با زیاد شدن کاربران و حجم کار، گیت کارآیی بالاتری دارد.
سه. از آن جا که گیت نیاز به fork شدن دارد و یک مخزن کاملا مجزا از پروژه اصلی تولید میکند؛ سرعت بهتری نسبت به svn که یک کپی از زیر مجموعه ساختار اصلی ایجاد میکند دارد.
چهار. شاخه بندی یک مفهوم اصلی و مهم در گیت به شمار میآید که اکثر کاربران همه روزه از آن استفاده میکنند و این اجازه را میدهد که که تغییرات و تاریخچه فعالیت هر کاربر را بر روی هر شاخه، جداگانه ببینیم. در svn پیاده سازی شاخهها یا تگها سخت و مشکل است. همچنین شاخه بندی کار در svn به شکل سابق با کپی کردن صورت گرفته که گاهی اوقات به دلایلی که در قسمت قبل گفتیم، باعث ناسازگاری میگردد.
پنج. حجم مخازن گیت به نسبت svn خیلی کمتر است برای نمونه پروژه موزیلا 30 درصد حجم کمتری در مخزن گیت دارد. یکی از دلایلی که svn حجم بیشتری میگیرد این است که به ازای هر فایل دو فایل موجود است یکی که همان فایل اصلی است که کاربر با آن کار میکند و دیگری یک فایل دیگر در شاخه svn. است که برای کمک به عملیاتی چون وضعیت، تفاوت ها، ثبت تغییرات به کار میرود. در صورتی که در آن سمت، گیت، تنها به یک فایل شاخص 100 بایتی برای هر دایرکتوری کاری نیاز دارد
شش. گیت عملیات کاربری را به جز fetch و push، خیلی سریع انجام میدهد. این عملیات شامل یافتن تفاوتها، نمایش تاریخچه، ثبت تغییرات، ادغام شاخهها و جابجایی بین شاخهها میگردد.
هفت. در سیستم SVN به دلیل ساختار درختی که دارد، میتوانید زیر مجموعهی یک مخزن را بررسی کنید ولی در سیستم گیت اینکار امکان پذیر نیست. البته باید به این نکته توجه داشت که برای یک پروژهی بزرگ شما مجبور هستید همیشه کل مخزن را دانلود کنید. حتی اگر تنها نسخهی خاصی از این زیرمجموعه را در نظر داشته باشید. به همین علت در شهرهایی که اینترنت گرانقیمت و یا سرعت پایین عرضه میشود، گیت به صرفهتر است و زمان کمتری برای دانلود آن می برد.
موارد تعریف شده زیر طبق گفته ویکی سایت Kernel.Org ذکر میشود:
- گیت از سیستم SVN سریعتر عمل میکند.
- در سیستم گیت هر شاخه بندی کل تاریخچه خود را به دنبال دارد.
- فایل git که تنظیمات مخزن داخلش قرار دارد، ساختار سادهای دارد و به راحتی میتوان در صورت ایجاد مشکل، آن را حل کرد و به ندرت هم پیش میآید که مشکلی برایش پیش بیاید.
- پشتیبانی گیری از یک سیستم مرکزی مثل SVN راحتتر از پشتیبانی گیری از پوشههای توزیع شده در مخزن گیت است.
- ابزارهای کاربری svn تا به الان پیشرفتهای چشمگیری داشته است. پلاگینها و برنامههای بیشتری نسبت به سیستم گیت دارد. یکی از معروفترین این پلاگینها، ابزار tortoisesvn است (البته ابزارهای گیت امروز رشد چشمگیرتری داشته اند که در قسمت اول نمونههای آن ذکر شد).
- سیستم svn برای نسخه بندی و تشخیص تفاوتها از یک سیستم ساده اعداد ترتیبی استفاده میکند که اولین ثبت با شماره یک آغاز شده و به ترتیب ادامه مییابد و برای کاربران هم خواندنش راحت است و هم قابل پیش بینی است. به همین جهت برای بررسی تاریخچهها و دیگر گزارشها تا حدی راحت عمل میکند. در سیستم شاخه بندی این سیستم شماره گذاری چندان مطلوب نیست و متوجه نمیشوید که این شاخه از کجا نشات گرفته است. در حال حاضر برای پروژهی موزیلا این عدد به 6 رقم رسیده است ولی در آن سمت، سیستم گیت از هش SH-1 استفاده میکند که یک رشته 40 کاراکتری است و 8 رقم اول آن به منشاء اشاره میکند که باعث میشود متوجه بشویم که این شاخه از کجا آمده است ولی از آنجا که این عدد یکتا ترتیبی نیست، برای خواندن و گزارشگیریهایی که در SVN راحت صورت میگیرد، در گیت ممکن نیست یا مشکل است.
- گیت رویدادهای ادغام و شاخه بندی را بهتر انجام میدهد.