2013-07-25 19 views
10

Özel bir sorunum var Burada veya başka bir yerde çözüm bulunamadı. Bir SVN deposu var ve ona erişmek ve üzerinde çalışmak için git-svn kullanıyorum.Git-svn'deki boş dizinleri nasıl kaldırabilirim?

Bir süre önce, SVN deposunda bazı boş dizinler vardı (boş, yalnızca alt klasörler). Git bunları izlemiyor. Sonra onları SVN deposundan sildiler. Ama hala bile

git svn rebase 

çalıştırdıktan sonra onlara sahip Ve ben onları eliyle silerken, bunlar sırasında yeniden yaratılır sonraki ben onlardan kurtulmak nasıl

git svn rebase 

?

Saf SVN kullanarak kontrol ettim ve depoda değiller.

+0

Hmmm, bu garip. Git, dizinleri hiç bilmiyor veya takip etmiyor. Patronunuzun onları silmişken kaçırmış olabileceği bu dizinlerde eski görünmez dosyalar olup olmadığını kontrol ettiniz mi? Gizli dosyaları kontrol etmek için dizinde 'ls -la' yapmayı deneyin. – Leif

+0

Geceyarısı Komutanı hiçbir şey saklamaz;) Klasörler boş. Bu bir hata olabilir mi? :/ – Paladin

+0

Git ile birçok (birçok) hayal kırıklığım vardı, ama henüz bir yasal "hata" ile karşılaştım. Benim sıkıntılarımın çoğu benim anlayış eksikliğim yüzünden ortaya çıktı. Git komut satırından 'git status'unu yaparsanız ne olur? Klasörler herhangi bir şansla "izlenimsiz" olarak görünüyor mu? Bu dizinlerde 'ls-files dizin_adı -error-unmatch' komutunu yaparsanız; 'true' veya 'false 'döndürüyor mu? Klasörlerin yeni bir klonla birlikte eklenip eklenmediğini görmek için depo ile ('git clone ') Git'i yeniden klonlamayı deneyin; Belki sadece eski bir revizyondan takılıyorlar. Ben sadece burada çılgınca tahmin ediyorum. – Leif

cevap

1

Biraz kaba, ama şu benim sorunu çözer olduğunu bulduk:

rm .git/svn/refs/remotes/trunk/unhandled.log 
git clean -df 

git svn rebase 

şey sonradan yeniden olmayacaktır Herhangi.

Repo'yu yeniden klonlamadan bu dosyayı nasıl yeniden oluşturacağımı bilmediğimden, öncelikle bir yedeğini almanızı öneririm. Bu bir metin dosyasıdır, bu yüzden boş dizinleri yeniden denemek gerektiğini de

+1

' .git' içindeki öğeleri silmeyin. –

11

Cevabınızı this blog post içinde bulacaksınız.

[...]

Remove directories from the SVN tree if there are no files left behind. SVN can version empty directories, and they are not removed by default if there are no files left in them. git cannot version empty directories. Enabling this flag will make the commit to SVN act like git. config key: svn.rmdir

To fix the root of the problem set the git config globally:

git config --global svn.rmdir true

[...]

+2

Ben de googling yaparken bu buldum, ama soruma cevap değil. Bu klasörü sildiğinizde ve git üzerinden taahhüt ettiğiniz durumlar içindir. Benim sorunum svn yoluyla bir kişi silmiş ama ben hala git deposunda var (ama onlar boş) ve onları sildiğimde otomatik olarak bir sonraki rebase yeniden oluşturulur. – Paladin

+0

Sanırım gerçekten "yapılabilecek doğru şey" değil, ama belki (Git'i kullanarak) kukla metin dosyalarını klasörlere ekleyebilirsin, 'ekle' ve 'onları', böylece izlendikten sonra silinsin. rm) dosyaları ve silme işlemini gerçekleştirir. O zaman belki de klasörlerden kurtulacaksın, ama tarihini biraz kirletecekti. – Leif

+0

Patronun bana bu yaklaşımı nasıl göndereceğini görebiliyorum: D – Paladin

1

Tell git svn oluşturarak sona girişleri kaldırmak için içeriği düzenlemek herhalde:

git config svn-remote.svn automkdirs false 

budur adam sayfanın ilgili bölümü: öyle değil (svn.rmdir için; işte bu yüzden) svn için boş dizinleri işlemekle/işlemekten konu ile bu konuyu karıştırmamak kolay olduğunu

svn-remote.<name>.automkdirs

Normally, the "git svn clone" and "git svn rebase" commands attempt to recreate empty directories that are in the Subversion repository. If this option is set to "false", then empty directories will only be created if the "git svn mkdirs" command is run explicitly. If unset, git svn assumes this option to be "true".

Not.

İlgili konular