Git deposundan bir dizin nasıl kaldırılır?


1233

GitHub veri havuzumda 2 dizin var. Bunlardan birini silmek istiyorum. Tüm depoyu silmeden ve yeniden oluşturmadan bunu nasıl yapabilirim?


1
Dizinlerde dosya var mı?
Fred Foo

3
@Iarsmans: Evet 6 dosya. Biri büyük harf, diğeri küçük harf dışında her iki dizin de aynıdır.
Sahat Yalkabov

Yanıtlar:


2323

Git ve yerel dizini kaldır

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)

Dizini git'ten kaldır ancak yerel DEĞİL

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

8
Tam olarak aynı durum vardı. Denediğimde 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ı.
Justin

240
@Justin Yalnızca git'ten kaldırmak ve dosya sistemini olduğu gibi bırakmak için kullanıngit rm -r --cached myFolder
karmakaze

32
Aldığım hata iletisi: fatal: pathspec 'dizin' hiçbir dosyayla eşleşmedi.
user2441441

3
@ user2441441 Repo'ya hiç eklenmemiş bir klasörü / dosyayı kaldırmaya çalışırken ortaya çıkan bu hatayı aldım
lukeatdesignworks

3
git rm -r --cached directory/yalnızca git izinden kaldırılır, ancak depo yapısı kalır.
Néstor

287

Klasörü / dizini yalnızca git deposundan kaldırmak, yerel değil kaldırmak için 3 basit komutu deneyin.


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

dizini kaldır


1
Ayrıca diğer bilgisayarınızda git rm -r --cached FolderName git commit -m "Klasör depodan kaldırıldı" ve sonra senkronize tutmak için bir çekme yapmanız gerekir.
Simon

1
Bu, dizini depoya eklendiği noktadan silecek mi? Yoksa sadece dizini kaldırmak ve .git repo tavsiye etmek mi?
alpha_989

1
Harika! Çalışma!
BeingCoders

2
İyi açıklanmış, güzel cevap
Rakshit Shah

1
aferin. Makinemde üçüncü adım çalışmıyor. Ancak $ git push olarak değiştirilirse çalışır
Hong

82

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.


4
Bu benim için çalıştı. -A argümanını açıklayabilir misiniz?
Arun

2
@Arun -A --all için kısadır ve tüm izlenen ve izlenmeyen dosyalardan değişiklik ekleyin
Joachim Rohde

Bu benim için çalıştı.
UVM

20

Bunu deneyebilirsiniz: git rm -rf <directory_name>

Dizini silmeye zorlar.


3
bu ayrıca yerel
dizinden

18

Dizindeki dosyaları kaldırırsanız ( git rmdiğ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 mangit 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.


8

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.


7

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.


1
Teşekkürler! Sadece ihtiyacım olan buydu.
SpyrosKo

6

Git Dizininize gidin ve aşağıdaki komutu yazın: rm -rf < Dizin Adı >

Dizini sildikten sonra değişiklikleri şu yolla kesin: git commit -m "İşlem Mesajınız"

Sonra uzak GIT dizinindeki değişiklikleri itin: git push origin < Branch name >


4

Klasörü yerel olarak silebilir ve ardından aşağıdaki gibi itebilirsiniz:

git rm -r folder_name
git commit -m "your commit"
git push origin master

4

Genellikle git add --alluzak depolardaki dosyaları / klasörleri kaldırmak için kullanıyorum

rm -r folder_name
git add --all
git commit -m "some comment"
git push origin master

master deponun başka bir dalıyla değiştirilebilir.



1

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.


1

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 .keepGit'i bu yeni değişikliğin farkına varması için gizli dosya ekliyoruz .

touch /YOUR-directory/.keep

Şimdi git statusGit'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.


0

İlk git komutunun herhangi bir şeyi silmeden önce kim olduğunuzu bilmesi gerekir

  1. git init
  2. git config user.name "birisi"
  3. git config user.email "someone@someplace.com"
  4. git rm -r
  5. git commit -m "dizin siliniyor"
  6. git push origin master

0

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
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.