หน้าเว็บ

วันศุกร์ที่ 14 พฤษภาคม พ.ศ. 2553

วิธีเรียกดู diff ของ file ใน git

ถ้าต้องการดูว่าไฟล์ที่ถูกแก้ไขไปนั้นแตกต่างกับ revision ก่อนหน้ายังไงบ้าง ให้ใช้ 2 คำสั่ง
1. หาเลข commitid revision ที่ต้องการเปรียบเทียบด้วยคำัส่ง
git log -- filename
2. แสดงผลการเปรียบเทียบ
git diff commitid -- filename
โดย commitid คือเลข commit id ของ revisoin ที่ต้องการที่หาได้จากขั้สตอนที่ 1
filename แทนชื่อไฟล์ที่ต้องการเปรียบเทียบ

ระบบที่ทดสอบ
git: 1.7.0.4
OS: Ubuntu 10.04

วันจันทร์ที่ 29 มิถุนายน พ.ศ. 2552

เปลี่ยน editor ของ git เป็น vi

ปกติถ้าใช้ git (เป็น dvcs (distributed version control system) ประเภทหนึ่ง) แล้วสั่ง commit -a เพื่อให้มันขึ้น editor มาให้ใส่ text นั้น แรกเริ่มเดิมที่มันจะใช้ editor คือ nano (สำหรับ ubuntu ที่ผมใช้อยู่) แต่ว่าผมอยากให้ vi มากกว่า ก็เลยจะเปลี่ยนมันซะ (จริงๆเมื่อก่อนมันเคยเปลี่ยนให้เองโดยไม่ได้ทำอะไร ก็งงเหมือนกันว่ามันเปลี่ยนยังไง)

วิธีเปลี่ยน
สั่งคำสั่ง
git config core.editor "vi"
โดยสามารถเปลี่ยนคำว่า vi เป็น editor ตัวอื่นใดๆก็ได้ที่ชอบ เช่น nano เป็นต้น

ระบบที่ทดสอบ
OS: ubuntu 9.04
git: 1.6.0.4

วันอังคารที่ 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

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