Pages

10/18/2010

Dumping SVN Repository Remotely

ปัญหาสำหรับวันนี้คือ
มี server SVN อยู่ตัวนึง

  • รัน SVN อยู่
  • Windows
  • มี RDP ให้เข้า แต่ลืม pass
  • ไม่มี SSH
  • SVN เปิดให้ใช้แบบ HTTP ได้
ทำยังไงจะ backup SVN ตัวนี้ทั้งก้อนออกมาได้ 

ถ้าไม่ต้องคิดจะเอา revision ต่างๆตั้งแต่แรกมาด้วย  ก็ใช้ check out อย่างเดียวก็จบ
mkdir mylocalrepository
svn co http://servername/repository

แต่นี่จะเอาตั้งแต่ revision แรก
ก็เลยจะต้องใช้คำสั่ง svnadmin dump
svnadmin dump repositorypath
แล้วก็กะจะเอาลงไฟล์เป็นแบบนี้
svnadmin dump repositorypath > backup_rep.svn
แต่พอลอง
ptantiku@ptantiku-desktop:~/$ svnadmin dump http://servername/repository
svnadmin: 'http://servername/repository' is an URL when it should be a path
นั่นแปลว่า repositorypath จะต้องเป็นpathแบบlocalเท่านั้น  ห้ามใช้dumpข้ามเครื่อง

เลยต้องไปค้นดูว่าจะทำไงบ้าง
---- เจอ rsvndump  ทำได้ตรงๆเลย  น่าเสียดายดัน bbuilt ไม่ผ่าน หาใน app-get ของ ubuntu ก็ไม่เจอ
(http://rsvndump.sourceforge.net , http://blog.sourcehosting.net/2008/11/03/dump-remote-subversion-repository/)
update:: download ที่เป็น tar.gz มา แล้วลง package เพิ่มอีกคือ libapr1-dev กับ libsvn1-dev (รวมถึงdependency)  แล้วจะสามารถ make, make install ได้ง่ายๆ
ซึ่งถ้าใช้ตัวนี้แล้วง่ายมาก  แค่  
$rsvnsync  http://servername/repository  >  backup_rep.svn

---- มีบางคนบอกให้ไปลองใช้  svk  ซึ่งเป็นเครื่องมือจัดการกับพวกversion control อันนี้ยังไม่ได้อ่านและลอง
http://moelhave.dk/2006/07/remote-mirroring-a-subversion-svn-repository/ อันนี้ดันบอกให้สร้างจำลองมาไว้ ในเครื่องตัวเองก่อน เห็นว่ายุ่งยากเลยไม่เอา)  และ SVK ไม่มีอยู่ใน app-get ของ ubuntu มาตรฐาน

---- สุดท้ายก็เลยมาลงที่เครื่องมือพื้นฐานของ SVN  ที่ชื่อว่า svnsync

โดยสร้าง repository เปล่าๆที่เครื่องก่อน
svnadmin create /home/svn/repository
ตั้งค่า hooks
echo ‘#!/bin/sh’ >  /home/svn/repository/hooks/pre-revprop-change
chmod +x /home/svn/repository/hooks/pre-revprop-change
สั่ง svnsync เพื่อทำการดาวน์โหลดrepositoryในแต่ละrevisionจากserver
svnsync init file:////home/svn/repository http://example.com/project_repository
svnsync sync file:////home/svn/repository
เมื่อ sync เสร็จแล้ว
สั่ง svnadmin dump ที่เครื่องเพื่อ เอาออกมาเป็นไฟล์
svnadmin dump /home/svn/repository > backup_rep.svn 
แล้วก็ลบทิ้งด้วย
rm -rf /home/svn/repository 

ได้มาแล้วก็ต้องทดสอบ  ด้วยการสร้างrepository ขึ้นมาใหม่แล้วก็ ลองใส่เข้าไป
mkdir  /home/svn/newrepo
svnadmin create /home/svn/newrepo
svnadmin load /home/svn/newrepo < backup_rep.svn

พอเห็นผลลัพธ์เป็นอะไรทำนอง

------- Committed revision 264 >>>

<<< Started new transaction, based on original revision 265
     * editing path : ABC/.classpath ... done.
     * editing path : ABC/META-INF/MANIFEST.MF ... done.
     * adding path : ABC/ABCInterfaces.jar ... done.
     * adding path : ABC/ABCNotebook.jar ... done.
     * editing path : ABC/build.properties ... done.
     * editing path : ABC/build.xml ... done.

ก็โอเคละ ผ่าน ใช้ได้

No comments:

Post a Comment