Bir SVN taahhüt mesajını neden düzenleyemiyorum?


12

SVN kullanıyorum. Bazen bir taahhüt mesajı yazarken bir şeyleri özlüyorum. Ama bir kez yapıldıktan sonra, geri alınamaz ve hatta mesajı düzenleyemiyorum. Düzenleme işlevini neden koymadılar?


7
Hikayesi hatırlatıyor Dave.cpp thedailtywtf üzerinde
Falcon

1
Sadece kullanmak budala , bu hareketin, düzenleme mesajları birleştirme ve tarihi ile benzeri her türlü başka yapmanızı sağlar.
SK-logic

Ya da yapamazsan, kullan git-svnve kimse daha akıllı olmayacak.
Matthew Scharley

@Matthew: Git-svn ile yeryüzünde, bir tarih düzenleme devre dışı bırakılmış svn deposundaki geçmişi değiştirmenize nasıl izin verilir?
gbjbaanb

2
@gbjbaanb: Zaten SVN sunucusuna geçtiyseniz, olmazdı. Ancak yalnızca yerel olarak taahhütte bulunduysanız, taahhütlü mesajı canlı repoya göndermeden önce yine de değiştirebilirsiniz.
Matthew Scharley

Yanıtlar:


15

SVN SSS'ye göre , havuz yöneticisi tarafından etkinleştirildiyse veya depoya yerel yönetim erişiminiz varsa yapabilirsiniz .

Ancak, bunu yapmak muhtemelen kötü bir fikirdir. Aslında, tarihi değiştiriyorsunuz. Sürüm kontrolünün noktalarından biri, proje için bir geçmiş ve denetim izi tutmaktır. Geçmişte keyfi değişikliklere izin vermek denetim takibini yener. Bunun yerine, daha kısa taahhütler gerçekleştirmenizi, kısa ve kesin taahhüt mesajları yazmanızı ve bu hataları önlemek için kişisel iş akışınızı iyileştirmenizi öneririm.


4
@Matthew Git'te bile, herhangi bir noktada tarihi değiştirmek, bence, korkunç bir fikir. Tarihin bir denetim izi görevi görmesi gerekiyor ve hiçbir zaman herhangi bir nedenle herhangi bir nedenle değiştirilmemelidir.
Thomas Owens

2
Dolayısıyla, taahhüt mesajı için bir denetim takibi yapın , çünkü genellikle taahhüt mesajını değiştirmenin amacı , projenin geçmişini takip etmeyi kolaylaştırmaktır .
Peter Taylor

2
Bir ay önce girmiş olduğum bir taahhüt mesajının yanıltıcı, kafa karıştırıcı ve düpedüz yanlış olduğunu varsayalım . Yanlış mesajı gören herkesin göreceği bir düzeltme işareti ekleyebilmem gerekir mi? (Orijinal mesajın değiştirilememesi ve değişimin kendisinin izlenmesi ve zaman damgası alınması gerektiğine katılıyorum. Ancak bunun "değişen tarih" olduğunu kabul
etmiyorum

2
Yanlış bilgi kabul edilemez, bu nedenle insanların bu bilgileri düzeltmelerine veya açıklığa kavuşturmasına izin verilmemelidir, çünkü bu onların kötüye kullanımlarını gizler. Vay. Sadece vay canına.
David Schwartz

3
Dürüst olmak gerekirse, bir özlük gibi görünmeye başlıyorsunuz. "Doğru olmalı, bu yüzden asla düzeltilmemelidir."
David Schwartz

5

Esasen bunu yapmak için depoya yönetici haklarına (doğrudan veya dolaylı olarak) sahip olmanız gerekir. Depoyu tüm kullanıcıların bunu yapmasına izin verecek şekilde yapılandırabilir veya günlük iletisini doğrudan sunucuda değiştirebilirsiniz.

Buradaki SVN SSS bölümünü kontrol edin .

Günlük iletileri, her bir düzeltmeye eklenmiş özellikler olarak depoda tutulur. Varsayılan olarak, günlük iletisi özelliği (svn: log) işlendikten sonra düzenlenemez. Bunun nedeni, (svn: log bir tanesi olan) revizyon özelliklerinde yapılan değişikliklerin, mülkün önceki değerinin kalıcı olarak atılmasına neden olması ve Subversion'ın bunu yanlışlıkla yapmanıza engel olmaya çalışmasıdır. Ancak, Subversion'u bir revizyon özelliğini değiştirmenin birkaç yolu vardır.

İlk yol, havuz yöneticisinin revizyon özelliği değişikliklerini etkinleştirmesidir. Bu, "revprop-değişim öncesi" adlı bir kanca oluşturarak yapılır (bunun nasıl yapılacağı hakkında daha fazla ayrıntı için Subversion kitabındaki bu bölüme bakın). "Değişiklik öncesi değişiklik" kancası değiştirilmeden önce eski günlük iletisine erişebilir, böylece bir şekilde koruyabilir (örneğin, bir e-posta göndererek). Revizyon özelliği değişiklikleri etkinleştirildikten sonra, --revprop anahtarını svn propedit veya svn propset öğesine geçirerek aşağıdakilerden biri gibi bir revizyonun günlük mesajını değiştirebilirsiniz:

$svn propedit -r N --revprop svn:log URL 
$svn propset -r N --revprop svn:log "new log message" URL 

burada N, günlük mesajını değiştirmek istediğiniz revizyon numarasıdır ve URL, deponun konumudur. Bu komutu çalışan bir kopyadan çalıştırırsanız URL'yi bırakabilirsiniz.

Bir günlük mesajını değiştirmenin ikinci yolu svnadmin setlog kullanmaktır. Bu, deponun dosya sistemindeki konumuna bakılarak yapılmalıdır. Bu komutu kullanarak uzak bir havuzu değiştiremezsiniz.

$ svnadmin setlog REPOS_PATH -r N FILE

burada REPOS_PATH depo konumu, N, günlük mesajını değiştirmek istediğiniz revizyon numarası ve FILE yeni günlük mesajını içeren bir dosyadır. "Değişiklik öncesi değiştirme" kancası yerinde değilse (veya bir nedenle kanca komut dosyasını atlamak istiyorsanız) --bypass-hooks seçeneğini de kullanabilirsiniz. Ancak, bu seçeneği kullanmaya karar verirseniz, çok dikkatli olun. Değişikliğin e-posta bildirimleri veya düzeltme özelliklerini takip eden yedekleme sistemleri gibi öğeleri atlıyor olabilirsiniz.

Dan Yanıt Kamil Kisiel cevaben Yığın taşması benzer bir soru .


Stackoverflow'dan bir cevap yapıştırdığınızda, en azından bir teklif olarak işaretlemeli ve OP'ye kredi vermelisiniz (bu durumda Kamil Kisiel). Orijinaline bağlantı: stackoverflow.com/questions/304383/… Lütfen yanıtınızı düzenleyin yoksa sizi aşağıya indireceğim.
Falcon

4

Bir Çünkü merkezi versiyon kontrol sistemi - Farklı yakında (ve sizin işlemeye mesaj kongre ile bağlıdır taahhüt) bir değişiklik taahhüt olarak, depo okuma erişimi olan herkes bu bilgileri görebilirsiniz. Bilgiyi yayıldıktan sonra değiştirmek kötü bir fikirdir , çünkü insanlar farklı bir “gerçeklik” görüşüyle ​​sonuçlanır.

Git gibi dağıtılmış sürüm kontrol sistemleri, başkalarına bilgi verme eyleminin atomik olduğunu ve taahhüt mesajları gibi ek bilgiler içermediğinden emin olarak bu sorunu hafifletir. Ancak aynı prensip burada da geçerlidir: Başkaları tarafından zaten erişilebilir hale getirdiğiniz şeyleri yerel olarak değiştirmekten vazgeçiyorsunuz.



1
@ l0b0 Yanlış, yanıltıcı veya zarar vermeye eğilimli bilgileri yaymaya devam etmek objektif olarak daha kötü değil mi? Kayıt tutma, kötü verilerin saklanmasını gerektirmez.
user179700

1
@ user179700: Haklısın. Gördüğüm tüm VCS'lerde temelde kusurlu bir tasarım varsayımı var: Bir taahhüdün değişmez bir taahhüt mesajı var. Alex'in dediği gibi, "tamamlama mesajının birden fazla sürümüne izin vermeliyiz".
l0b0

@ l0b0 Bu soruyu daha çok düşündüğümde ilginç buluyorum. İlk tepkim çizgisinde oldu, sadece daha dikkatli yaz. Mevcut uygulama süreci bozuyor gibi görünüyor. Başka herhangi bir sistemin daha sağlam bir uygulama yapıp yapmadığını merak ediyorum. Başka bir soru methinks zamanı. +1
user179700

@ user179700: Şu anda bir taahhüt iletisini değiştirmenize izin veren bir komut dosyası yazmayı umuyorum, ancak yalnızca (zaman damgası eklenmiş) ek dize ekleyerek. Bu, denetim izini korurken hataları düzeltmenizi sağlar.
Tynam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.