GitRoot
(gitroot.dev)- GitRoot เป็น Git forge ขนาดเล็กที่จัดการรีโพซิทอรีและสิทธิ์การเข้าถึงด้วยไบนารีเดียว และประกอบความสามารถอย่าง issue, board, การรวม branch และเว็บอินเทอร์เฟซผ่านปลั๊กอินแบบแยกอิสระ
- นอกจากโค้ดแล้ว ยัง เก็บข้อมูลทั้งหมดไว้ใน Git เป็นไฟล์ปกติ ไม่ว่าจะเป็น issue, merge request หรือ board โดยไม่พึ่งฐานข้อมูลแยกหรือ hidden blob
- ควบคุมการเปลี่ยนแปลงด้วย
.gitroot/users.ymlและ สิทธิ์เขียนแยกตาม branch โดยมีเพียงผู้ใช้ที่ได้รับอนุญาตเท่านั้นที่pushไปยัง default branch ซึ่งเป็นสถานะปัจจุบันของรีโพซิทอรีได้ - ขณะนี้ยังเป็น เวอร์ชันอัลฟา รองรับรีโพซิทอรี ผู้ใช้ ปลั๊กอิน คำสั่ง SSH Git และการดูผ่าน HTTP แต่ยังไม่เหมาะสำหรับใช้งานจริงใน production
- ก่อนถึง 1.0 มีแผนเพิ่มการอัปเดต การกำหนดสิทธิ์ระดับไฟล์ คำสั่ง Git ผ่าน HTTP กลุ่มและกลุ่มย่อย รวมถึงทำให้ API ของปลั๊กอินเสถียร โดยตอนนี้การมีส่วนร่วมต้องเข้าใจ Git และการทำงานของปลั๊กอิน
grafter
Git forge ขนาดเล็กที่ประกอบใช้เฉพาะความสามารถที่ต้องการ
- GitRoot เป็น Git forge ขนาดเล็ก ที่รันด้วยไบนารีเดียว และจำกัดความสามารถพื้นฐานไว้ที่การสร้างรีโพซิทอรีและการจัดการสิทธิ์เข้าถึงรายรีโพซิทอรี
- ความสามารถที่เหลือให้ปลั๊กอินซึ่งติดตั้งแยกจากกันได้ทำหน้าที่
- สร้าง issue, roadmap, sprint และ milestone
- แสดงรายการในรูปแบบ board
- การรีวิวและรวม branch ที่ GitRoot เรียกว่า
graft - ให้ข้อมูลรีโพซิทอรีและความสามารถต่าง ๆ ผ่านเว็บอินเทอร์เฟซ
- เนื่องจากปลั๊กอินแยกจากกันโดยสมบูรณ์ จึง ใช้เฉพาะ board โดยไม่มีเว็บอินเทอร์เฟซ ก็ได้ และยังสามารถสร้างปลั๊กอินเองตามความต้องการของโปรเจ็กต์ได้
การออกแบบที่ปรับ forge ให้เข้ากับโปรเจ็กต์
- ออกแบบโดยตั้งอยู่บนสมมติฐานว่าแต่ละโปรเจ็กต์มีวิธีทำงานที่ต้องการไม่เหมือนกัน และแต่ละโปรเจ็กต์ควรมี อิสระในการปรับแก้ forge ของตนเอง
- สภาพแวดล้อมที่ผู้พัฒนาต้องการมีดังนี้
- เก็บโค้ด issue, pull/merge request และ board ไว้ในรีโพซิทอรีเดียว
- มีความสามารถที่จำเป็นต่อการโปรโมตและดำเนินงานของโปรเจ็กต์ เช่น landing page, การแปล, ระบบ ticket และ forum
- ย้ายไปยัง forge บนเซิร์ฟเวอร์อื่นได้โดยไม่ต้องมี migration script และไม่สูญเสียข้อมูลหรือการแสดงผู้มีส่วนร่วม
- ในทางกลับกัน ต้องการหลีกเลี่ยงความซับซ้อนต่อไปนี้
- วิธีการที่ต้องเปิดเบราว์เซอร์เพื่อจัดการ pull/merge request หรือ issue
- โครงสร้างที่ทำให้คนที่เพิ่งรู้จักโปรเจ็กต์เห็นรายการไฟล์และไดเรกทอรีก่อนอย่างแรก
- วิธีที่ forge เป็นผู้กำหนดความหมายและ workflow ของ sprint, milestone, epic และ user story
- โครงสร้างที่ต้องผ่านหลายเมนูเพื่อตั้งค่าสิทธิ์ของผู้ใช้เพียงรายการเดียว
ความเป็นอิสระในการติดตั้งและการดูแลระบบ
- มุ่งไปที่ การแจกจ่ายที่ไม่มี dependency และฐานข้อมูล เพื่อให้ผู้ดูแลติดตั้งและดูแลรักษาได้ง่าย
- ผู้ดูแลควรกำหนดได้ว่าผู้ใช้แต่ละคนทำอะไรได้บ้าง และผู้ใช้ควรขอสร้าง/เข้าถึงโปรเจ็กต์และความสามารถต่าง ๆ ได้ด้วยตนเองโดยไม่ต้องพึ่งอีเมลหรือแชต
- เป้าหมายคือการลดภาระในการอัปเกรด พร้อมทั้งไม่ส่งมอบข้อมูลโปรเจ็กต์และผู้ใช้ให้บุคคลที่สาม และไม่ต้องพึ่งผู้ให้บริการรายใหญ่ที่อาจเปลี่ยนนโยบายการดำเนินงานอย่างฉับพลัน
- โปรเจ็กต์นี้ยังไม่เสร็จสมบูรณ์และกำลังเปิดรับการมีส่วนร่วมจากภายนอก
สิทธิ์ที่จัดการด้วยไฟล์ปกติและ branch
- เก็บ ข้อมูลทั้งหมดไว้ในไฟล์ปกติ ข้างโค้ด แทนการใช้ฐานข้อมูลหรือ hidden blob ภายใน Git tree
.gitroot/users.ymlของแต่ละรีโพซิทอรีจะระบุตำแหน่งที่ผู้ใช้แต่ละคนเขียนได้ และการควบคุมการเข้าถึงทำงานโดยเน้น ข้อจำกัดระดับ branch- ในตอนแรกมีเพียงเจ้าของเท่านั้นที่เข้าถึง default branch ได้
- หากผู้ใช้ที่ไม่มีสิทธิ์
pushไปยัง default branch, GitRoot จะปฏิเสธการเปลี่ยนแปลง - ทุกคนสามารถสร้าง branch ใหม่ได้ และผู้ใช้ที่สร้างจะได้สิทธิ์เขียนใน branch นั้น โดยผู้ใช้อื่นไม่สามารถแก้ไขได้
- หากแก้ไข
.gitroot/users.ymlหรือรวม branch ที่ผู้ใช้เพิ่มตัวเองเข้าไป ผู้ใช้นั้นก็จะpushไปยัง default branch ได้เช่นกัน
- ทุกคนสามารถอ่านไฟล์และแก้ไขในเครื่องหรือบน branch ใหม่ได้ แต่หากต้องการสะท้อนการเปลี่ยนแปลงไปยัง default branch ซึ่งแสดงสถานะปัจจุบันของรีโพซิทอรี จะต้องมี การรวมโดยเจ้าของ
- การตั้งค่าของ forge เองก็จัดการใน root repository
- หากเพิ่มการเปลี่ยนแปลงใน
.gitroot/repositories.ymlของ default branch ใน root repository หรือรวมการเปลี่ยนแปลงนั้น รีโพซิทอรีจะถูกสร้างขึ้น - ดูรายละเอียดการทำงานได้ในเอกสาร
- หากเพิ่มการเปลี่ยนแปลงใน
ความสามารถที่รองรับในเวอร์ชันอัลฟา
- ปัจจุบันยังเป็น เวอร์ชันอัลฟา จึงสามารถทดลองได้แต่ไม่ควรใช้ใน production
- ขอบเขตที่รองรับมีดังนี้
- การสร้างและลบรีโพซิทอรี
- การประมวลผลคำสั่ง Git ผ่าน SSH
- การจัดการตำแหน่งที่ผู้ใช้แต่ละคนเขียนได้ในระดับรีโพซิทอรีและ branch
- การติดตั้งปลั๊กอินและการเปิดใช้งานแยกตามรีโพซิทอรี
- การรันปลั๊กอินใน working tree ระหว่างการติดตั้ง
- หลังติดตั้งแล้ว รันปลั๊กอินกับ diff ของทุก commit
- การดูรีโพซิทอรีผ่าน HTTP
แผนการพัฒนาจนถึง 1.0
- ก่อนเวอร์ชัน 1.0 มีแผนจะทำความสามารถต่อไปนี้
- การอัปเดต GitRoot และปลั๊กอิน
- การจัดการ สิทธิ์ผู้ใช้ระดับไฟล์
- การประมวลผลคำสั่ง Git ผ่าน HTTP
- การจัดการรีโพซิทอรีด้วยกลุ่มและกลุ่มย่อย
- ทำให้ API ของปลั๊กอินเสถียร
การ self-host และขั้นตอนการมีส่วนร่วม
- เว็บไซต์ GitRoot เป็น อินสแตนซ์ GitRoot ที่โฮสต์โค้ดของ GitRoot เอง และเปิดใช้งานเฉพาะสำหรับโปรเจ็กต์ GitRoot
- หากต้องการทดลองกับโปรเจ็กต์อื่น ต้องทำตามเอกสารการติดตั้งและการใช้งาน
- เนื่องจาก GitRoot เองก็เป็นรีโพซิทอรีของ GitRoot จึงสามารถมีส่วนร่วมได้ด้วยวิธีเดียวกัน และดูขั้นตอนได้ที่คู่มือการมีส่วนร่วม
- อินสแตนซ์ปัจจุบันใช้ปลั๊กอิน
grafterสำหรับรวมบางส่วนของโค้ดเข้าสู่ default branch ดังนั้นก่อนมีส่วนร่วมจึงต้องเข้าใจวิธีทำงานของมัน - เนื่องจากข้อมูลทั้งหมดรวมถึงโค้ด issue และการแปลถูกเก็บไว้ใน Git การมีส่วนร่วมในตอนนี้จึงต้อง รู้วิธีใช้ Git
- ในอนาคตมีเป้าหมายให้ทุกคนเข้าร่วมได้ โดยสามารถรัน
git commitและgit pushได้โดยตรงจากเบราว์เซอร์
1 ความคิดเห็น
ความคิดเห็นจาก Lobste.rs
สาเหตุที่ความกว้างของแท็ก
<pre>ถูกจำกัดไว้ที่ 720px ดูเหมือนจะมาจากbodyที่ใช้display:gridและถ้าปิดมันก็จะกว้างขึ้นตามคาด อีกทั้งใน URL ก็ไม่มี ข้อมูลจุดเวลา commit ที่เฉพาะเจาะจง จึงทำให้คนส่งลิงก์กับคนรับลิงก์ดูหน้าจอเดียวกันได้ยาก เข้าใจว่าเป็นโปรเจ็กต์ที่ทำไว้ใช้ส่วนตัว แต่อยากฝากไว้เป็นประเด็นที่น่าพิจารณาโดยส่วนตัวไม่ใช้ LLM ในการเขียนโค้ดและก็ไม่เห็นด้วย แต่ถึงจะมีการใช้ LLM ถ้าแพตช์เล็กพอ ก็ยังไม่แน่ใจว่าจะปฏิเสธหรือไม่
เพราะภาษาอังกฤษไม่ใช่ภาษาแม่ จึงอธิบาย GitRoot ได้ยาก และการสื่อสารภายนอกจึงมีร่องรอยของ LLM อยู่ ก่อนหน้านี้ก็เคยขอความช่วยเหลือที่ https://gts.gitroot.dev/@forge/statuses/01KFNWDKSZBEHTC16N5G02HJZ6 และ https://gts.gitroot.dev/@forge/statuses/01KTP30NTY9FK91Q9B5Z9B4M52 แต่ก็ไม่มีใครมา
มันทำให้เจ็บใจที่ต้องใช้ LLM แต่ก็เลือกจะ ใช้ให้น้อยที่สุด แทนการไม่ทำอะไรเลย หากในอนาคตมีชุมชนเกิดขึ้นก็อยากตัดมันออกไปทั้งหมด และก่อนหน้านั้นมันอาจหายไปเองตามธรรมชาติด้วยเหตุผลทางเศรษฐกิจก็ได้ มีเรื่องด้านปรัชญา ความปลอดภัย และอนาคตที่ตั้งใจจะเขียนไว้อยู่หลายชิ้นในรายการสิ่งที่ต้องทำ แต่สุดท้ายก็ลังเลที่จะเขียน เพราะคิดว่า LLM ก็คงจะมาช่วยขัดเกลาประโยค แก้คำผิด และแปลให้อยู่ดี