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?
git-svn
ve kimse daha akıllı olmayacak.
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?
git-svn
ve kimse daha akıllı olmayacak.
Yanıtlar:
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.
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 .
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.