เรื่องมีอยู่ว่าผมอยากหาวิธีที่จะ upload source code จากเครื่องผมไปยัง server โดยไม่จำเป็นต้อง copy ทั้งหมดไปทับ
เนื่องจากมันเปลืองเวลา ยิ่งถ้าไม่ได้อยู่ที่มี Internet แรง ๆ แล้วหล่ะก็ เหนื่อย แน่ ๆ
คำตอบก็ลงตัวที่ rsync ครับ ซึ่งผมสามารถทำได้ดังนี้
rsync -av /myproject/projecta/ myusername@semicolon.in.th:/wwwroot/projecta/
โดยก่อนที่จะ sync จริง ๆ ผมมักจะเติม -n เข้าไปด้วย เพื่อตรวจสอบว่า file ที่กำลังจะ upload นั้น
คือ file ที่แก้ไขไปจริง ๆ หรือไม่ เช่น
rsync -avn /myproject/projecta/ myusername@semicolon.in.th:/wwwroot/projecta/
ก็ใช้งานได้ดีครับ แต่มีปัญหานิดหน่อย คือ
เมื่อใดก็ตามที่ผม check out source code มาจาก subversion มาไว้ที่ directory ใหม่
วันที่ของ file จะไม่ตรงกับ file ที่อยู่บน server และ rsync ก็จะคิดว่ามันเป็น file ใหม่ ก็จะต้อง sync ทุกครั้งไป
นอกจากสร้างปัญหาด้านความช้าในการ upload แล้ว
ยังทำให้ผมไม่แน่ใจด้วยว่า ถ้าผม sync ไปแล้วระบบจะมีปัญหาหรือไม่
เนื่องจากมัน upload ขึ้นไปใหม่ทุก file เลย - -"
หลังจากหาและมั่วอยู่ตั้งนาน ก็พบ option นี้ (ด้วยความตาถั่ว จึงใช้เวลานานเป็นพิเศษ -*- )
-v, --verbose increase verbosity
-q, --quiet suppress non-error messages
--no-motd suppress daemon-mode MOTD (see caveat)
-c, --checksum skip based on checksum, not mod-time & size
เจ้า -c (หรือ --checksum) นั่นเองครับ ดังนั้นผมจึงเปลี่ยนคำสั่งในการ sync เป็น
rsync -avc /myproject/projecta/ myusername@semicolon.in.th:/wwwroot/projecta/