Saya menonton file untuk perubahan menggunakan acara inotify (seperti yang terjadi, dari Python, memanggil libc).
Untuk beberapa file selama git clone, saya melihat sesuatu yang aneh: Saya melihat suatu IN_CREATEperistiwa, dan saya melihat lsbahwa file tersebut memiliki konten, namun, saya tidak pernah melihat IN_MODIFYatau IN_CLOSE_WRITE. Ini menyebabkan masalah bagi saya karena saya ingin merespons IN_CLOSE_WRITEpada file: khususnya, untuk memulai pengunggahan konten file.
File yang berperilaku aneh ada di .git/objects/packdirektori, dan berakhir di .packatau .idx. File lain yang dibuat git memiliki rantai IN_CREATE-> IN_MODIFY-> yang lebih teratur IN_CLOSE_WRITE(Saya tidak menonton IN_OPENacara).
Ini ada di dalam docker pada MacOS, tapi saya telah melihat bukti yang sama pada docker di Linux dalam sistem jarak jauh, jadi kecurigaan saya adalah aspek MacOS tidak relevan. Saya melihat ini jika menonton dan git cloneberada di wadah buruh pelabuhan yang sama .
Pertanyaan saya:
Mengapa acara ini hilang pada file-file ini?
Apa yang bisa dilakukan? Secara khusus, bagaimana saya bisa menanggapi penyelesaian penulisan ke file-file ini? Catatan: idealnya saya ingin menjawab ketika penulisan "selesai" untuk menghindari pengunggahan yang tidak perlu / (salah) mengunggah tulisan "belum selesai".
Sunting: Membaca https://developer.ibm.com/tutorials/l-inotify/ sepertinya yang saya lihat konsisten dengan
- file sementara yang terpisah, dengan nama seperti
tmp_pack_hBV4Alz, sedang dibuat, dimodifikasi dan, ditutup; - a keras link dibuat untuk file ini, dengan akhir
.packnama; tmp_pack_hBV4Alznama aslinya dihapus.
Saya pikir masalah saya, yang mencoba menggunakan tidak sah sebagai pemicu untuk mengunggah file, kemudian mengurangi untuk memperhatikan bahwa .packfile tersebut merupakan tautan keras ke file lain, dan mengunggah dalam kasus ini?