2016-03-25 31 views
0

sahne bakarakSağlam, ben aynı dosya için 3 sonuç görüyorum (ana ve bir dal arasında <code>merge_commits</code> bir çağrısının ardından) (libgit2) endeksine bakıldığında endeks

{:path=>"file.txt", :oid=>"c6fdbacd7400805042668f4ccf70fc1ebbdac361", :dev=>0, :ino=>0, :mode=>33188, :gid=>0, :uid=>0, :file_size=>0, :valid=>false, :stage=>1, :ctime=>1969-12-31 19:00:00 -0500, :mtime=>1969-12-31 19:00:00 -0500} 
{:path=>"file.txt", :oid=>"0838a4be16d19278e1e549614ffd2b6759549185", :dev=>0, :ino=>0, :mode=>33188, :gid=>0, :uid=>0, :file_size=>0, :valid=>false, :stage=>2, :ctime=>1969-12-31 19:00:00 -0500, :mtime=>1969-12-31 19:00:00 -0500} 
{:path=>"file.txt", :oid=>"4bd2639f786bef1000dad7d59c6779a4e99fb27c", :dev=>0, :ino=>0, :mode=>33188, :gid=>0, :uid=>0, :file_size=>0, :valid=>false, :stage=>3, :ctime=>1969-12-31 19:00:00 -0500, :mtime=>1969-12-31 19:00:00 -0500} 

Benim anlayış Bunların her birinin içeriği, 3. evrenin en son “ileri/gelişmiş” değişim olduğudur, ancak birisi bu aşamaların ardındaki konsepti ve numaralandırmayı açıklayabilir mi? Ve sahne 0 eksik, çünkü bu dosyada rahatsız edilmeyen değişiklikler var mı?

cevap

3

Libgit2'ye aşina değilim, git dizin dosyalarındaki sıfır olmayan aşamalar birleştirme çakışmalarıyla uğraşmak içindir.

çakışma çözülene kadar the gitrevisions documentation tarif edildiği gibi, tek bir yol adı üç adede kadar olacaktır:

isteğe bağlı olarak bir kademe sayısı (3 0), ardından kolon ve bir Bir yolu izleyen iki nokta, belirtilen yoldaki dizinde blob nesnesini adlandırır. Eksik bir sahne numarası (ve onu izleyen kolon) bir aşama 0 girişini adlandırır. Birleştirme sırasında, 1. aşama ortak atandır, 2. aşama hedef dalın sürümüdür (genellikle geçerli olan dal) ve 3. aşama, birleştirilen dalın sürümüdür. Birleştirme çakışması için bir silme ise

aşama 2 ya da 3'ün sadece bir tane olacak (diğer bir deyişle, dosya ortak bir atadan var olan ama bir daldan eksik ve diğer modifiye edilmiş); eğer bir yaratılıştan kaynaklanıyorsa (dosya, ortak atada mevcut değildi, fakat her iki dalda da yaratılmıştı) hiçbir aşama 1 girişi olmayacaktır. (Burada 3'ten az girdiden oluşan tüm durumları ele aldığımdan emin değilim.)

Birleştirme işlemini tamamlayıp gerçekleştirmeden önce, sıfır aşamalı girişleri tek bir aşama-0 girişi ile değiştirmeniz gerekir.

1

Birleştirme yaptığınızda, git taban sürümünden her bir ipucundaki değişiklikleri gerektirir. İndeks, temel sürüm kimliğini ve her bir ipucu sürümünü 1 (taban) 2 ("bizim"), 3 ("onların") olarak kaydeder. İçerik kimliğinin kaydedilmesi, çeşitli seçeneklerin altında (örn. 3-farkli çakışma raporlaması almak veya boşluk değişikliklerini göz ardı etmek için) gerekenleri yeniden çalıştırmanıza izin verir. Aşama 0, çözümlenmemiş içerik, içeriden bilgi birleştirme içermeyen içerik içindir.