Bagaimana cara melihat apa yang akan diperbarui dari repositori sebelum mengeluarkan perintah "svn update"?

115

Saya telah melakukan perubahan dalam banyak file ke repositori SVN dari Eclipse.

Saya kemudian pergi ke direktori situs web di kotak linux di mana saya ingin memperbarui perubahan ini dari repositori ke direktori di sana.

Saya ingin mengatakan "svn update project100" yang akan memperbarui direktori di bawah "project100" dengan semua file saya yang ditambahkan dan diubah, dll.

NAMUN, saya tidak ingin selalu memperbarui perubahan yang tidak saya buat. Jadi saya pikir saya bisa mengatakan "svn status project100" tetapi ketika saya melakukan ini saya mendapatkan daftar perubahan yang sama sekali berbeda yang akan dibuat, tidak ada saya yang ada di daftar, yang aneh.

Oleh karena itu untuk memastikan bahwa hanya perubahan saya yang diperbarui ke direktori web, saya terpaksa menavigasi ke setiap direktori di mana saya tahu ada perubahan yang saya buat dan secara eksplisit hanya memperbarui file-file itu, misalnya "svn update newfile1.php" dll. yang membosankan.

Adakah yang bisa menjelaskan prosedur kerja standar di sini, yaitu bagaimana saya mendapatkan daftar akurat dari semua perubahan yang akan dilakukan sebelum saya menjalankan perintah "svn update"? Saya pikir itu adalah perintah "status".

Edward Tanguay
sumber

Jawaban:

167

Mencoba:

svn status --show-updates

atau (sama tapi lebih pendek):

svn status -u
Dave Webb
sumber
9
atau lebih pendek: svn st -u
Kenyakorn Ketsombut
Apa arti X dalam keluaran?
IgorGanapolsky
1
Juga, gunakan: svn status -q -u... Hanya menampilkan perubahan pembaruan dan perubahan lokal yang berhubungan dengan file yang termasuk dalam repositori. Anda tidak mendapatkan tanda tanya (?) Dari file non-repositori.
akan
56

Bergantung pada apa yang ingin Anda ketahui antara copy pekerjaan Anda dan repositori server svn terbaru, tanpa memperbarui copy pekerjaan lokal Anda, berikut ini yang dapat Anda lakukan:

jika Anda ingin tahu apa yang telah diubah di repositori server svn, jalankan perintah:

$ svn st -u

jika Anda ingin mengetahui apakah file yang sama telah dimodifikasi baik di copy pekerjaan lokal Anda dan di repositori server svn, jalankan perintah:

$ svn st -u | grep -E '^M {7}\*'

jika Anda ingin mengubah daftar file antara revisi tertentu dan HEAD, jalankan perintah:

$ svn diff -r revisionNumber:HEAD --summarize

jika Anda ingin mendapatkan daftar file yang diubah antara revisi paticular, jalankan perintah:

$ svn diff -r revisionNumber:anotherRevisionNumber --summarize

jika Anda ingin melihat apa yang akan diperbarui (tanpa benar-benar memperbarui), jalankan perintah:

$ svn merge --dry-run -r BASE:HEAD .

Jika Anda ingin mengetahui konten file tertentu yang telah diubah di repositori server svn dibandingkan dengan copy pekerjaan Anda, jalankan perintah:

$ svn diff -r BASE:HEAD ./pathToYour/file

jika Anda ingin mengetahui konten apa dari semua file yang telah diubah di repositori server svn dibandingkan dengan copy pekerjaan Anda, jalankan perintah:

$ svn diff -r BASE:HEAD .
TianCaiBenBen
sumber
43

Anda dapat melihat apa yang akan diperbarui (tanpa benar-benar memperbarui) dengan menerbitkan:

svn merge --dry-run -r BASE:HEAD .

Lebih lengkapnya di sini .

Ben Hoffstein
sumber
Di atas tidak berhasil untuk saya, harus larisvn merge --dry-run --revision BASE:HEAD .
Znarkus
3
Mendapatkan "svn: E195020: Tidak dapat menggabungkan ke dalam copy pekerjaan revisi campuran [16032: 16061]; coba perbarui dulu"
Hubert Grzeskowiak
Jawaban bagus -
sayang
2
@HubertGrzeskowiak - Saya suka ironi q: how do I ... without doing an update?a: first, do an update, then ...:) :) :)
Jesse Chisholm
17

Inilah yang saya cari. Memeriksa Google terlebih dahulu, tetapi svn helpakhirnya datang untuk saya :)

svn diff -r BASE:HEAD .
Jeff
sumber
14

Sama tapi lebih pendek lebih pendek :):

svn st -u
Kenzo
sumber
0

Anda dapat menggunakan 'svn diff' untuk melihat perbedaan antara copy pekerjaan Anda dan repositori.

Andrew
sumber
9
Salah. Itu hanya akan mencantumkan perbedaan antara Anda dan terakhir kali Anda menyinkronkan dengan repositori. Anda tidak akan melihat perbedaan apa pun yang telah dilakukan orang lain ke repositori untuk sementara. OP ingin tahu apa perubahan mereka adalah, tanpa menerapkan mereka melaluisvn update
dland
@Andrew bermaksud menyarankan agar OP menjalankan 'svn diff -r HEAD URL' untuk melihat perbedaan dari file yang diperiksa dengan apa yang diperiksa sebagai HEAD atau versi teratas dalam repositori.
Mac
0

Secara teori, Anda dapat membuat semua perubahan Anda di cabang yang Anda buat untuk Anda gunakan sendiri. Anda kemudian akan cukup yakin bahwa Andalah satu-satunya yang berkomitmen untuk itu.

Pengembangan fitur IMHO harus dilakukan seperti ini.

Kemudian Anda dapat memperbarui mesin target ini dari cabang ini, bukan dari bagasi.

Rory Becker
sumber