หน้าเว็บ

วันอังคารที่ 8 กรกฎาคม พ.ศ. 2551

การใช้ git กับ svn repository

สมมติว่า svn repository ของเราอยู่ที่ http://localhost/svnrepo/project

เริ่มแรกก็จัดการเตรียม folder ที่เราจะใช้เป็น git repo สำหรับ svn กันก่อน
เช่น เอาไว้ในไดเรกทอรี่ /directory/git_svn/ ก็ทำการ cd ไปที่ไดเรกทอรี่นั้นแล้วสั่ง
git svn init -s http://localhost/svnrepo/project
โดย -s หมายถึง svn repo มีการจัดไดเรกทอรี่แบบ standard คือมี trunk, branches และ tags ซึ่ง trunk จะมาเป็น master ของ git ส่วน branches และ tags จะมาเป็น branch ของ git

ตอนนี้จะยังเป็น repo เปล่าๆอยู่ ให้สั่ง
git svn fetch
เพื่อเป็นการดึง repo ทั้งหมดของ svn มาเก็บไว้ที่ git repo

คราวนี้ในไดเรกทอรี่ /directory/git_svn/ ก็จะมีไดเรกทอรี่ชื่อ project เกิดขึ้นมา ซึ่งถ้าเข้าไปดูในไดเรกทอรี่นั้น จะมีไฟล์ต่างๆ และไดเรกทอรี่ .git เกิดขึ้นมา ซึ่งไดเรกทอรี่ .git จะเป็น repo ของ git ที่เก็บ historyทั้งหมดไว้

ถ้าต้องการให้ synce กับ svn repo ให้สั่ง
git svn rebase
แล้วถ้าต้องการ commit changes ของเรากลับไปที่ svn ก็สั่ง
git svn dcommit
คราวนี้ที่ผมจะทำต่อไปคือ ผมจะให้คนอื่นที่ทำงานร่วมกันสามารถมา pull ข้อมูลไปได้
ซึ่งอันนี้ก็ต้องเปิด webserver เอาไว้ โดยผมใช้ apache และใช้ document root อยู่ htdocs ตามปกติ
ผมก็ทำการสร้างไดเรกทอรี่เพื่อเอาใช้ให้คนอื่นอ้างถึงได้ โดยเอาไว้ที่ /path/to/apache/htdocs/git/project

เสร็จแล้วให้ cd เข้าไปที่ไดเรกทอรี่ที่เราสร้างขึ้น แล้วสั่ง
git clone --bare /directory/git_svn/project/.git .git
เพื่อทำการสร้าง bare repository ขึ้นมา ซึ่งจะไม่ได้เก็บไฟล์อะไรไว้เพียงแต่จะมี index ชี้ไปยังที่ๆเราเก็บข้อมูลบนเครื่องของเรา (คล้ายๆกับการ redirect)

เสร็จแล้วให้ cd เข้าไปยัง .git ที่เพิ่งเกิดขึ้นใหม่ แล้วสั่ง
git-update-server-info
คราวนี้เครื่องไหนที่ต้องการมาดึงข้อมูลจาก repo ของเราก็สามารถใช้คำสั่ง
git pull http://yourdomain/git/project/.git
หรือถ้าอยู่บนเครื่องเดียวกันก็สามารถใช้
git pull http://localhost/git/project/.git

อ้างอิง
http://pphetra.blogspot.com/2008/06/git-svn-branches.html

http://andy.delcambre.com/2008/3/4/git-svn-workflow
http://www.bluishcoder.co.nz/2007/09/how-to-publish-git-repository.html

ป.ล. ขอบคุณน้องแท็ปด้วยสำหรับข้อมูลอื่นๆเพิ่มเติม

ไม่มีความคิดเห็น: