Tags:

ผมเริ่มหัดเขียนโปรแกรมมาได้ซักพักแล้ว(นักศึกษา) และก็ได้ลองใช้ Git(Github + VS) ร่วมด้วย
ที่ผมใช้ก็เพียงแค่ commit,push,revert ก็เท่านั้น เคยพยายามทำโปรเจ็คเดียวกันร่วมกับเพื่อน
แต่ลงเอยด้วยก็ที่ต้องผลัดกันทำให้คนหนึ่ง commit ไปก่อน แล้วคนอื่นค่อย pull มา merge
เพราะไม่อย่างงั้นถ้าทำไปพร้อมๆ กัน พอ merge แล้วมันก็ conflict อีก(ตรงนี้ผมเข้าใจการใช้งานผิดใช่ไหม?)

เลยอยากทราบครับว่าเวลาทำงานจริงๆ เป็นทีมเขาแบ่งงานกันทำยังไง และใช้งาน Git กันแบบไหนครับ

Get latest news from Blognone
By: aimakung
AndroidUbuntuWindowsIn Love
on 27 January 2015 - 19:21 #785883

อะไรที่ conflict บ่อยๆ ต้องเอามาดูและแก้ไขครับ อย่าปล่อยไปทั้งอย่างนั้น

ทีนี้ VS มันมีโอกาส conflict ที่ตัว config กับไฟล์ metadata (xml) ถ้า commit ขึ้นไปทั้ง project

วิธีแก้ของผมตอนทำงานกับ ASP.NET คือใช้ .gitignore บางไฟล์ออกไปถ้าตัว VS จะ generate ให้เราเองอยู่แล้วครับ ให้ git repo เก็บแต่โค้ดที่เราเขียนเป็นหลัก

หากไม่ชัวร์ว่าไฟล์ไหนจะใช้ .gitignore เอาออกไปได้บ้างให้ลองเพิ่มเข้าไปดู แล้ว clone project ไปไว้ที่ folder อื่น จากนั้นทดลองเปิดบน VS แล้ว Compile ดูครับ

By: witoong623
ContributorAndroidWindows
on 27 January 2015 - 20:12 #785898 Reply to:785883

ขอบคุณครับ สอบถามเพิ่มหน่อยครับว่าปกติจะไม่ commit ขึ้นไปทั้งโปรเจ็คเหรอครับถ้าทำเป็นทีม

By: UltimaWeapon
Windows PhoneRed HatWindowsIn Love
on 27 January 2015 - 22:03 #785929
UltimaWeapon's picture

วิธีที่ผมใช้คือ อย่าคอมมิตตู้มเดียว เช่น ทำฟีเจอร์ X ตอนทำจะหั่นยิบย่อยให้ได้มากที่สุด สมมุติมันต้องสร้างคลาส A ขึ้นมา ก็จะทำ Skeleton มันขึ้นมาก่อน ยังไม่ต้อง Implement อะไร วิธีนี้ต่อให้มัน Conflict ก็จะ Solve ได้ไม่ยาก

By: witoong623
ContributorAndroidWindows
on 27 January 2015 - 22:56 #785950 Reply to:785929

ขอบคุณครับ ประเด็นคือ commit ยกโปรเจ็คและซอยย่อยๆ ให้มากที่สุดสินะครับ

By: war11ck
AndroidSymbianUbuntuWindows
on 28 January 2015 - 00:25 #785977
war11ck's picture

คอมมิตถี่ๆ แล้วแต่ละคอมมิตควรจะมีความหมายในตัวเองด้วยครับ เช่น เพิ่ม 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 เท่านั้น (มีผลอย่างมากถ้าทำงานในทีมหลายคน)

By: bluezip
AndroidUbuntuWindows
on 28 January 2015 - 02:26 #785998

ใช้ 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 โดยตรงเพื่อแก้ปัญหาสำคัญ แร่งด่วน

By: SnowBEE
AndroidWindows
on 28 January 2015 - 10:25 #786099

เรื่อง conflict นั้นต้องคุยกันครับ

เช่น ไม่ควรแก้ไขไฟล์เดียวกันโดยไม่จำเป็น หากมีการแก้ไขไฟล์ที่เป็นกลาง ๆ และมีส่วนอื่นเรียกใช้งานเยอะ ก็ให้รีบแก้ไขและ Commit

.gitignore มีคนทำไว้แล้วสำหรับหลาย ๆ ภาษา https://github.com/github/gitignore

การทำ Branch แนะนำให้อ่านนี้ครับ http://nvie.com/posts/a-successful-git-branching-model/

By: witoong623
ContributorAndroidWindows
on 28 January 2015 - 19:49 #786385

ขอบคุณทุกท่านที่มาตอบมากครับ

ต้องไปศึกษาเรื่อง branch เพิ่มด้วยแล้ว