Dengan menggunakan PHP, Perl, atau Python (sebaiknya PHP), saya memerlukan cara untuk meminta database SVN dan mengetahui nomor revisi terakhir yang dikirim ke SVN. Saya tidak butuh apapun selain itu. Ini perlu non-intensif (jadi saya melakukannya setiap 5 menit sebagai tugas cron; kinerja SVN tidak boleh terpengaruh).
SVN terletak di Intranet saya, tetapi tidak di komputer khusus saya.
Saya telah menginstal SVN, tetapi tidak ada binding yang diinstal untuk PHP / Perl / Python. Saya menjalankan Windows XP, tetapi saya lebih memilih solusi yang tidak bergantung platform yang juga dapat bekerja di Linux. Jika Anda memiliki solusi khusus Linux (atau hanya XP), itu juga akan membantu.
$ svn info --show-item revision
svn: invalid option: --show-item
Menggunakan Apache Subversion 1.8.16 (r1740329) yang dikompilasi 26 April 2016. Juga dicoba dengan CollabNet 1.6.11 (r934486) yang dikompilasi 6 Maret 2014.svn help info
opsi hukum untuksvn info
--show-item
tersediaJawaban:
Anda bisa mendapatkan hasilnya dalam XML seperti ini:
Jika terjadi error maka output akan diarahkan ke stderr. Untuk menangkap stderr dalam output Anda, gunakan sebagai berikut:
sumber
svn info $url 2>&1
;svn info $url | grep 'Last Changed Rev' | awk '{ print $4; }'
svn info --show-item revision $url
atausvn info --show-item last-changed-revision $url
.Jika Anda ingin menganalisis copy pekerjaan lokal, alat terbaik adalah
svnversion
, yang disertakan dengan Subversion dan menghasilkan keluaran seperti968:1000M
. Dokumentasinya mengatakan:sumber
Ini akan memberi Anda nomor revisi terbaru di bagian atas repositori Anda.
Ada beberapa posting blog yang bagus tentang mengintegrasikan nomor subversi ke dalam skrip build Anda:
sumber
svn info -r HEAD
Ini harus bekerja di Bash, dari direktori kerja. Saya telah menggunakannya di Windows dengan unixutils diinstal:
sumber
svn info | grep Revision | cut -d " " -f 2
akan mengembalikan string kedua setelah dipisahkan menggunakan spasi.Berikut ini seharusnya bekerja:
Ini mengembalikan satu nomor revisi.
sumber
Untuk benar-benar mendapatkan nomor revisi ("revisi kepala") terbaru pada penyimpanan jarak jauh Anda , gunakan ini:
Keluaran misalnya:
sumber
Catatan tentang mendapatkan nomor revisi terbaru:
Katakanlah saya sudah
cd
-ed di subdirektori direvisi (MyProjectDir
). Kemudian, jika saya meneleponsvnversion
:... Saya mendapatkan "
323:340
", yang menurut saya berarti: " Anda memiliki item di sini, mulai dari revisi 323 hingga 340 ".Kemudian, jika saya menelepon
svn info
:... Saya mendapatkan "
323
" sebagai revisi - yang sebenarnya merupakan revisi terendah dari yang dilaporkan olehsvnversion
!Kita kemudian dapat menggunakan
svn info
mode rekursif untuk mendapatkan lebih banyak informasi dari direktori lokal:... (hapus
grep
untuk melihat lebih detil).Terakhir, apa yang harus dilakukan ketika kita ingin memeriksa apa yang merupakan revisi terbaru dari repositori online (dalam hal ini, @
server.com
)? Kemudian kami kembali menerbitkansvn info
, tetapi dengan-r HEAD
(perhatikan perbedaan antara-R
opsi modal sebelumnya, dan huruf kecil-r
sekarang):Hal yang menarik adalah -
svn info
masih mengacu pada subdirektori saat ini (MyProjectDir
), namun, jalur online dilaporkan sebagaiMyProjectDir
(sebagai lawan.
untuk kasus lokal) - dan revisi online yang dilaporkan adalah yang tertinggi (340
- dibandingkan dengan yang terendah,323
dilaporkan lokal).sumber
Dimulai dengan Subversion 1.9 Anda dapat menggunakan opsi --show-item untuk mendapatkan nilai dari salah satu bidang
svn info
keluaran perintah. Perintah ini hanya akan menampilkan nomor revisi:Dapatkan output XML dari info svn menggunakan
--xml
opsi dan gunakan PowerShell untuk mendapatkan nomor revisi. Berikut ini contoh sederhananya:Menggunakan VisualSVN Server 3.4 atau yang lebih baru, Anda bisa mendapatkan jumlah revisi dalam repositori dengan menjalankan perintah berikut:
$repo = Get-SvnRepository <REPOSITORY-NAME>
$repo.Revisions
Lihat
Get-SvnRepository
Referensi cmdlet PowerShell untuk informasi lebih lanjut.sumber
Saya pikir Anda sedang mencari
Bisakah Anda melakukan shell untuk perintah itu?
Anda mungkin perlu memberikan kredensial login dengan repositori juga.
sumber
Seseorang mengalahkan saya untuk memposting jawaban tentang
svnversion
, yang pasti merupakan solusi terbaik jika Anda memiliki salinan yang berfungsi (IIRC, itu tidak berfungsi dengan URL). Saya akan menambahkan ini: jika Anda menggunakan server yang menghosting SVN, cara terbaik adalah menggunakansvnlook
perintah. Ini adalah perintah yang Anda gunakan saat menulis skrip hook untuk memeriksa repositori (dan bahkan transaksi saat ini, dalam kasus hook pra-komit). Anda dapat mengetiksvnlook help
untuk detailnya. Anda mungkin ingin menggunakansvnlook youngest
perintah tersebut. Perhatikan bahwa ini membutuhkan akses langsung ke direktori repo, jadi itu harus digunakan di server.sumber
Atau
Atau
sumber
Anda dapat menggunakan salah satu perintah:
sumber
Jika Anda ingin yang sangat pendek:
The notasi tanda sisipan adalah singkatan untuk "URL direktori root repositori".
sumber
Jika Anda tidak beruntung karena harus melakukan ini dari file batch Windows, berikut adalah mantra yang Anda cari:
Ini menjalankan "svn info", melakukan iterasi melalui setiap baris keluaran yang dihasilkan. Ini menggunakan titik dua sebagai pemisah antara token pertama dan kedua di baris. Saat token pertama adalah "Revisi", variabel lingkungan REV disetel ke token kedua.
sumber
FOR /F "tokens=2" %%i IN ('svn info ^| FINDSTR Revision:') DO SET revision=%%i
Anda mencari panggilan yang mirip dengan panggilan baris perintah
Tampaknya hal ini dapat dilakukan dengan menggunakan perpustakaan pysvn, dan ada resep yang dapat membantu Anda memulai. Saya tidak yakin apakah ada yang serupa untuk PHP.
Jika Anda perlu memanggil sendiri biner SVN, pastikan untuk menggunakan
--xml
parameter untuk mendapatkan hasilnya sebagai XML. Itu seharusnya lebih mudah diurai daripada keluaran baris perintah.sumber
subprocess.check_output
python untuk menghindari panggilan perpustakaan lain. Jika Anda hanya memeriksa nomor revisi / menarik salinan terbaru, lebih mudah menggunakan svn dari baris perintah melaluisubprocess
. Sekarang, jika Anda melakukan check-in dan penggabungan otomatis ...Anda dapat menggunakan format XML out, misalnya:
Contoh: menggunakan nomor revisi
sumber
Anda dapat mencoba perintah di bawah ini:
sumber
Hanya
svn info
di BASH akan memberi Anda semua detailAnda akan mendapatkan REVISI dari ini
sumber
Cara termudah dan bersih untuk melakukannya (sebenarnya svn 1.9, dirilis 2015) adalah menggunakan:
Outputnya adalah jumlah file revisi terakhir (paling muda) untuk SVNURL, atau nomor revisi saat ini dari copy pekerjaan SVNPATH. Ini
--no-newline
opsional, menginstruksikansvn
untuk tidak mengeluarkan baris baru kosmetik (\n
) setelah nilai, jika Anda memerlukan keluaran minimal (hanya nomor revisi).Lihat: https://subversion.apache.org/docs/release-notes/1.9.html#svn-info-item
sumber
svn info --show-item
, alih-alih--show item
Solusi yang diposting tidak menangani kasus saat eksternal digunakan.
Jika saya memiliki URL atau copy pekerjaan dengan
svn:externals
set properti, eksternal dapat berubah dan dengan demikian revisi terbaru server subversi akan berubah. Tapi revisi terbaru dari copy pekerjaan atau URL hanya akan melaporkan nomor revisi ketika properti svn: externals diubah atau item lebih rendah di jalur URL, yang merupakan perilaku yang diharapkan.Jadi Anda juga mendapatkan
svn:externals
properti dan mengulang URL dan memilih revisi ketinggian atau menanyakan URL dasar dari server subversi. Versi yang dilaporkan dari URL dasar akan berisi revisi terbaru untuk SEMUANYA di server.Jadi, jika Anda menggunakan eksternal, sebaiknya gunakan
svn info BASE_URL
whereBASE_URL
adalah URL root untuk semua jalur di server subversi.sumber
Ini hanya akan mendapatkan nomor revisi dari revisi terakhir yang diubah:
Saya harap ini membantu.
sumber
$ svn log | head -10
di direktori mana pun yang memiliki.svn
foldersumber
svn info
atausvnversion
tidak akan mempertimbangkan subdirektori, untuk menemukan 'revisi' terbaru dari basis kode langsung, cara hack di bawah ini berhasil bagi saya - mungkin perlu beberapa saat untuk menjalankan:sumber
Ini dapat diperoleh dengan menggunakan pustaka "SVN" :
Head_revision harus berisi nomor revisi terbaru dari file tersebut
sumber
Sepertinya ada entri di FAQ resmi untuk ini . Kode sumber ada di C tetapi prinsip yang sama berlaku, seperti yang dijelaskan di sini dalam posting milis ini .
sumber
Pembaruan: Subversion 1.9 akan mendukung perintah baru "svn youngest" yang hanya mengeluarkan nomor revisi terbaru. Perbedaan dari "svnlook termuda" adalah "svn youngest" juga bekerja dari jarak jauh.
http://subversion.tigris.org/issues/show_bug.cgi?id=4299
sumber