GitHub veri havuzumda 2 dizin var. Bunlardan birini silmek istiyorum. Tüm depoyu silmeden ve yeniden oluşturmadan bunu nasıl yapabilirim?
GitHub veri havuzumda 2 dizin var. Bunlardan birini silmek istiyorum. Tüm depoyu silmeden ve yeniden oluşturmadan bunu nasıl yapabilirim?
Yanıtlar:
Her iki dizinle de 'master'a göz atabilirsiniz;
git rm -r one-of-the-directories // This deletes from filesystem
git commit . -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)
Yorumlarda belirtildiği gibi, genellikle yapmak istediğiniz şey bu dizini git'ten kaldırmak, ancak tamamen dosya sisteminden silmektir (yerel)
Bu durumda şunları kullanın:
git rm -r --cached myFolder
git rm -r myFolder
çalıştı, ama aynı zamanda "MyFolder" dizininden her şeyi sildi. "MyFolder" dizinindeki her şeyi geri almak ve sonra taahhüt etmek zorunda kaldı.
git rm -r --cached myFolder
git rm -r --cached directory/
yalnızca git izinden kaldırılır, ancak depo yapısı kalır.
Dizini kaldırma adımları
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
Bir sonraki işlemlerde bu klasörü yoksayma adımları
Sonraki klasörlerden gelen bu klasörü yoksaymak için .gitignore adlı kökte bir dosya oluşturun ve bu klasör adını bu klasöre koyun. İstediğiniz kadar koyabilirsiniz
.gitignore dosyası şöyle görünecektir
/FolderName
Herhangi bir nedenle, karmakaze'in söylediği şey işe yaramazsa, kullanmak istediğiniz dizini veya dosya sistemi tarayıcınızla silmeyi deneyebilirsiniz (örn. Windows Dosya Gezgini'nde). Dizini sildikten sonra şu komutu verin:
git add -A
ve sonra
git commit -m 'deleting directory'
ve sonra
git push origin master
.
Dizindeki dosyaları kaldırırsanız ( git rm
diğer yanıtların açıkladığı gibi), dizin artık git ile ilgili olarak mevcut değildir. Boş bir dizin kaydedemezsiniz veya bir dizini kaldıramazsınız.
Bu, açıkça belirtmeniz gereken yıkımdan farklıdır svn rm emptyfolder/
ve bu nedenle man
git sayfasının kendisini "aptal içerik izleyici" olarak tanımlaması
Üzerinde bir cevap "Nasıl bir git deposuna boş bir dizin eklerim" bağlantılar bu konuda SSS :
Şu anda git dizininin tasarımı (hazırlama alanı) sadece dosyaların listelenmesine izin vermektedir ve boş dizinlere izin verecek değişikliği yapmaya yetecek hiç kimse bu durumu düzeltmek için yeterince önemsememiştir.
İçine dosya eklenirken dizinler otomatik olarak eklenir. Yani, dizinlerin asla depoya eklenmesi gerekmez ve kendi başlarına izlenmezler.
"
git add <dir>
" Diyebilirsiniz , içine dosya eklenir.Ödemelerde gerçekten bir dizine ihtiyacınız varsa içinde bir dosya oluşturmanız gerekir. .gitignore bu amaç için iyi çalışır; boş bırakabilir veya dizinde görünmesini beklediğiniz dosyaların adlarını girebilirsiniz.
Zaten klasörü daha önce yapmıştım ve geçmişte de dizini kaldırmak istiyorum.
Aşağıdakileri yaptım:
Şuraya klasör ekle .gitignore
:
echo Folder_Name/ >> .gitignore
Tüm taahhütlerden kaldır:
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all
eski taahhütlerden referansları kaldır:
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
Tüm eski referansların tamamen kaldırıldığından emin olun
rm -Rf .git/logs .git/refs/original
Çöp toplama işlemi gerçekleştirme
git gc --prune=all --aggressive
sizi çevrimiçi depodaki değişiklikleri zorlar:
git push
Burada işiniz bitti.
Ancak, tüm değişiklikleri tüm dallarda zorlamak için aşağıdakileri yapabilirsiniz: Ancak bu komutla dikkatli olun!
git push origin --all --force
git push origin --tags --force
Bundan sonra klasör git'ten kaldırıldı, ancak yerel diskten silinmedi.
Boş klasörleri silmek için
i boş bir dizin (klasör) oluşturmak istedim, git silemezsiniz, bazı araştırmalar sonra öğrendim Git boş dizinleri izlemiyor. Çalışma ağacınızda boş bir dizininiz varsa,
rm -r folderName
Git'i dahil etmeye gerek yok.
Attlasian Kaynak Ağacı'nı (Windows) kullanabilirsiniz ( https://www.atlassian.com/software/sourcetree/overview ). Sadece ağaçtan dosyaları seçin ve üstteki "Kaldır" düğmesine basın. Dosyalar yerel depodan ve yerel git veritabanından silinecektir. Sonra taahhüt edin, ardından itin.
Meslektaşlarımdan biri, güçlü olduğunu düşündüğüm BFG Repo-Cleaner'ı önerdi . Sadece istenmeyen verileri silmekle kalmaz, aynı zamanda deponuzu ilgili taahhüt bilgilerinden de temizler.
Yeni dizin eklemek için:
mkdir <YOUR-DIRECTORY>
Ancak Git artık bu yeni dizinin farkında değil, çünkü Git dizinleri değil dosya dizinlerini izliyor DIRECTORY
git status
Git yaptığımız değişikliğin farkında olmayacak, dolayısıyla .keep
Git'i bu yeni değişikliğin farkına varması için gizli dosya ekliyoruz .
touch /YOUR-directory/.keep
Şimdi git status
Git'i tıklatırsanız değişikliklerin farkında olacaksınız.
Ve dizini silmek istiyorsanız, bu komutu kullanmalısınız.
rm -r <YOUR-DIRECTORY>
Ve kullanarak işaretlediyseniz git status
, dizinin kaldırıldığını göreceksiniz.
Benim için 2 cevap bir arada çalıştı
git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push
hala bir uyarı gösteriyorsa, dosyaları manuel olarak kaldırın
git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push