İnotify olaylarını kullanarak değişiklikleri izlemek için dosyaları izliyorum (olduğu gibi, Python'dan libc'ye çağırıyor).
A sırasında bazı dosyalar için git clone, garip bir şey görüyorum: bir IN_CREATEolay görüyorum ve görüyorum lski dosya içeriğe sahip, ancak, asla görmüyorum IN_MODIFYveya IN_CLOSE_WRITE. IN_CLOSE_WRITEDosyalara yanıt vermek istediğim için bu bana sorun yaratıyor : özellikle, dosya içeriğinin yüklenmesini başlatmak için.
Garip davranan dosyalar .git/objects/packdizinde bulunur ve .packveya ile biter .idx. Git'in oluşturduğu diğer dosyalar daha düzenli IN_CREATE-> IN_MODIFY-> bir IN_CLOSE_WRITEzincire sahiptir ( IN_OPENolayları izlemiyorum ).
Bu, MacOS'taki docker'ın içinde, ancak uzak bir sistemde Linux'ta docker'da da aynı şeyin kanıtını gördüm, bu yüzden şüphem MacOS yönünün alakalı olmadığıdır. İzliyor ve eğer bunu görüyorum git cloneiçindedir aynı liman işçisi kap.
Sorularım:
Bu olaylar bu dosyalarda neden eksik?
Bu konuda ne yapılabilir? Özellikle, bu dosyalara yazma işlemlerinin tamamlanmasına nasıl yanıt verebilirim? Not: İdeal olarak "bitmemiş" yazmayı yüklemeden gereksiz / (yanlış) yüklemeyi önlemek için yazma "bittiğinde" yanıt vermek istiyorum.
Düzenleme: https://developer.ibm.com/tutorials/l-inotify/ okumak, gördüğüm şeyle tutarlı görünüyor
- adı
tmp_pack_hBV4Alzoluşturulmuş, değiştirilmiş ve kapatılmış ayrı bir geçici dosya ; - bu dosyaya son adla bir sabit bağlantı oluşturulur
.pack; - orijinal
tmp_pack_hBV4Alzad silinir.
Bence dosyaları yüklemek için bir tetikleyici olarak inotify kullanmaya çalışan sorunum daha sonra .packdosyanın başka bir dosyaya sabit bir bağlantı olduğunu ve bu durumda karşıya yükleme farkını azaltır azalır ?