‫بررسی چند git server ویندوزی

git-dot-aspx

* مشکلی با فایل‌های حجیم ندارد. فقط کافی است http.postBuffer و maxRequestLength تنظیم شود.
* لازم نیست که حتماً repoها توسط خودش ایجاد شده باشد. اگر یک repo را در مسیر repoهایش قرار دهید می‌توانید از آن استفاده کنید.
* اینترفیس وبی آن فقط فهرست repoها و comment آخرین تغییر را نشان می‌دهد نه هیچ اطلاعات دیگری.
* همه repoهای آن باید پسوند ‎.git داشته باشند.
* به صورت پیش فرض anonymous است یعنی هر کسی می‌تواند clone بگیرد یا push کند.
* برای بالا بردن امنیت باید نوع Authentication را در IIS برابر Basic قرار دهید و با urlهایی شبیه به http://user:password@hostname با آن کار کنید. البته می‌توانید با هر با push/pull نام کاربری و password را هم ارسال کنید. امنیت در سطح کل repoها قابل تعریف است نه به ازای تک تک repoها. اگر در password از کاراکترهای ویژه استفاده کرده‌اید باید url را به صورت http://”user:password”@hostname استفاده کنید.

bonobo git server

* urlهای ارسالی به آن case sensitive است
* مشکل commitهای با حجم بالا دارد. با این که دستور git config http.postBuffer 524288000 یا git config –global http.postBuffer 524288000 را در client اجرا کرده و در web.config مقدار maxRequestLength را افزایش دادم باز هم نتوانستم فایل‌های بیش از مثلاً ۱۰۰ کیلوبایت را به سرور push کنم.
* به صورت پیش فرض از user/pass استفاده می‌کند. در نتیجه می‌توان از repoها حفاظت کرد.
* اینترفیس وب آن اطلاعات خیلی خوبی را ارائه می‌دهد، از جمله فهرست commitها.
* امکان تعریف کاربر و تعیین دسترسی به ازای تک تک repoها وجود دارد.

Git-Web-Access

* به هیچ وجه نتوانستم با آن کار کنم. یا من خیلی اشتباه عمل کردم یا این برنامه خیلی ناقص است.

‫git server با استفاده از ویندوز و دات‌نت

تا همین چند وقت پیش برای ایجاد یک git server در ویندوز مجبور بودید از راه حل‌های لینوکسی مثل OpenSSH و cygwin استفاده کنید. استفاده از این طور راه حل‌ها واقعاً سخت و عذاب آور بود و گاهی اوقات باعث می‌شد شخص قید git server ویندوزی را بزند و به سراغ گزینه‌های دیگری مثل مرکوری برود. خوشبختانه جامعه کاربری git در ویندوز بیکار ننشسته و طی این مدت روش‌ها و ابزارهای جدیدی ارائه شده است:

git-dot-aspx
تعداد دانلود خوبی داشته و با چهار رقمی شدن فاصله‌ای ندارد.

bonobo git server
با استفاده از ASP.NET MVC نوشته شده است. downloadهای زیادی ندارد و حتی نقد منفی هم دارد. آن را تست کردم و فعلاً در push کردن فایل‌های حجیم (بیش از یک مگابایت) مشکل دارد.

grack
یک راه حل مبتنی بر ruby

git_http_backend.py
یک راه حل مبتنی بر پایتون

استفاده از Apache و امکانات مخصوص msysgit
به جای IIS از Apache استفاده می‌کند ولی راه حل مطمئن و امتحان شده‌ای است.

Git-Web-Access
الهام گرفته از grak و git_http_backend.py ولی نوشته شده با ASP.NET و WCF

‫روش‌های ایجاد 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 server در ویندوز با استفاده از CopSSH

یکی از راه‌های نصب git به صورت سرویس ویندوز، استفاده از CopSSH می‌باشد. مراحل انجام این کار در ویندوز ۷ (۳۲ بیتی) به صورت زیر است:

۱- دریافت CopSSH و نصب آن.

۲- حتماً مسیر نصب را از Program Files به مسیری در C:‎ مثل C:SSH تغییر دهید. در غیر این صورت در مراحل بعدی به خاطر وجود کاراکتر «فاصله» در فولدر Program Files دچار مشکل خواهید شد.

۳- در بقیه مراحل پیش فرض‌های خود برنامه نصب را بدون تغییر قبول کنید.

۴- Passwordی که به اکانت SvcCOPSSH اختصاص می‌دهید فراموش نکنید.

۵- بعد از اتمام مراحل نصب، با استفاده از COPSSH Control Panel کاربر فعلی ویندوز را انتخاب کرده و آن را به فهرست Activated users اضافه کنید. فرض می‌کنیم نام کاربر mohebbi و نام کامپیوتر Amir-PC است. در این مرحله چیزی شبیه به این دیده می‌شود:

۶- برنامه PuTTY را دریافت و نصب کنید. PuTTY مجموعه‌ای از چند برنامه است که ما فقط با دو تا از آنها کار داریم. اگر TortoiseGIT را در سیستم‌تان نصب دارید، آن دو تا برنامه را در فولدر TortoiseGIT هم می‌توانید پیدا کنید.

۷- با استفاده از برنامه PUTTYGEN یک کلید عمومی و یک کلید خصوصی بسازید.

۸- کلید عمومی را در فایلی به نام authorized_keys ذخیره کنید. این فایل باید در مسیر c:usersmohebbi.ssh قرار بگیرد.

۹- کلید خصوصی را با نام private_key.ppk در مسیر C:SSHhomemohebbi.ssh ذخیره کنید. استفاده از passphrase اختیاری است.

۱۰- فایل ‎.bashrc که در مسیر C:SSHhomemohebbi قرار دارد را با ویرایشگر خوبی مثل Visual Studio باز کنید.

۱۱- خط  User dependent .bashrc file را پیدا کرده و زیر آن خط export HOME=/c/SSH/home/mohebbi را اضافه کنید. bach به بود و نبود فاصله‌ها و کوچک و بزرگ بودن حروف خیلی حساس است. پس ممکن است مجبور شوید اول و آخر این خط را کمی دستکاری کنید.

۱۲- از همین فایل یک کپی تهیه کرده و در آدرس c:usersmohebbi قرار دهید.

۱۳- Unix BASH Shell را از منوی Copssh اجرا کرده و دستور echo $HOME را در آن صادر کنید. با فرض این که msysgit را نصب کرده‌اید، Git Bash را هم اجرا کرده و مجدداً دستور echo $HOME را در آنجا هم صادر کنید. خروجی هر دوی آن باید یک چیز باشد و آن هم: /c/SSH/home/mohebbi

اگر این طور نبود مراحل ۱۱ و ۱۲ را آنقدر تکرار کنید تا مسئله حل شود.

۱۴- msysgit که همان توزیع اصلی git در ویندوز است را نصب کنید. اما باز هم در مسیر root درایو C نصب کنید. نه در Program Files.

۱۵- کل محتویات شاخه‌های bin و libexecgit-core از محل نصب git را به شاخه bin فولدر نصب SSH کپی کنید. راه درست انجام این کار تنظیم صحیح Path و سایر متغیر محیطی ویندوز و بعضی تنظیمات bash است. اما من چون راه بهتری پیدا نکردم از این راه استفاده کردم.

۱۶- برنامه PAGEANT از مجموعه PuTTY را اجرا کنید. این برنامه به طور خودکار در tray قرار می‌گیرد. روی آن دابل کلیک کرده و کلید private_key.ppk را از آدرس C:SSHhomemohebbi.ssh به آن اضافه کنید.

۱۷- برنامه PAGEANT باید همیشه در حال اجرا باشد. پس بهتر است آن را به startup ویندوز اضافه کنید. دادن مسیر کلید خصوصی فراموش نشود.

۱۸- مراحل نصب تمام شد. حالا در مسیر C:SSHhomemohebbi یک شاخه با اسم فرضی myapp.git بسازید. با کمک git، شاخه myapp.git را به یک bare repo تبدیل کنید. اینجا همان repo است که قرار است دیگران از طریق سرویس ویندوز شما به آن دسترسی پیدا کنند.

۱۹- مراحل نصب به پایان رسید. حالا از یک کامپیوتر دیگر با استفاده از git client دلخواه خود، مثلاً TortoiseGit، به git server جدیدتان وصل شده و با وارد کردن آدرس ssh://mohebbi@amir-pc/SSH/home/mohebbi/myapp.git یک clone از مخزن تهیه کنید.

۲۰- کل مراحل به پایان رسید. حال فقط چند فایل را به طور امتحانی commit و push/pull کنید تا مطمئن شوید همه چیز درست است.

راه اندازی git server با استفاده از ویندوز کار چندان راحتی نیست. حین اجرای این مراحل مشکلات خیلی زیادی ممکن است به وجود بیاید. این مشکلات باید با سعی و خطای فراوان، حوصله و کمی مطالعه و خلاقیت حل شوند. من کل این مراحل را با استفاده از ویندوز هفت ۳۲ بیتی و آخرین نسخه هر یک از ابزارهای ذکر شده در تاریخ ۲۶ فروردین ۱۳۸۹ انجام دادم. این راهنما خودش بر اساس راهنمای tim davis و راهنمای مربوطه در TortoiseGit نوشته شده است. در صورت بروز مشکل می‌توان از این دو راهنما هم استفاده کرد. اما دقت کنید که راهنمای tim davis بر اساس نسخه‌های قدیمی ابزارها نوشته شده و راهنمای TortoiseGit هم به جای تکیه بر git استاندارد به خود TortoiseGit وابستگی دارد.