git
altında bir projem var. Bir gün tüm proje dosyalarını geçerli dizinden proje kapsamında foo/bar/
'a taşıdım. git mv
kullanarak yaptım. Daha sonra bazı dosyalar ekledim ve halihazırda var olan dosyalarda bazı değişiklikler yaptım.Geçmişi nasıl yeniden yazabilirim, böylece zaten taşıdığımlar dışındaki tüm dosyalar bir alt dizinde mi?
Sonuç olarak, şimdi foo/bar/file.c
geçmişine baktığımda, yalnızca dosyayı taşıdıktan sonra yaptığım değişiklikleri görebilirim.
Çeşitli yollarla (altdizin filtresiyle, vb. filter-branch
) düzeltmeye çalıştım ama hiçbir şey yardımcı olmadı, bu yüzden burada oldukça yığılmışım. Bana verebileceğin herhangi bir yardımı takdir edeceğim. Teşekkürler! dosyalarla tarihi yeniden yazmak için
@Alexander: Bir tek çizgiyi (tek tırnaktaki her şey) gerçek bir komut dosyasında, bir bash shebang çizgisiyle koymayı deneyebilirsiniz. Sanırım “filtre-şubesi” muhtemelen bunu “sh” değil, “bash” olarak çalıştırmaya çalışıyor. – Cascabel
Bazı ilerlemeler kaydettim. If ifadesinde çift parantez bu hataya neden görünüyor. Tek parantez daha iyi çalışır, yine de işe yaramıyor. Sorun şu ki, her şeyi foo/bar/dizinine taşımadan önce projede bazı içeriğe sahip foo adında bir dizinim vardı. Yani şimdi "foo'yu kendi başına bir alt dizine," foo/bar/foo "'ya taşıyamaz. –
@Alexander: Senaryoyu buna göre ayarlaman gerekecek. Bir şey gibi: Eğer [[! -e foo/bar]]; daha sonra mkdir -p foo/bar; git ls-tree - sadece isim $ GIT_COMMIT | grep -v^foo $ | xargs -I dosyaları mv dosyaları foo/bar; fi' Hareket ettirilecek dosyalar listesinden 'foo 'filtrelemek için grep kullanır. Altında her şeyi taşıyana kadar "bar" alt dizininin hiç bulunmadığını farz ediyorum. Eğer durum böyle değilse, o zaman senaryonun içinde de bunu hesaba katmanız gerekecek. –