Dizinler nasıl izlenir ama dosyaları Git ile nasıl izlenmez?


86

Yakın zamanda Git'i kullanmaya başladım ve tek bir konuda sorun yaşıyorum. Dizinleri içeriklerini takip etmeden nasıl takip edebilirim?

Örneğin, üzerinde çalıştığım site yüklemelere izin veriyor. Yüklemeler dizinini, dallanma vb. Sırasında oluşturulacak şekilde izlemek istiyorum, ancak tabii ki içindeki dosyalar değil (geliştirme dalında test dosyaları veya ana dosyadaki gerçek dosyalar).

.Gitignore dosyamda aşağıdakilere sahibim:

yükleme /*.*

Ayrıca denedim (tüm dizini yok sayar):

yüklemeler /

Bu dizin aynı zamanda alt dizinler de içerebilir (uploads / thumbs / uploads / videos /) Bunları takip edebilmek istiyorum ama dosyalarını değil.

Bu Git ile mümkün mü? Bir cevap bulamadan her yeri aradım.


Git yalnızca dosyaları izler. Yapabileceğiniz şey git kancaları ile oynamak ve dizin listesini (kancalar kullanılarak otomatik olarak oluşturulur) içeren bir dosyayı takip etmektir. Yine de bunun mümkün olup olmayacağından tam olarak emin değilim.
Šimon Tóth

Daha somut: Git içeriği izler ve (git için) boş bir dizin içerik değildir. Kabul etseniz de etmeseniz de tartışabilirsiniz, ancak başka bir "geçici çözüm" olarak dizinleri derleme / yükleme / gerektiğinde oluşturmayı düşünebilirsiniz. Ancak: " .placeholder-dosya"
çözümünü

1
.Placeholder kullanmak yerine, bir .gitignore dosyası kullanıyorum. Bu sadece dizin içindeki dışlamalarla ilgilenmekle kalmaz, aynı zamanda bir yer tutucu görevi görür.
Abizern

Yanıtlar:


114

Git dizinleri izlemez, dosyaları izler, bu nedenle buna ulaşmak için en az bir dosyayı izlemeniz gerekir. Öyleyse, .gitignoredosyanızın şuna benzediğini varsayarsak :

upload/*

Bunu yapabilirsiniz:

$ touch upload/.placeholder
$ git add -f upload/.placeholder

Eğer unutursan -fgöreceksin:

$ git add upload / .placeholder
Aşağıdaki yollar .gitignore dosyalarınızdan biri tarafından yok sayılır:
yükle
Gerçekten eklemek istiyorsanız -f kullanın.
ölümcül: dosya eklenmedi

Sonra yaptığınızda git statusgöreceksiniz:

# Şube yöneticisinde
#
# İlk yürütme
#
# Yapılması gereken değişiklikler:
# (aşamayı kaldırmak için "git rm --cached ..." kullanın)
#
# yeni dosya: upload / .placeholder
#

Açıkçası o zaman şunları yapabilirsiniz:

$ touch upload/images/.placeholder
$ git add -f upload/images/.placeholder

Teşekkürler, ihtiyacım olan şey bu.
Ben

11
Bir yer tutucu için yaygın bir kural bir gitignore dosyasıdır.
Cascabel

2
@Jefromi Indeed, Abizern'e yaptığım yorumlar .gitignoregibi, dosyayı yer tutucu olarak kullanmayı hiç düşünmemişti .
Peter Farmer

1
Oops, bir şekilde bu yorumları kaçırdım.
Cascabel

3
Git dizinleri izlemez, dosyaların UNIX'te her şeyin bir dosya olduğunu öğrettiklerinde kulağa komik geldiğini izler , bir dizinin bile bir dosya olduğunu öğretir
Green

38

Bunun hakkında burada yazdım .

Dizine bir .gitignore ekleyin.


1
Güzel küçük makale ve yorumlar! Yer tutucu dosya olarak .gitignore kullanmayı hiç düşünmemiştim ....
Peter Farmer

Teşekkürler. Sadece bir gönderi yazıp yorum alarak bir şeyler öğrendim.
Abizern

1
Şu anda kullanılacak popüler bir adlandırma kuralı var gibi görünüyor.gitkeep
tarabayt

şu anda "ha-ha" anını aldım, keşke 6 farklı kez
oy verebilseydim



6

Dosyaları değil sadece dizinleri izlemek için aşağıdakileri yaptım. @ PeterFarmer'ın git sadece dosyaları izleme hakkındaki yorumu sayesinde, aşağıda açıklanan dosyalar hariç tüm dizinleri tutabildim.

# exclude everything in every folder
/data/**/*.*

# include only .gitkeep files
!/data/**/*.gitkeep

Bunu .gitignore dosyasına eklemek işi yapacaktır. Aşağıdaki klasör yapımdır.

data/
├── processed
│   ├── dataset1.csv
│   └── dataset2.csv
├── raw
│   ├── raw_dataset1.json
└── test
    ├── subfolder
    │   └── dataset2.csv
    └── reviews.csv

Bunu yaptığımda git add . && git statusgit yalnızca klasörleri tanır, dosyaları tanımaz.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   .gitignore
        new file:   data/processed/.gitkeep
        new file:   data/raw/.gitkeep
        new file:   data/test/.gitkeep
        new file:   data/test/subfolder/.gitkeep

.Gitignore dosyalarınız için aşağıdakilerin olduğunu unutmayın:

Başına bölü işareti yalnızca kök dizini arar.

/ dir

Çift yıldız işareti, sıfır veya daha fazla dizini arar.

/ ** /


Teşekkür ederim! Bu şekilde kullanıyorum ve çok yardımcı oluyor
sebasira
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.