Ubah URL repositori SVN

116

Struktur SVN saya saat ini:

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)

Tetapi proyek kami (karenanya layanan SVN) akan berfungsi alih- sub.someaddress.com.tralih someaddress.com.tr(someaddress.com.tr akan segera dialihkan ke tempat lain).

Karena ini adalah server pengembangan, saya tidak yakin tentang apa yang harus dilakukan. Apakah saya perlu menggunakan svn switchatau svn switch --relocate? Juga, apakah saya perlu mengganti svn root someaddress.com.tr atau cabang proyek someaddress.com.tr/project ?

FallenAngel
sumber

Jawaban:

208

Mengingat bahwa server Apache Subversion akan dipindahkan ke alias DNS baru ini sub.someaddress.com.tr::

  • Dengan Subversion 1.7 atau lebih tinggi, gunakan svn relocate. Relokasi digunakan ketika lokasi server SVN berubah. switchhanya digunakan jika Anda ingin mengubah copy pekerjaan lokal Anda ke cabang lain atau jalur lain. Jika menggunakan TortoiseSVN, Anda bisa mengikuti instruksi dari Manual TortoiseSVN . Jika menggunakan antarmuka baris perintah SVN, lihat bagian dokumentasi SVN ini . Perintahnya akan terlihat seperti ini:

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

  • Tetap gunakan /projectkarena konten sebenarnya dari repositori Anda mungkin tidak akan berubah.

Catatan: svn relocatetidak tersedia sebelum versi 1.7 (terima kasih kepada ColinM untuk infonya). Dalam versi yang lebih lama Anda akan menggunakan:

    svn switch --relocate OLD NEW
Juanal
sumber
36
svn relocate tidak tersedia sebelum 1.7. Untuk pra 1.7 Anda akan menggunakansvn switch --relocate OLD NEW
ColinM
Tautan tambahan TortoiseSVN sangat membantu, terima kasih untuk itu
MOnsDaR
Tidak tahu tentang switchperintah semua dokumentasi yang saya temukan online adalah untuk versi yang lebih baru.
Dustin Cook
Ini berguna ketika saya perlu pindah dari + ssh URL ke non-SSH atau sebaliknya, misalnya: svn switch --relocate svn + ssh: // _ svn_server _ / _ svn_project _ / _ svn_branch_ svn: // _ svn_server _ / _ svn_project _ / _ svn_branch. Yang terakhir sangat membantu jika Anda melakukan pembayaran otomatis sebagai svn + ssh pada beberapa node menggunakan Jenkins API dan beberapa di antaranya (node ​​Windows) tidak memiliki SSH, tetapi Anda perlu masuk ke mesin build dan "svn update" secara manual untuk uji beberapa perbaikan cepat.
Alexander Samoylov
11

Mengupas URL sebelum dan sesudah mungkin memberi Anda ketenangan pikiran:

svn info | grep URL

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

Dan memeriksa versi Anda (menjadi> 1.7) untuk memastikan, svn relocateadalah hal yang benar untuk digunakan:

svn --version

Terakhir, menambahkan di atas, jika perubahan url repositori Anda juga melibatkan perubahan protokol, Anda mungkin perlu menyatakan url sebelum dan sesudah ( lihat juga di sini )

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

Semua dalam satu baris tentunya, setelah itu dapatkan perasaan nyaman bahwa semua berjalan dengan lancar:

svn info | grep URL:

Jika Anda mau, sedikit lebih percaya diri, URL repo svn baru terhubung dan berfungsi:

svn status --show-updates
svn diff
Frank Nocke
sumber
5

Dalam kasus saya, svn relocateperintah (dan juga svn switch --relocate) gagal karena beberapa alasan (mungkin repo tidak dipindahkan dengan benar, atau sesuatu yang lain). Saya menghadapi kesalahan ini:

$ 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'

Saya tidak ingin mengunduh ulang seluruh repositori, jadi saya menemukan solusi. Ini berfungsi dalam kasus saya, tetapi secara umum saya dapat membayangkan banyak hal dapat rusak (jadi buat cadangan copy pekerjaan Anda, atau siap untuk melakukan checkout ulang seluruh repo jika terjadi kesalahan).

Alamat repo dan UUID-nya disimpan dalam .svn/wc.dbfile database SQLite di copy pekerjaan Anda. Cukup buka database (misalnya di SQLite Browser), telusuri tabel REPOSITORY, dan ubah nilai kolom rootdan uuidke yang baru. Anda dapat menemukan UUID dari repo baru dengan menerbitkan svn info NEW_SERVER.

Sekali lagi, perlakukan ini sebagai metode pilihan terakhir.

Martin Pecka
sumber
@IgorGanapolsky: Bisakah Anda lebih spesifik?
Martin Pecka
1
Jika Anda membaca posting saya dengan hati-hati, saya tidak menyarankan untuk menjalankan perintah apa pun. Saya sarankan mengedit DB SQLite.
Martin Pecka
Tetapi mengedit DB SQLite melibatkan menjalankan perintah. Perintah SQL.
Peter Flynn
Ternyata Anda tidak bisa menggunakan sqlite; Anda harus menggunakan sqlitebrowser seperti yang disarankan. Aneh.
Peter Flynn
1

Jika Anda ingin berkomitmen untuk Repo kosong baru, Anda dapat melakukan checkout Repo kosong baru dan berkomitmen ke repo jarak jauh baru.
chekout Repo kosong baru tidak akan menghapus file lokal Anda.
coba ini: misalnya, url repo jarak jauh: 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"

leo.tan
sumber
Apa yang akan terjadi pada sejarah?
MattBianco