เปลี่ยน URL ที่เก็บ SVN


116

โครงสร้าง SVN ปัจจุบันของฉัน:

Path: .
URL: svn://someaddress.com.tr/project
Repository Root: svn://someaddress.com.tr
Repository UUID: -------------------------------------
Revision: 10297
Node Kind: directory
Schedule: normal
Last Changed Author: ----
Last Changed Rev: 9812
Last Changed Date: 2010-12-20 17:38:48 +0100 (Mon, 20 Dec 2010)

แต่โครงการของเรา (ด้วยเหตุนี้บริการ SVN) จะทำงานsub.someaddress.com.trแทนsomeaddress.com.tr(someaddress.com.tr จะถูกเปลี่ยนเส้นทางไปที่อื่นเร็ว ๆ นี้)

เนื่องจากเป็นเซิร์ฟเวอร์สำหรับพัฒนาฉันจึงไม่แน่ใจว่าจะทำอย่างไร จะต้องใช้svn switchหรือsvn switch --relocate? นอกจากนี้ฉันจะต้องสลับ svn root someaddress.com.trหรือสาขาโครงการsomeaddress.com.tr/projectหรือไม่

คำตอบ:


208

ระบุว่าเซิร์ฟเวอร์ Apache Subversion จะถูกย้ายไปยัง DNS alias ใหม่นี้sub.someaddress.com.tr:

  • ด้วยการโค่นล้ม 1.7 svn relocateหรือสูงกว่าการใช้งาน ใช้ Relocate เมื่อตำแหน่งของเซิร์ฟเวอร์ SVN เปลี่ยนไป switchใช้เฉพาะในกรณีที่คุณต้องการเปลี่ยนสำเนาการทำงานในเครื่องของคุณไปยังสาขาอื่นหรือเส้นทางอื่น ถ้าใช้ TortoiseSVN คุณอาจทำตามคำแนะนำจากคู่มือการใช้งาน TortoiseSVN หากมีการใช้อินเตอร์เฟซบรรทัดคำสั่ง SVN โปรดดูที่ส่วนของเอกสาร SVN นี่ คำสั่งควรมีลักษณะดังนี้:

    svn relocate svn://sub.someaddress.com.tr/project

  • ใช้ต่อไป/projectเนื่องจากเนื้อหาจริงของที่เก็บของคุณอาจไม่เปลี่ยนแปลง

หมายเหตุ: svn relocateไม่สามารถใช้งานได้ก่อนเวอร์ชัน 1.7 (ขอบคุณ ColinM สำหรับข้อมูล) ในเวอร์ชันเก่าคุณจะใช้:

    svn switch --relocate OLD NEW

36
svn relocate ไม่พร้อมใช้งานก่อน 1.7 สำหรับรุ่นก่อน 1.7 ที่คุณใช้svn switch --relocate OLD NEW
ColinM

ลิงก์ TortoiseSVN เพิ่มเติมมีประโยชน์มากขอบคุณสำหรับสิ่งนั้น
MOnsDaR

ไม่ทราบเกี่ยวกับswitchคำสั่งเอกสารทั้งหมดที่ฉันพบทางออนไลน์สำหรับเวอร์ชันใหม่กว่า
Dustin Cook

สิ่งนี้มีประโยชน์เมื่อฉันต้องการย้ายจาก + ssh URL เป็น non-SSH หรือในทางกลับกันเช่นสวิตช์ svn - เชื่อมโยง svn + ssh: // _ svn_server _ / _ svn_project _ / _ svn_branch_ svn: // _ svn_server _ / _ svn_project _ / _ svn_project ขั้นตอนสุดท้ายมีประโยชน์อย่างยิ่งหากคุณทำการชำระเงินอัตโนมัติเป็น svn + ssh ในหลาย ๆ โหนดโดยใช้ Jenkins API และบางโหนด (โหนด Windows) ไม่มี SSH แต่คุณต้องลงชื่อเข้าใช้เครื่องสร้างและ "อัปเดต svn" ด้วยตนเองเพื่อ ทดสอบการแก้ไขด่วน
Alexander Samoylov

11

การจับ URL ก่อนและหลังอาจทำให้คุณสบายใจได้:

svn info | grep URL

  URL: svn://svnrepo.rz.mycompany.org/repos/trunk/DataPortal
  Relative URL: (...doesn't matter...)

และตรวจสอบเวอร์ชันของคุณ (เป็น> 1.7) เพื่อให้แน่ใจว่าsvn relocateเป็นสิ่งที่ถูกต้องที่จะใช้:

svn --version

สุดท้ายนี้การเพิ่มข้างต้นหากการเปลี่ยนแปลง url ที่เก็บของคุณเกี่ยวข้องกับการเปลี่ยนแปลงโปรโตคอลคุณอาจต้องระบุurl ก่อนและหลัง ( ดูที่นี่ )

svn relocate svn://svnrepo.rz.mycompany.org/repos/trunk/DataPortal
    https://svngate.mycompany.org/svn/repos/trunk/DataPortal

ทั้งหมดในบรรทัดเดียวแน่นอนหลังจากนั้นรับความรู้สึกที่ดีว่าทุกอย่างราบรื่น:

svn info | grep URL:

หากคุณรู้สึกว่ามันเพิ่มความมั่นใจในตัวเองอีกเล็กน้อย URL repo svn ใหม่จะเชื่อมต่อและใช้งานได้:

svn status --show-updates
svn diff

5

ในกรณีของฉันsvn relocateคำสั่ง (เช่นเดียวกับsvn switch --relocate) ล้มเหลวด้วยเหตุผลบางประการ (อาจย้าย repo ไม่ถูกต้องหรืออย่างอื่น) ฉันพบข้อผิดพลาดนี้:

$ svn relocate NEW_SERVER
svn: E195009: The repository at 'NEW_SERVER' has uuid 'e7500204-160a-403c-b4b6-6bc4f25883ea', but the WC has '3a8c444c-5998-40fb-8cb3-409b74712e46'

ฉันไม่ต้องการดาวน์โหลดที่เก็บทั้งหมดอีกครั้งดังนั้นฉันจึงพบวิธีแก้ปัญหาชั่วคราว มันใช้งานได้ในกรณีของฉัน แต่โดยทั่วไปฉันสามารถจินตนาการได้ว่ามีหลายสิ่งหลายอย่างที่อาจเสียหายได้ (ดังนั้นให้สำรองสำเนาที่ใช้งานของคุณหรือพร้อมที่จะชำระเงิน repo ทั้งหมดใหม่หากมีบางอย่างผิดพลาด)

ที่อยู่ repo และ UUID จะถูกบันทึกไว้ใน.svn/wc.dbไฟล์ฐานข้อมูล SQLite ในสำเนาการทำงานของคุณ เพียงแค่เปิดฐานข้อมูล (เช่นใน SQLite Browser) เรียกดูตาราง REPOSITORY และเปลี่ยนค่าคอลัมน์rootและเป็นuuidค่าใหม่ คุณสามารถค้นหา UUID ของ repo svn info NEW_SERVERใหม่โดยการออก

อีกครั้งให้ถือว่านี่เป็นวิธีสุดท้าย


@IgorGanapolsky: คุณสามารถเจาะจงมากขึ้นได้ไหม?
Martin Pecka

1
หากคุณอ่านโพสต์ของฉันอย่างละเอียดฉันไม่แนะนำให้เรียกใช้คำสั่งใด ๆ ฉันขอแนะนำให้แก้ไข SQLite DB
Martin Pecka

แต่การแก้ไข SQLite DB เกี่ยวข้องกับการรันคำสั่ง คำสั่ง SQL
Peter Flynn

ปรากฎว่าคุณใช้ sqlite ไม่ได้ คุณต้องใช้ sqlitebrowser ตามที่แนะนำ แปลก.
Peter Flynn

1

หากคุณต้องการผูกมัดกับ Repo ใหม่ที่ว่างเปล่าคุณสามารถชำระเงิน Repo ใหม่ที่ว่างเปล่าและยอมรับ repo ระยะไกลใหม่
chekout Repo ใหม่ที่ว่างเปล่าจะไม่ลบไฟล์ในเครื่องของคุณ
ลองสิ่งนี้: ตัวอย่างเช่น url repo ระยะไกล: https://example.com/SVNTest cd [YOUR PROJECT PATH] rm -rf .svn svn co https://example.com/SVNTest ../[YOUR PROJECT DIR NAME] svn add ./* svn ci -m"changed repo url"


สิ่งนี้จะทำอย่างไรกับประวัติศาสตร์?
MattBianco
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.