ผมเริ่มหัดเขียนโปรแกรมมาได้ซักพักแล้ว(นักศึกษา) และก็ได้ลองใช้ Git(Github + VS) ร่วมด้วย
ที่ผมใช้ก็เพียงแค่ commit,push,revert ก็เท่านั้น เคยพยายามทำโปรเจ็คเดียวกันร่วมกับเพื่อน
แต่ลงเอยด้วยก็ที่ต้องผลัดกันทำให้คนหนึ่ง commit ไปก่อน แล้วคนอื่นค่อย pull มา merge
เพราะไม่อย่างงั้นถ้าทำไปพร้อมๆ กัน พอ merge แล้วมันก็ conflict อีก(ตรงนี้ผมเข้าใจการใช้งานผิดใช่ไหม?)
เลยอยากทราบครับว่าเวลาทำงานจริงๆ เป็นทีมเขาแบ่งงานกันทำยังไง และใช้งาน Git กันแบบไหนครับ
อะไรที่ conflict บ่อยๆ ต้องเอามาดูและแก้ไขครับ อย่าปล่อยไปทั้งอย่างนั้น
ทีนี้ VS มันมีโอกาส conflict ที่ตัว config กับไฟล์ metadata (xml) ถ้า commit ขึ้นไปทั้ง project
วิธีแก้ของผมตอนทำงานกับ ASP.NET คือใช้ .gitignore บางไฟล์ออกไปถ้าตัว VS จะ generate ให้เราเองอยู่แล้วครับ ให้ git repo เก็บแต่โค้ดที่เราเขียนเป็นหลัก
หากไม่ชัวร์ว่าไฟล์ไหนจะใช้ .gitignore เอาออกไปได้บ้างให้ลองเพิ่มเข้าไปดู แล้ว clone project ไปไว้ที่ folder อื่น จากนั้นทดลองเปิดบน VS แล้ว Compile ดูครับ
ขอบคุณครับ สอบถามเพิ่มหน่อยครับว่าปกติจะไม่ commit ขึ้นไปทั้งโปรเจ็คเหรอครับถ้าทำเป็นทีม
วิธีที่ผมใช้คือ อย่าคอมมิตตู้มเดียว เช่น ทำฟีเจอร์ X ตอนทำจะหั่นยิบย่อยให้ได้มากที่สุด สมมุติมันต้องสร้างคลาส A ขึ้นมา ก็จะทำ Skeleton มันขึ้นมาก่อน ยังไม่ต้อง Implement อะไร วิธีนี้ต่อให้มัน Conflict ก็จะ Solve ได้ไม่ยาก
ขอบคุณครับ ประเด็นคือ commit ยกโปรเจ็คและซอยย่อยๆ ให้มากที่สุดสินะครับ
คอมมิตถี่ๆ แล้วแต่ละคอมมิตควรจะมีความหมายในตัวเองด้วยครับ เช่น เพิ่ม method A, แก้ logic ใน method B อะไรทำนองนี้อ่ะครับ เวลามาดู log ทีหลังจะดูง่ายและ revert ง่ายครับ แนะนำเพิ่มเติมอีกอย่างคือคำสั่ง pull = fetch + merge ซึ่งถ้าทำงานใน branch เดียวกัน log มันจะเล๊ะตุ้มเป๊ะมาก เพราะมีโหนด merge เกิดขึ้นเรื่อยๆ ทุกครั้งที่น้อง pull code ควรใช้ pull --rebase ดีกว่ามันจะเปลี่ยนเป็น fetch + rebase แทน จำง่ายๆ คือ branch เดียวกันใช้ rebase ต่าง branch ใช้ merge ทั้งนี้ทั้งนั้นทั้งสองวิธีไม่ได้มีผลกับ code ใดๆ ทั้งสิ้น แต่เพื่อความอ่านง่ายของ log เท่านั้น (มีผลอย่างมากถ้าทำงานในทีมหลายคน)
ใช้ branch ให้เป็นประโยชน์ครับ
branch master ชื่อก็บอกอยู่แล้ว อันนี้เป็นตัวโปรแกรมหลัก
branch develop อันนี้แตกมาจาก branch master เป็นตัวที่เราจะทำงานกับมัน
branch xxxx อันนี้เป็น function ต่างๆ โดยแยกย่อยๆออกไปแยอะๆ โดยแตกมาจาก branch develop
เวลาทำเสร็จก็ให้ merge กับ develop
branch release อันนี้แตกมาจาก develop อันนี้เป็นตัวโปรแกรมที่พร้อมจะทำงานแล้ว
ขั้นการทดสอบจะอยู่ในข้้นนี้ ถ้าไม่มีปัญหาอะไรก็จะ merge ให้กับ master
แล้วก็อัพเดทเลข version ให้กับ master ด้วย
แต่ถ้ามีปัญหา ไม่ผ่านการทดสอบ ก็กลับไปแก้ไขก่อน
แล้วค่อยออก release2 release3 มาอีกที
branch hotfixed เป็น branch ที่แตกมาจาก master โดยตรงเพื่อแก้ปัญหาสำคัญ แร่งด่วน
เรื่อง conflict นั้นต้องคุยกันครับ
เช่น ไม่ควรแก้ไขไฟล์เดียวกันโดยไม่จำเป็น หากมีการแก้ไขไฟล์ที่เป็นกลาง ๆ และมีส่วนอื่นเรียกใช้งานเยอะ ก็ให้รีบแก้ไขและ Commit
.gitignore มีคนทำไว้แล้วสำหรับหลาย ๆ ภาษา https://github.com/github/gitignore
การทำ Branch แนะนำให้อ่านนี้ครับ http://nvie.com/posts/a-successful-git-branching-model/
ขอบคุณทุกท่านที่มาตอบมากครับ
ต้องไปศึกษาเรื่อง branch เพิ่มด้วยแล้ว