Git'e belirli dosyaları yok saymak yerine yalnızca belirli dosyaları dahil etmesini söylemenin bir yolu var mı?


165

Programlarım genellikle git deposuna yedeklemek istemediğim büyük çıktı dosyaları (~ 1 GB) oluşturur. Yani yapabilmek yerine

git add .

Gibi bir şey yapmalıyım

git add *.c *.cc *.f *.F *.C *.h *.cu

bu biraz hantal ...

Ben .gitignore içine dizin içeriğini hızlı bir perl komut dosyası yazabilir ve sonra bir .gitinclude (veya benzer bir ad) dosyaya dayalı dosyaları kaldırmak oldukça emin hissediyorum, ama bu biraz fazla hackish görünüyor. Daha iyi bir yol var mı?

Yanıtlar:


231

Bunu kendim denemem gerekmiyordu, ama TFM okuduğumdan, olumsuz bir modelin ne istersen yapacağına benziyor. .Gitignore içindeki girdileri daha sonra reddedilen girişlerle geçersiz kılabilirsiniz. Böylece şöyle bir şey yapabilirsiniz:

*.c
!frob_*.c
!custom.c

Custom.c ve "frob_" ile başlayan herhangi bir şey hariç tüm .c dosyalarını yok saymasını sağlamak için


20
Teşekkürler, TED Bu işe yaradı. Tek yapmam gereken .gitignore dosyasını * ile başlatmak ve sonra bir ünlem noktasının ilerlettiği dahil edilen tüm dosya kalıplarımı listelemekti.
Daisy Sophia Hollman

8
Peki ya klasörler? Bir kuralı reddederek içindeki klasör ve dosyaları dahil etmenin bir yolunu bulamıyorum.
Marcio Cruz

4
Klasörler hakkında lütfen stackoverflow.com/questions/12799855/…
uzsolt

2
çok hoş. Ben
vimrc

1
Belirli bir klasörü eklemek istiyorsanız @uzsolt çalışmaz. bkz. stackoverflow.com/questions/987142/…
DiCaprio

73

deponuzda .gitignore dosyası oluşturmak ve sadece c dosyalarını izlemek ve diğer tüm dosyaları yoksay sonra aşağıdaki satırları eklemek istiyorum ....

*
!*.c

'*' tüm dosyaları yok sayacak

ve ! dosyaları yok sayılır ihmal edilecek .... bu yüzden burada git c dosyaları görmezden değil istiyoruz ....


.*Gizli dosyalara da mı ihtiyacınız var ?
trusktr

2
*Hatta bir joker olduğunu .böylece gizli dosyaları da göz ardı edilir, ancak biten sonra tüm gizli dosyaları .cdahildir.
Rohmer

2
Bu yöntemi kullanarak alt klasörlerden gelen dosyalar da göz ardı edildiğini düşünüyorum. Daha fazla ayrıntı için bunu kontrol edin stackoverflow.com/a/11853075/739436
Stelian

1
Ben sadece .bashrc ve .bash_history örneğin izlemek için benim ev dizininde bu yöntemi kullanılan *izledi !.bash*.gitignore dosyası içinde
user5359531

1
*.*Pencerelerde ihtiyacınız olabilir - @Smaranjit Maiti
Martin Capodici'nin cevabına bakın

13

Bunu başarmak için en iyi çözüm

.gitignoredepoda dosya oluşturma rootve yalnızca .cdosya eklemek istiyorsanız, .gitignoredosyaya aşağıdaki satırları eklemeniz gerekir

*.*
!*.c

bu, .cdizin ve alt dizindeki tüm dosyaları yinelemeli olarak içerecektir .

kullanma

*
!*.c

git'in tüm sürümlerinde çalışmaz.

Üzerinde test edildi

git sürüm 2.12.2.windows.2


2
Evet, aynı problemi yaşadım *ve kullanmak zorunda kaldım *.*. Bu, gitbash ve git 2.9.0.windows.1 kullanan Windows'ta
Martin Capodici

2

Dosyaları göz ardı etmeniz gerekiyor, ancak bir dizin içindeki belirli bir dosyayı değil, işte böyle yaptım:

# Ignore everything under "directory"
directory/*
# But don't ignore "another_directory"
!directory/another_directory
# But ignore everything under "another_directory"
directory/another_directory/*
# But don't ignore "file_to_be_staged.txt"
!directory/another_directory/file_to_be_staged.txt

0

Partiye geç, ama benim çözüm kaynak dosyaları için bir dizin ve yürütülebilir dosya ve program çıktısı için farklı bir dizin olması gibi bir şey olurdu:

+ .git
|    (...)
+ bin
|    my_exe.exe
|    my_output.txt
+ src
     some_file.c
     some_file.h 

... ve daha sonra yalnızca src/depoya bir şeyler ekleyin ve bin/tamamen yok sayın .

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.