Yalnızca İzlenmeyen Dosyaları Ekleme


168

Git'te inanılmaz kullanışlı bulduğum komutlardan biri, git add -uizlenmemiş dosyalar hariç her şeyi dizine atmaktır. Bunun tersi var mı? Son birkaç aydır, kendimi genellikle dizine etkileşimli olarak bazı güncelleştirmeler eklediğim bir konumda buldum ve işlemden önce izlenmemiş dosyaların tümünü bu dizine eklemek istiyorum.

Tek tek tanımlanmadan dizine yalnızca izlenmeyen dosyaları eklemenin bir yolu var mı ? Yardım belgelerinde belirgin bir şey görmüyorum, ama belki de özlüyorum?

Teşekkürler.


1
"İzlenmeyen dosyalar hariç her şeyi dizine at" ile ilgili olarak, .gitignorebu amaç için özel olarak tasarlanmıştır git add -u.
Pacerier

Ayrıca, izlenen dosyaları kaldırırken izlenmeyen dosyaları mı eklemek istiyorsunuz, yoksa izlenen dosyaları şu anda izlenenlerin üstüne mi eklemek istiyorsunuz (her şeyi takip ediyor musunuz)?
Pacerier

Yanıtlar:


236

İle kolay git add -i. Tür asonra, ( "izlenmeyen eklemek" için) *(için "bütün"), sonra q(çıkmak için) ve bitirdiniz.

Tek bir komutla yapmak için: echo -e "a\n*\nq\n"|git add -i


4
Daha az, iyi, etkileşimli bir şey olmasını umuyordum, ama kesinlikle dosyadan daha iyi. :-)
Rob Wilkerson

34
echo -e "a\n*\nq\n"|git add -i
Mat

@Mat teşekkür ederim tam komut ----> git add -ia * q ??
BKSpurgeon

Argument list too long... çok yakın!
Simeon

1
Benim için git 2.21.0 ile o git add -izaman 4izlenmemiş eklemek sonra *herkes qiçin çıkmak oldu
Harry B

36

git ls-files -o --exclude-standard izlenmeyen dosyalar verir, böylece aşağıdaki gibi bir şey yapabilirsiniz (veya buna bir takma ad ekleyebilirsiniz):

git add $(git ls-files -o --exclude-standard)

1
takma ad gau = "git ls-files -o --exclude-standard | xargs -i git add '{}'" benim için çalışıyor
Stephan

git ls-files --help oldukça faydalı bir okuma: -o, --others Show other (i.e. untracked) files in the output
Joshua Kunzmann

15

Tam olarak aradığınız şey değil, ancak bunu oldukça yararlı buldum:

git add -AN

Tüm dosyaları dizine ekler, ancak içeriği olmadan. İzlenmeyen dosyalar artık izlenmiş gibi davranıyor. İçeriği görüntülenecek git diffve daha sonra etkileşimli olarak ekleyebilirsiniz git add -p.


Bu tam da aradığım şeydi - git commit -pyeni dosyalarda da gezinmeyi sağlıyor.
nitsujri

11

Bunu ~ / .gitconfig dosyanıza ekleyebilirsiniz:

[alias]
    add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"

Ardından, komut satırından şunu çalıştırın:

git add-untracked

Bu yaklaşımı seviyorum, ancak dosya adlarındaki boşlukları ele almıyor.
Paul Coccoli

9

İnsanlar için çıkış piping önerdi git ls-files, git addancak beyaz boşluk veya glob karakterleri içeren dosya adlarının olduğu durumlarda bu başarısız olacaktır *.

Güvenli yol:

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

nerede -zkullanılması için git söyler \0satır sonlandırıcı ve -0aynı xargs söyler. Bu yaklaşımın tek dezavantajı, -0seçeneğin standart olmamasıdır, bu nedenle sadece bazı sürümleri xargsdestekliyor.


6

git ls-filesgeçerli dizindeki dosyaları listeler. İzlenmemiş dosyaları ağacın herhangi bir yerinden listelemek istiyorsanız, bu daha iyi olabilir:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel)

İzlenmeyen tüm dosyaları ağaca eklemek için:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add

6

Bunu denedim ve işe yaradı:

git stash && git add . && git stash pop

git stashyalnızca değiştirilmiş tüm izlenen dosyaları ayrı bir yığına koyar, sonra kalan dosyalar izlenmeyen dosyalardır. Sonra yaparak git add .tüm dosyaları izlenemeyen dosyaları gerektiği gibi sahne alacak. Sonunda, değiştirilmiş tüm dosyaları yığından geri almak içingit stash pop


0

İzlenmeyen binlerce dosyanız varsa (ugh, sormayın) o git add -izaman eklerken çalışmaz *. Bir hata mesajı alırsınız Argument list too long.

Daha sonra Windows'daysanız (# 2 sormayın :-) ve izlenmeyen tüm dosyaları eklemek için PowerShell kullanmanız gerekiyorsa, bu komutu kullanabilirsiniz:

git ls-files -o --exclude-standard | select | foreach { git add $_ }

Daha yoğun bir versiyon:git ls-files -o --exclude-standard | % { git add $_ }
marckassay

0

Çok iyi ipuçları burada, ama Powershell içinde işe alamadım.

Ben bir .NET geliştiricisiyim ve .Net çekirdeğini ve çapraz platformu çok fazla kullanmadığımız için hala Windows işletim sistemini kullanıyoruz, bu yüzden Git ile günlük kullanımım, kullanılan kabuğun daha sık Powershell olduğu bir Windows ortamında. Git bash değil.

Git deposuna izlenmeyen dosyalar eklemek için takma ad işlevi oluşturmak üzere aşağıdaki yordam izlenebilir.

Powershell $ profil dosyanızın içinde (eksik olması durumunda çalıştırabilirsiniz: New-Item $ Profile)

notepad $ Profil

Şimdi bu Powershell yöntemini ekleyin:

function AddUntracked-Git() {
 &git ls-files -o --exclude-standard | select | foreach { git add $_ }
}

$ Profil dosyasını kaydedin ve Powershell'e yeniden yükleyin. Ardından $ profile dosyanızı şununla yeniden yükleyin:. $ profil

Bu, * nix ortamlarındaki IMHO'daki source komutuna benzer.

Bir dahaki sefere, Windows'ta Powershell'i Git repo'ya karşı kullanıyorsanız ve sadece izlenmeyen dosyaları dahil etmek istiyorsanız:

AddUntracked-Git

Bu, fiil isimlerinizin bulunduğu Powershell kuralını izler.


0

git ekleyin. (bu dizindeki tüm dosyaları ekle)

git add -all (tüm dizinlerdeki tüm dosyaları ekle)

git add -N daha sonra hangilerini listelemek için yardımcı olabilir ....


git add -udeğiştirilmemiş dosyaları izlenmeyecek
Tarasovych

-3

İzlenmeyen tüm dosyaları eklemek için git komutu

git add -A

Ayrıca, mevcut çeşitli seçenekler hakkında daha fazla bilgi almak isterseniz, komut yazabilirsiniz.

git add -i

ilk komut yerine, aşağıda gösterildiği gibi izlenmemiş tüm dosyaları ekleme seçeneği de dahil olmak üzere daha fazla seçenek elde edersiniz:

$ git add -i uyarısı: LF, README.txt dosyasında CRLF ile değiştirilir. Dosyanın orijinal satır sonları çalışma dizininizde olacaktır. uyarı: LF, package.json içinde CRLF ile değiştirilecek.

* Komutlar * 1: durum 2: güncelleme 3: geri dön 4: izlenmeyen ekle 5: yama 6: fark 7: çıkma 8: yardım Şimdi ne var> a

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.