เนื่องในโอกาสที่ GitHub เปิดให้ใช้ Private Repository ฟรีไม่จำกัด (ไหน ใครบอกว่าไมโครซอฟต์ซื้อไปแล้วไม่ดี) นาทีนี้ Git Hosting ชื่อดังทั้งสามตัวอย่าง GitHub, Bitbucket และ GitLab รวมถึงอีกตัวที่คนอาจไม่ค่อยรู้จักอย่าง Azure DevOps (ชื่อเดิม Visual Studio Team Services) ก็เลยถือว่าอยู่ในตลาดเดียวกันละ วันนี้เลยขอใช้โอกาสนี้มาอัปบล็อกเปรียบเทียบทั้งสี่ตัวเพื่อเป็นข้อมูลประกอบการตัดสินใจว่าจะใช้ตัวไหนกันดี
โดยทั้งสี่ตัวมีแบบจ่ายเงินใช้จริงจังอยู่ แต่ในบล็อกนี้เราขอเน้นในเรื่องของการใช้งานแบบสายฟรี (อาจจะมีค่าใช้จ่ายเพิ่มนิดหน่อยถ้าต้องการฟีเจอร์หรือ Storage บางอย่างเพิ่ม) เพราะน่าจะมีผู้ใช้แบบ Individual ที่ใช้ของเหล่านี้แบบฟรีอยู่เยอะ อ่ะจัดปายยยย
ข้อมูลพื้นฐาน
เริ่มต้นจากข้อมูลพื้น ๆ ก่อนละกัน
# | GitHub | Bitbucket | GitLab | Azure DevOps |
---|---|---|---|---|
เจ้าของ | Microsoft | Atlasssian | GitLab Inc. | Microsoft |
Supported VCS | Git | Git, Mercurial | Git | Git |
Public Repository | ฟรีไม่จำกัด Repo | ฟรีไม่จำกัด Repo | ฟรีไม่จำกัด Repo | ฟรีไม่จำกัด Repo |
Private Repository | ฟรีไม่จำกัด Repo | ฟรีไม่จำกัด Repo | ฟรีไม่จำกัด Repo | ฟรีไม่จำกัด Repo |
Public Repository Collaborator | ฟรีไม่จำกัด | ฟรี 5 Collaborators | ฟรีไม่จำกัด | ฟรีไม่จำกัด |
Private Repository Collaborator | ฟรี 3 Collaborators | ฟรี 5 Collaborators | ฟรีไม่จำกัด | ฟรี 5 Collaborators |
แพคเกจซื้อ Collaborator เพิ่ม | $7/เดือน เพิ่มได้ไม่จำกัด | $2/User/เดือน เริ่มต้นที่ $10/เดือน |
- | เริ่มต้น $30/เดือน ใช้ได้ 10 Users |
Maximum Repository Size | 1GB | 2GB | 10GB | 10GB |
Git Large File Storage (LFS) | ฟรีพื้นที่ 1GB ฟรีแบนวิธ 1GB/เดือน ไฟล์ใหญ่ได้ไม่เกิน 2GB |
ฟรีพื้นที่ 1GB | ฟรีไม่จำกัด (ลิมิต 10GB/Repo รวม LFS แล้ว) |
ฟรีไม่จำกัด |
แพคเกจ Git LFS ซื้อเพิ่ม | $5/เดือน ได้พื้นที่ 50GB + แบนวิธ 50GB/เดือน | แพลน $2/User: 5GB (จ่ายขั้นต่ำ $10/เดือน) แพลน $5/User: 10GB (จ่ายขั้นต่ำ $25/เดือน) |
- | - |
ถึงตอนนี้ทุกตัวจะเปิดฟรี Private Repo และ Public Repo หมดแล้ว แต่ก็ยังหนีความจริงที่ว่าแต่ละตัวมีแนวทางเริ่มต้นต่างกันไม่ได้ ทำให้มีรายละเอียดหลาย ๆ อย่างที่ต่างกันไปตาม Business Model
สิ่งที่ GitHub เสียเปรียบกว่าคนอื่นเค้ามาก ๆ คือการจำกัดขนาด Repository ไว้ที่ 1GB และไฟล์ใหญ่ได้ไม่เกิน 100MB ซึ่งเมื่อเทียบกับ GitLab ที่ให้ถึง 10GB แล้วก็ถือว่าต่างกันมากอยู่จนส่งผลต่อการตัดสินใจว่าจะใช้อะไรได้
ในส่วนเรื่อง Collaborator ก็เช่นกัน ตัว GitHub, Bitbucket และ Azure DevOps หารายได้จากการคิดเงินเป็นจำนวนผู้ใช้ แต่กับ GitLab นี่อันลิมิต จะกี่คนก็ได้ เพราะเค้าอาศัยเก็บเงินจากอย่างอื่นแทน
ก็ถือเป็นรายละเอียดที่ต่างกันไปในแต่ละตัวซึ่งจะส่งผลกระทบต่อค่าใช้จ่ายและความเหมาะสมกับรูปแบบทีมของเราด้วยครับ
ฟีเจอร์หลังบ้าน
คราวนี้มาดูฟีเจอร์หลังบ้านที่เป็นรายละเอียดของ Git ในแต่ละ Repo กัน
# | GitHub | Bitbucket | GitLab | Azure DevOps |
---|---|---|---|---|
Branch Comparison | มี | มี | มี | มี |
Commit History | มี | มี | มี | มี |
Syntax Highlighting | มี | มี | มี | มี |
Syntax Highlighting ใน Diff | มี | ไม่มี | มี | ไม่มี |
Commit Graph | มีแบบย่อ แต่ถ้าโปรเจคคน Fork เยอะจะดูไม่ได้ (ตัวอย่าง) |
มี (ตัวอย่าง) |
มี (ตัวอย่าง) |
มี แต่เป็นการดูแบ่งตามกิ่งปลายทาง |
ดู Git Tag | มี | มี | มี | มี |
Issue Tracker | มี | มี (ปิดไว้โดย Default) | มี | มี (เป็นลักษณะของ Kanban Board) |
Wiki | มี | มี (ปิดไว้โดย Default) | มี | มี |
Slack Notification | มี | มี | มี | มี |
Trello Integration | เชื่อมกันได้แต่เว็บใครเว็บมัน | มี Trello Board ในหลังบ้าน Bitbucket เลย | เชื่อมกันได้แต่เว็บใครเว็บมัน | เชื่อมกันได้แต่เว็บใครเว็บมัน |
WebHook | มี | มี | มี | มี |
โดยรวมก็ทำงานได้เหมือนกันหมด แต่ Commit Graph ของ GitHub แสดงผลไม่ค่อยดีทำให้ดูภาพรวมได้ยากกว่าเมื่อเทียบกับ Bitbucket และ GitLab ครับ (ลองกดดูตัวอย่างในตารางด้านบนได้) ถ้าทำงานเป็นทีมหรือมี Commit เยอะ ๆ Branch เยอะ ๆ GitHub จะเสียเปรียบอีกสองตัวมาก
ส่วน Azure DevOps ก็ดู Commit Graph ได้สวยงามละเอียดแต่ Commit ที่โชว์จะถูกจำกัดเฉพาะกิ่งที่เลือกเท่านั้น ในขณะที่ Bitbucket และ GitLab นั้นโชว์ Commit ของทุกกิ่งเรียงลงมาตามเวลาได้เลย จะเห็นภาพรวมได้ดีกว่า แต่จะฟิลเตอร์เป็นกิ่ง ๆ ไปก็ได้เหมือนกัน
อย่างไรก็ตาม Commit Graph เราสามารถดูผ่านแอป ฯ บนคอมพ์เราได้เหมือนกัน เช่น SourceTree ถ้ามองว่าการดู Commit Graph ผ่านหลังบ้านไม่ใช่เรื่องใหญ่ เรื่องอื่น ๆ ก็ค่อนข้างเหมือนกันหมดครับ
ก็จะมี Trello Board อีกอันนึงที่ Bitbucket เหนือกว่าชาวบ้านเค้า คืออีกสามเจ้าต้องเปิดเว็บใครเว็บมัน แค่จะเชื่อม Pull Request กับ Trello ได้ แต่กับ Bitbucket นี่มาเหนือ ไม่ต้องเปิดสองเว็บ เปิดแค่ Bitbucket แล้วทำงานบนนั้นได้เลย
ถ้าใครใช้ Trello ก็คงจะชอบเป็นพิเศษ
ฟีเจอร์ในการทำงานร่วมกับคนอื่น
ทั้งสี่ตัวเปิดให้ทำงานกับคนอื่น (Collaborator) ได้ โดย GitHub ให้ได้ 3 คน ส่วน Bitbucket และ Azure DevOps ได้ 5 ทางด้าน GitLab นี่ไม่จำกัด ดังนั้นมาดูฟีเจอร์การทำงานร่วมกันหน่อยว่าแต่ละตัวเป็นยังไง
# | GitHub | Bitbucket | GitLab | Azure DevOps |
---|---|---|---|---|
Pull Request | มี | มี | มี | มี |
Code Review | มี | มี | มี | มี |
Inline Code Comment in Pull Request | มี | มี | มี | มี |
Mark Inline Code Comment Resolved | ได้ | ไม่ได้ | ได้ | ได้ |
แก้ไขไฟล์บนเว็บ | มี | มี | มี | ได้ |
จากที่ใช้งานมาสักพักก็รู้สึกว่าโอเคทุกอันนะครับ มีข้อดีข้อเสียในรายละเอียดต่างกันไปบ้าง อย่างที่อาจจะหงุดหงิดหน่อยตอนใช้ Bitbucket คือคนสามารถมาเขียนคอมเม้นต์โค้ดส่วนต่าง ๆ ได้ แต่เราไม่สามารถ Mark ได้ว่าแก้ไขเสร็จแล้ว ต้องมานั่งจำเอาเอง ไม่ก็ต้องมานั่งสร้าง Task แล้วติ๊กถูกว่าทำเสร็จแล้ว ในขณะที่อีกสามตัวสามารถกด Resolve แล้วขึ้นว่าแก้ไขเสร็จแล้วได้เลย
อย่างไรก็ตาม สุดท้ายก็ใช้งานได้ทุกตัวอยู่ดีครับ
ฟีเจอร์ในการทำ CI/CD
ยุคนี้การทำ CI/CD กลายเป็นเรื่องปกติไปละ ยิ่งมีคนร่วมอยู่ในโปรเจคเยอะ ๆ การทำ CI/CD จะทำให้ชีวิตดีขึ้น ปัญหาน้อยลงและประหยัดเวลาไปมากโข
คราวนี้มาดูกันบ้างว่าทั้งสามตัวมีฟีเจอร์ CI/CD ติดตัวมาหรือไม่อย่างไร
# | GitHub | Bitbucket | GitLab | Azure DevOps |
---|---|---|---|---|
Built-In CI/CD | ไม่มี | มี | มี | มี |
ค่าใช้จ่ายการรัน Pipeline | - | แพลนฟรี: 50 นาทีต่อเดือน แพลน $2/User: 500 นาทีต่อเดือน แพลน $5/User: 1000 นาทีต่อเดือน |
แพลนฟรี: 2,000 นาทีต่อเดือน แพลน $19/User: 10,000 นาทีต่อเดือน แพลน $99/User: 50,000 นาทีต่อเดือน |
Public Repository: - ฟรีไม่จำกัด - รันได้มากสุด 10 Job พร้อมกัน - นานสุด 360 นาทีต่อ Job Private Repository: - ฟรี 1,800 นาทีต่อเดือน - รันได้ 1 Job ต่อช่วงเวลา - นานสุด 30 นาทีต่อ Job จ่ายเพิ่ม $40 ต่อเดือน: - จะทำงานได้เพิ่มอีก 1 Job ต่อช่วงเวลา - ไม่จำกัดนาทีต่อเดือน - นานสุด 360 นาทีต่อ Job |
อันนี้เป็นหน้าจอตัวอย่าง Pipeline ของ Bitbucket ครับ เขียนเป็นไฟล์ yml ไป แล้วมันจะรันทดสอบให้อัตโนมัติ
ส่วนอันนี้ของ GitLab ก็ใช้เทคนิคเดียวกัน เขียนเป็น yml ไป และก็ไม่ต้องเป็นห่วง ชื่อไฟล์คนละตัวกับ Bitbucket ดังนั้นเขียนแยกกันได้ครับ
สุดท้ายของ Azure DevOps ก็ Config-as-Code เป็น yaml เช่นกัน แต่โค้ดจะลายตากว่าพอสมควร เหะ ๆ หรือจะลากวางผ่าน UI ก็ได้เหมือนกัน
ความพิเศษนึงของ Azure DevOps คือเราไม่ต้องเอา Git ไปฝากไว้บนนั้นก็ได้ มันมีอีกบริการชื่อ Azure Pipelines ที่เอาไว้ทำ CI/CD แบบ Standalone (ง่าย ๆ คือเหมือน Jenkins) ก็แค่จ่ายเงินซื้อเป็นจำนวนนาทีไปก็ใช้ได้เลย ราคาเดียวกับตารางด้านบนครับ
สำหรับ GitHub ถ้าอยากได้ CI/CD จริง ๆ ก็สามารถซื้อเพิ่มได้ แต่ก็จะไม่ใช่ Built-In ต้องสั่งโน่นสั่งนี่ เชื่อมโน่นเชื่อมนี่เต็มไปหมด ไม่ค่อยสนุกเท่าไหร่
Marketplace ซื้อฟีเจอร์เพิ่ม
หากมีฟีเจอร์อะไรที่ต้องการเพิ่มแต่ไม่มีในระบบ เราก็สามารถซื้อเพิ่มจาก Marketplace ได้ ซึ่งทั้งสามเจ้ามี Marketplace บริการอยู่ครับ
GitHub Marketplace ถึงจะมี Tools อยู่ไม่เยอะมาก แต่ก็เพียงพอต่อการใช้งาน นอกจากนี้ถ้าเกิดเราอยากหารายได้ก็สามารถเขียน Tools ขายบนนี้ได้ด้วย
ส่วน Bitbucket เนื่องจากว่าถูกพัฒนาโดย Atlassian ซึ่งถือว่าใหญ่มากในตลาด Enterprise ดังนั้นไม่ต้องแปลกใจว่า Marketplace จึงมี Tools ให้เลือกซื้อเยอะมากกกกกก เรียกว่าอยากได้อะไรก็มีหมดอ่ะ ขอแค่เปย์
ส่วน GitLab อันนี้ไม่ค่อยมีให้ซื้อเพิ่มเท่าไหร่ครับ แต่ฟีเจอร์ที่มันมีก็ค่อนข้างครบ ต้องสมัครแพลนแบบจ่ายเงินเอาเพื่อได้ฟีเจอร์เพิ่มแบบเหมา ๆ ยกตัวอย่างเช่น Code Quality ถ้าบน GitHub และ Bitbucket ต้องซื้อ Tools เพิ่ม แต่กับ GitLab ก็แค่จ่ายแพลน $4/User/เดือน ก็มีให้ใช้ทันที
สุดท้าย Azure DevOps อันนี้ก็มีมหาศาลมาก อยากได้อะไรมีหมดครับทั้งฟรีและจ่ายตังค์ แล้วก็ทำของตัวเองปล่อยให้คนอื่นใช้ได้ด้วยครับ
ทดสอบความเร็ว
มาทดสอบความเร็วในการ Push/Pull จากประเทศต่าง ๆ กันบ้าง เริ่มต้นด้วยประเทศไทย ทดสอบด้วยเนต AIS Fibre แพคเกจ 50/20 Mbps ได้ผลดังนี้
# | GitHub | Bitbucket | GitLab | Azure DevOps |
---|---|---|---|---|
Push | 450 KiB/s | 120 KiB/s | 100 KiB/s | 2.4 MiB/s |
Clone | 2.4 MiB/s | 1.5 MiB/s | 1.6 MiB/s | 2.2 MiB/s |
* ผลลัพธ์อาจเปลี่ยนแปลงถ้าใช้เนตเจ้าอื่น
ที่น่าประทับใจสุดคือ Azure DevOps ที่อัปโหลดได้เต็มสูบมาก เป็นตัวเดียวเลยที่อัปได้เร็วขนาดนี้จากประเทศไทย ถือเป็น Killer Performance เลยก็ว่าได้ ส่วน Bitbucket กับ GitLab ที่ใช้กันเยอะ ๆ นี่จะอัปโหลดช้าพอสมควร ถ้า Change ใหญ่ ๆ นี่อัปทิ้งไว้แล้วไปกินข้าวรอได้เลย
คราวนี้ลองจากเมกากันบ้าง โดยทดสอบที่ DigitalOcean โหนด NYC ครับ
# | GitHub | Bitbucket | GitLab | Azure DevOps |
---|---|---|---|---|
Push | 15 MiB/s | 14 MiB/s | 16 MiB/s | 14 MiB/s |
Clone | 40 MiB/s | 40 MiB/s | 45 MiB/s | 30 MiB/s |
สรุปแล้วถ้าจากเมกาก็คือแทบจะเต็ม Cap ของเนตเลย ลื่นมาก Repo 1 GB นี่ไม่ถึงนาทีเสร็จ แต่พอมาใช้เนตไทยก็จะอืด ๆ อย่างหลีกเลี่ยงไม่ได้เพราะ Server Cloud ทั้งหมดอยู่เมกานั่นเองครับ ยกเว้นตัวเดียวที่เร็วจนคนอื่นเทียบไม่ติดคือ Azure DevOps ให้เป็น Winner เรื่องนี้ไปเลย
ความเสถียร
GitHub มีล่มให้เห็นอยู่บ้าง แต่ก็จะเป็นเวลาสั้น ๆ ก็มีบ้างบางทีที่ล่มเป็นวันเลยแต่ไม่บ่อยมาก แล้วก็มี Degraded Performance ให้เห็นเรื่อย ๆ อย่างไรก็ตามโดยรวมถือว่าเสถียรมาก
GitLab ไม่ค่อยล่ม ถึงจะเคยมีเคสใหญ่ที่ Database พังจนข้อมูลพวกคอมเม้นต์ Pull Request ฯลฯ หายไป 6 ชั่วโมง (แต่ Git ไม่พัง) ก็ไม่ใช่ปัญหาอะไร แต่ปัญหาหลัก ๆ คือมีบั๊กโผล่มาให้ปวดหัวอยู่เรื่อย ๆ
ส่วน Bitbucket นี่ล่มเรื่อย ๆ โดยเฉลี่ยสองสามเดือนครั้ง ล่มที 3-4 ชั่วโมง ก็ไปหาอะไรกินกันระหว่างนั้นได้
ทางด้าน Azure DevOps เนื่องจากไม่ค่อยได้ใช้จริงเท่าไหร่ก็เลยบอกเรื่อง Uptime ไม่ได้ แต่ในเว็บบอกสถิติไว้ว่า 99.9% ก็คือปีนึงอาจจะล่มรวมแล้วไม่เกิน 9 ชั่วโมงครับ
โดยรวม Uptime ก็เกิน 99% กันหมด แต่ก็ต้องทำใจว่ามันไม่ 100% นะ อาจมีบางวันทำงานไม่ได้ หาอย่างอื่นทำ ๆ
การ Host Server เอง
บริษัทใหญ่ ๆ บางเจ้าก็ค่อนข้างหวง Source Code และไม่อยากเอาขึ้นไว้บน Cloud แต่อยากจะ Self-Hosted เอง อันนี้ก็ทำได้ครับ โดยรายละเอียดตามนี้
GitHub: ทำไม่ได้
Bitbucket: จ่ายราคาแบบครั้งเดียวตามจำนวน User เริ่มต้น $10 ได้ 10 Users ไปจนถึง $60,700 ได้ 2,000 Users
GitLab: เป็น Open Source สามารถติดตั้งบน Server ตัวเองได้ฟรีไม่มีค่าใช้จ่าย
Azure DevOps: สามารถซื้อ License ของ Team Foundation Server (TFS) ได้ มีวิธีซื้อหลายแบบ ต่ำสุดก็ $45 ต่อเดือน ไม่รวมค่า License Windows ที่จำเป็นต้องใช้ติดตั้ง TFS ด้วย
ตัวที่นิยมใช้กันสุด ๆ ก็คือ GitLab แหละเพราะฟรีนั่นเองงง
อันไหนเหมาะกับอะไร
ความจริงทั้งสามตัวมัน Overlap กันพอสมควร แต่สุดท้ายก็มีบางปัจจัยที่เอาไว้พิจารณาเพิ่มได้ว่าอันไหนเหมาะกับเราหรือเหมาะกับงานเรา ดังนี้ครับ
- ถ้าทำ Open Source ก็ GitHub เลย Community ของ GitHub แข็งแกร่งที่สุดแล้ว
- แต่ GitHub มีข้อจำกัดเรื่องขนาด Repository ถ้า Open Source ที่ทำนั้นมีขนาดใหญ่ ควรพิจารณาไปใช้ Bitbucket, GitLab หรือ Azure DevOps มากกว่า
- ถ้าทำงานในลักษณะ Private แบบตัวคนเดียว ไม่แนะนำให้ใช้ GitHub เนื่องจากสาเหตุของข้อจำกัดทางขนาดไฟล์และขนาด Repo แนะนำให้ใช้ Bitbucket ไม่ก็ GitLab หรือ Azure DevOps แทน
- ถ้าทำงานเป็นทีมในลักษณะ Private แนะนำ GitLab เพราะค่าใช้จ่ายถูกกว่า Bitbucket และ Azure DevOps แต่ฟีเจอร์ไม่ต่างกัน
- ถ้าจำนวน Collaborators ไม่เยอะ ตอนนี้ภาษี Azure DevOps ดีตรงเรื่องความเร็วในการ Push/Pull แต่ส่วนตัวไม่เชี่ยวตัวนี้มากเพราะไม่ค่อยได้ใช้ ยังไงใครสนใจลองใช้ดูก่อนได้ว่าตอบโจทย์งานท่านมั้ย ฟีเจอร์ก็ครบตามที่ต้องการนะ
- ถ้าใช้บริการของ Atlassian อื่น ๆ อยู่ เช่น JIRA ก็ใช้ Bitbucket เลยจะทำงานร่วมกันสมบูรณ์กว่า
- Azure DevOps กับ Azure ไม่ค่อยเกี่ยวกันเท่าไหร่ ไม่มีผลต่อการตัดสินใจสำหรับผู้ใช้ Azure อยู่ครับ
ก็เลือกใช้อันที่เหมาะสมดูนะ
เราใช้อะไรอยู่
โปรเจคส่วนตัวและของบริษัทตอนนี้ใช้ Bitbucket และ GitLab ร่วมกันครับ โดยที่เดิมใช้เป็นหลักคือ Bitbucket แต่มีบาง Repository ที่ใหญ่เกิน 2GB จนใส่ใน Bitbucket ไม่พอ ก็เลยโยกไปใช้ GitLab ซึ่งให้พื้นที่เยอะกว่า
ส่วนเจ้า GitHub นี่จะใส่เฉพาะโปรเจคที่ต้องการ Community เท่านั้น เป็นตัวเลือกสุดท้ายเฉพาะทางเลย
Azure DevOps นี่ไม่ได้ใช้มานานมาก แต่ก็ว่าจะลองใช้เล่น ๆ ดูอยู่เหมือนกัน ดูท่ามีอนาคตดี
แถมอีกตัวเล่น ๆ
เนื่องจากทุกบริการที่พูดมาเป็นของ USA หมดเลย ไม่ต้องแปลกใจที่ประเทศ Silicon Valley แห่งใหม่อย่างจีนจะต้องมีของตัวเองด้วย โดยนักพัฒนาคนจีนจะใช้ Git Hosting ชื่อว่า Coding.net กันครับ
ฟีเจอร์ค่อนข้างครบถ้วนแต่มันเป็นภาษาจีนทั้งหมด จะใช้ก็ได้แต่แนะนำว่าเรียนภาษาจีนก่อนจะดีกว่า
ประมาณนั้นครับ ก็เลือกตัวที่เหมาะกับงานของตัวเองโนะะะ