‫روش‌های ایجاد git server در ویندوز

راه اندازی git server در ویندوز راه‌های گوناگونی دارد که متاسفانه تعداد کمی از آنها ساده و کوتاه بوده و عمدتاً هم نیاز به کمی مهارت لینوکس و ور رفتن‌های فراوان با ابزارهای لینوکسی مثل cygwin دارند. در ادامه بعضی از روش‌ها و راهنماها معرفی می‌شوند.

۱- با استفاده از CopSSH: این روش نیازی به استفاده از cygwin پیدا نکرده بنابراین ساده‌تر و مطمئن‌تر هم هست. به این راهنما و این راهنما مراجعه کنید. راهنمای فارسی و خلاصه‌ای از این دو راهنما هم در این آدرس موجود است.

۲- با استفاده از cygwin و gitosis: این راهنما مستلزم استفاده سنگین از cygwing و python و OpenSSH و gitosis است. این راه، تقریباً سخت‌ترین راه بوده و عملاً مثل این است که یک سرور لینوکس نصب کرده و مراحل را روی آن انجام داده‌اید. cygwin محیط و امکانات لینوکس را در ویندوز ارائه می‌دهد. مزیت این راه حل ظاهراً مدیریت راحت‌تر کاربران است. علاوه بر این، روش gitosis در کنار روش WebDAV که از پروتکل http استفاده می‌کند، کامل‌ترین روش git server است. به این راهنما مراجعه کنید.

۳- با استفاده از cygwin و cygrunsrv و git daemon: مراحل انجام این روش کوتاه و ساده است. ولی من خودم به خاطر مشکلی که ظاهراً از IPv6 ویندوز ۷ بود نتوانستم آن را انجام دهم. در این روش از SSH استفاده نمی‌شود بنابراین امنیت وجود ندارد. ظاهراً مشکلاتی هم در رابطه با push و read only بودن مخزن دارد. به این راهنما مراجعه کنید.

۴- استفاده از git daemon به طور مستقیم در ویندوز: در این روش که بسیار ساده هم هست از پروتکل git مثل git://myserver استفاده می‌شود. پیدا کردن آدرسی دهی، احتمال read only بودن مخزن آن و مشکل concurreny یعنی push کردن هم زمان چند کاربر از جمله مشکلات احتمالی این روش می‌باشد. به اینجا مراجعه کنید.

۵- استفاده از File Sharing: مشابه آنچه که در SourceSafe انجام می‌شد. یعنی یک مخزن bare ساخته شده و در شبکه به اشتراک گذاشته می‌شود. سپس افراد با استفاده از urlهای فایلی به آن دسترسی پیدا می‌کنند. در این روش هیچ امنیتی وجود ندارد. مشکل Concurrency هم دارد. هر وقت کسی بخواهد push کند باید به بقیه استفاده کنندگان اطلاع دهد که تا اتمام push او هیچ کس دیگری push نکند. با وجود این معایب، این راه ساده‌ترین روش ممکن بوده و هیچ دردسری ندارد. به این راهنما مراجعه کنید.

‫به اشتراک گذاشتن سورس‌های git

مهم‌ترین مزیت git از دید من خاصیت Distributed آن است. به این معنی که فرضاً در یک سرور git اینترنتی سورسی وجود دارد که من یک نسخه از آن را در laptop خودم clone کرده‌ام. حالا می‌خواهم در کامپیوتر منزلم که دسترسی به اینترنت و آن سرور git اینترنتی ندارد هم همین سورس را داشته باشم. به عبارتی دیگر می‌خواهم از کامپیوتر منزلم به laptop وصل شده و سورس را دریافت کنم. ضمن این که بتوانم بین کامپیوتر منزلم و laptop به راحتی تغییرات سورس را رد و بدل (push/pull) کنم.

چندین راه برای این کار وجود دارد. راه اصلی آن همان طور که می‌شود حدس زد راه اندازی یک git server است. هر چند که انجام این کار سخت نیست اما چون git یک ابزار لینوکسی است و برای راه اندازی یک git server نیاز به کار کردن با چند ابزار لینوکسی دیگر مثل openSSH است، بهتر است از راه‌های ساده‌تری استفاده شود.

در این لینک چندین راه ساده برای انجام این کار توضیح داده شده است. روش File Share در این بین از همه ساده‌تر به نظر رسیده و در ویندوز هم به راحتی قابل انجام است. همان طور که در اینجا و اینجا توضیح داده شده برای این کار باید از یک محل مشترک به اسم Dropbox و یک سورس bare استفاده گردد. ظاهراً Dropbox در لینوکس معادل فولدرهای Share در ویندوز است.

ترتیب مراحل در ویندوز این طور است:

۱- کسب اطمینان از نصب git در هر دو کامپیوتر

۲- کسب اطمینان از این که کامپیوترها می‌توانند IP و فولدرهای share یکدیگر را ببینند.

۳- ایجاد یک سورس bare در فولدر share یکی از کامپیوترها (مثلاً کامپیوتر ۱) با استفاده از دستور git init –bare. اول باید فولدر ساخته شده و این دستور از داخل فولدر مذکور فراخوانی شود.

۴- push کردن سورس از منبع اصلی به این فولدر share با استفاده از دستور git push origin //machine1/shared_git_repo. این دستور باید از داخل دایرکتوری سورس اصلی فراخوانی شود.

۵- اجرای دستور git clone //machine1/shared_git_repo از داخل کامپیوتر ۲ یا هر کامپیوتر دیگری که به این فولدر share دسترسی دارد.

۶- برای push و pull کردن بین فولدرهای داخل یک کامپیوتر می‌توان از urlی شبیه به file://d:/projects/gitrepo استفاده کرد.

با وجود همه این حرف‌ها بهترین راه به اشتراک گذاشتن سورس‌های git استفاده از سرورهای اینترنتی مثل github.com و assembla.com است. چون نیاز به هیچ configuration و نگهداری نداشته و از تمام دنیا قابل دسترس است.