Git: yalnızca “izlenmeyen” dosyaları listele (ayrıca, özel komutlar)


339

git ls-filesSadece izlenmeyen dosyaları göstermek gibi bir komut kullanmanın bir yolu var mı ?

Sormamın nedeni, silinen tüm dosyaları işlemek için aşağıdaki komutu kullanmamdır:

git ls-files -d | xargs git rm

İzlenmemiş dosyalar için benzer bir şey istiyorum:

git some-command --some-options | xargs git add

-oSeçeneği bulabildim git ls-files, ancak istediğim şey bu değil, çünkü yok sayılan dosyaları da gösteriyor. Ayrıca aşağıdaki uzun ve çirkin komutları da bulabildim:

git status --porcelain | grep '^??' | cut -c4- | xargs git add

Burada kullanabileceğim daha iyi bir komut olmalı. Ve yoksa, özel git komutlarını nasıl oluşturabilirim?


Neden ihtiyacın olduğunu açıklayabilir misin git ls-files -d | xargs git rm?
takeshin

Bu, git bildirimlerinin eksik olduğu tüm dosyaları kaldırır. Sorum, ilgili bir işlemin nasıl yapılacağıyla ilgiliydi - git'in izlemediği tüm dosyaları ekleyin. Kod dosyalarımı yeniden adlandırdıktan, birleştirdikten ve / veya böldükten sonra genellikle her ikisini de yaparım.
Hepimiz Monica

Kayıplarsa, silinmiş değiller mi? Tabii başka bir yerden çekmediyseniz ve sonra uzaktan kumandayla senkronize etmeye çalışıyorsanız ... Sanırım anladım.
Buttle Butkus

Tüm cevapları test ettim, boş izlenmemiş klasör varsa, kimse bulamaz.
19ty kittygirl

@kittygirl bu doğru. Çünkü gitsadece dosyalarda eserleri, boş klasörleri izleme herhangi bir şekilde bulunmamaktadır. find . -type d -emptyBunun yerine deneyin .
Hepimiz Monica

Yanıtlar:


530

İzlenmemiş dosyaları listelemek için şunu deneyin:

git ls-files --others --exclude-standard

Çıktıya boru döşemeniz gerekiyorsa xargs, git ls-files -zve öğelerini kullanarak beyaz boşluklara dikkat etmek akıllıca olacaktır xargs -0:

git ls-files -z -o --exclude-standard | xargs -0 git add

İzlenmemiş dosyalar eklemek için güzel takma ad:

au = !git add $(git ls-files -o --exclude-standard)

Düzenleme: Referans için: git-ls-files


7
Mükemmel! !Takma ad satırının başında ne anlama geliyor veya bu nerede belgeleniyor?
Hepimiz Monica

@takeshin Yalnızca üst dizin adları nasıl alınır? alt klasörler değil. Bu izlenmemiş dosyadaki araçlar: / P / a / dosya, / P / a / resim, / P / a / / P /, ... - Sadece listelemek istiyorum / P /
Dr.jacky

2
Peki hangi durumda takma ada ihtiyacınız var? git add *aynı şeyi yapacaktır: standart hariç (izlenen dosyalar dahil) izlenmeyen tüm dosyaları ekleyin .gitignore.
toinetoine

1
Takma [alias] lso = "!f() { cd $(git rev-parse --show-toplevel); git ls-files -o; }; f"
adımın repodaki

Teşekkürler. İyi yorum.
Darth Egregious

71

İzlenmeyen dosyaları kaldırmak istiyorsanız, bunu yapın:

git clean -df

xözellikle yok sayılan dosyaları da eklemek istiyorsanız buna ekleyin . Kullandığım git clean -dfxbir sürü gün boyunca.

Sadece denilen bir komut dosyası yazıp git-whateveryolunuza yerleştirerek özel git oluşturabilirsiniz .


İzlenmeyen tüm dosyaları eklemek istediğim çok daha yaygın (örneğin, bazı şeyleri hareket ettirdikten sonra). Her durumda, özel komutlarla ilgili ipucu için teşekkürler. Bu mekanizma nerede belgeleniyor?
Hepimiz Monica

5
Sadece yapın git add -Aveya git add -u(hangisinin sizin için daha mantıklı olduğuna bağlı olarak)
Dustin

1
Yorumunuz ayrıca @ Mike Lococo daha sonra tekrarlanır gerçek cevabı,
andho

2
ve "n" ekleyerek kuru bir çalışma için "git clean -dfxn"
charo

50

git add -A -nne istersen yapacak. -A, repoya tüm izlenmeyen dosyaları ekler -nyapar bir dry-runeklenti uygulanmadığı ancak durum çıkışı her dosyayı listeleme verilir nerede olacağını eklenmiştir.


7
Bu harika bir cevap! .gitignoreGenellikle istediğimiz gibi, ancak olmasa da, dosyalardaki dosyaları hariç tuttuğunu unutmayın git add -fAn.
cdunn2001

1
Bu en iyi cevap gibi görünüyor.
Rob Grant

1
Bu en iyi cevap. Kullanıcıya ne yapacağını (yapmadan) açıkça söyler ve eklemeden önce gözden geçirme şansı verir. Mükemmel. Teşekkürler!
digitguy

Ayrıca değiştirilmiş dosyaları da listeler.
Frank-Rene Schäfer

güzel, ama sarılıyorum add '$file'. Oysa git ls-files --exclude-standard -oçıplak bir çıkış verir, sıcak boru verir.
hyperpallium

28

Kabul edilen cevap boşluklu dosya adlarında çöküyor. Bu noktada takma ad komutunun nasıl güncelleneceğinden emin değilim, bu yüzden geliştirilmiş sürümü buraya koyacağım:

git ls-files -z -o --exclude-standard | xargs -0 git add

Bu doğru cevap olduğunu düşünüyorum, çünkü daha sonra üzerlerinde bir eylem (git add gibi) gerçekleştirmek için her dosyanın yolunu sağlar
Pablo Burgos

27

Her şey çok basit

Tüm izlenmeyen dosyaların listesini almak için komut kullanmak git durumunu ile opsiyon -u (--untracked-dosyaları)

git status -u

bunun özyinelemeli olmayan bir versiyonuna ne dersiniz?
David

Ne yazık ki, ayrıca .gitignore dosyaları aracılığıyla yok sayılan dosyayı listeler.
Mart'ta Plouff

8
Bu taahhüt, ilk benim gözardı dosyaları gösteren tek cevabı, ama eklemek zorunda --ignorediçin git status -ukomuta
DN

Bu basit ve güzel.
Eric Wang

1
Bu , değiştirilmiş dosyaları da gösterir. Yani, sorunun cevabı değil: sadece izlenmemiş dosyaları göster.
Wildcard

6

Potansiyel olarak eklenecek dosyalar ararken. Çıktı git showbunu yapar ama aynı zamanda birçok başka şey içerir. Aşağıdaki komut, aynı dosya listesini almak için yararlıdır, ancak diğer tüm dosyaları içermez.

 git status --porcelain | grep "^?? " | sed -e 's/^[?]* //'

Bu, belirli bir kalıpla eşleşen dosyaları bulmak ve daha sonra bunu borulandırmak için bir boru hattında birleştirildiğinde yararlıdır git add.

git status --porcelain | grep "^?? "  | sed -e 's/^[?]* //' | \
egrep "\.project$|\.settings$\.classfile$" | xargs -n1 git add

6

Ben eski bir soru biliyorum, ama izlenmeyen dosyaları listeleme açısından ben de izlenmeyen klasörleri listeler başka bir tane eklemek düşündüm:

Git temizleme işlemini -n (kuru çalıştırma) ile kullanarak hangi dosyaları (.gitignore dosyaları dahil) kaldıracağını göstermek için kullanabilirsiniz:

git clean -xdn

Bu, izlenmeyen tüm dosyaları ve tüm klasörleri gösterme avantajına sahiptir . Parametreler:

  • x - İzlenmeyen tüm dosyaları gösterir (git ve diğerleri tarafından yok sayılanlar dahil, derleme çıktısı vb. Dahil)
  • d - izlenmeyen dizinleri göster
  • n- ve en önemlisi! - dryrun, yani aslında hiçbir şeyi silmeyin, sonuçları görüntülemek için sadece temiz mekanizmayı kullanın.

Unutursanız bu şekilde yapmak biraz güvensiz olabilir -n. Bu yüzden genellikle git config içinde takma adım.


2

Kontrol ettiğim tüm önceki yanıtlar da taahhüt edilecek dosyaları listelerdi. Burada, henüz repoda bulunmayan ve tabi olmayan dosyaları listeleyen basit ve kolay bir çözüm var .gitignore.

git status --porcelain | awk '/^\?\?/ { print $2; }'

veya

git status --porcelain | grep -v '\?\?'

bu, adında boşluk olan dosyalarla iyi sonuç vermiyor gibi görünüyor
ssc

-2

Bunun orijinal afişin amaçladığı gibi olacağını düşünüyorum:

git add .


2
Her yaptığınızda git/svn add ., yavru kedi ölür.
Nakilon

Heh, sadece uzak dalların yerel kopyalarında bir sürü haksızlık varsa;) Yerel şubeler yapın ve git add .cezasız bir şekilde yapabilirsiniz !
Tim Fulmer

@Nakilon, bu yüzden .gitignoredüzgün yapılandırıyorsun . Yine de kaçınmak iyi git add .. Daha iyi git add -u.
Joker
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.