Git - çatışma birleştirme gücü nasıl ve manuel seçili dosya üzerinde birleştirme
Ortak ana dal ve çok sayıda paralel dalları, her yükleme için bir olan, birkaç belirli değişiklikler her bir uygulama korumak. Kaynak kodu git yönetilmektedir ve paralel olanları içine ana daldan özellikler ve hata düzeltmeleri transfer ihtiyacımız olduğunda müthiş bir araçtır. Ama hassas ve otomatik olarak bazı dosyalar genellikle kötü sonuçlar verir birleşiyor. Her birleştirme eğer bir şekilde işaretlenmiş olup olmadığını çok daha kolay olurdu ve birleştirme çatışma manuel birleştirme gerektiren neden olacaktır.
Bir cevap aradım :
- Kullanıyorum--no-tamamlamave--no-ffbirleştirme seçenekleri, ama aynı değildir.
- Here here biri ama hiçbir çözüm aynı soruyu sorar.
- Benzer durum how to prevent file being merged kullanarak gibi görünüyor .gitattributes içeren:somefile.php birleştirme=bizimki. Yaşanan çatışmalardan ya da manuel ama hiçbiri şimdiye kadar birleştirme bulundu zorlayacak olan bazı seçeneği birleştirme bulmaya çalıştım.
- .gitattributes içeren:somefile.php -birleştirmehiçbir zaman otomatik olarak birleştirilmiş ve bu nedenle manuel zorluyor birleştirme. 90% çözümdür, ama benim aradığım otomatik birleştirme ve başarılı ya da değil, ne olursa olsun çatışma olarak işaretleyin çalışmaktır.Ama bu şimdiye kadar çözüme yakın.(...teşekkürler açıklama için Charles Bailey
- Birisi özel bir sürücü birleştirme yazmanı öneririm (, *1*16), ama nasıl benim için açık değil.
düzenleme:varyant 4. açıklama
CEVAP
Seçenek 5, sürücü birleştirme özel, muhtemelen bu şekilde istediğini yakın elde etmektir. Şaşırtıcı derecede kolay. Aşağıda, arzu edilen davranış için çok yakın olmalı bence bunun bir örneğidir.
İlk olarak, birleştirme sürücüsü bir komut dosyası merge-and-verify-driver
oluşturun. Çalıştırılabilir yapın ve uygun bir yere koyun (repo yapılandırma dosyası bağlı olmadığından repo içine bu komut, kontrol bile dikkate almak isteyebilirsiniz). Git bu kabuk hassas dosyaları birleştirme gerçekleştirmek için idam etmek çok kolaydır
#!/bin/bash
git merge-file "${1}" "${2}" "${3}"
exit 1
Bu Git Kendini normalde bu varsayılan davranış birleştirme yapar. En önemli fark, senaryoyu her zaman sıfır (birleştirme bile bir çatışma olduğunu göstermek için, aslında çatışmalar olmadan çözüldü) verir.
Sonraki, özel birleştirme şoförün varlığı hakkında Gıt söylemelisin. Repo yapılandırma dosyası (.git/config
) Bu:
[merge "verify"]
name = merge and verify driver
driver = ./merge-and-verify-driver %A %O %B
Bu örnekte, repo üst seviyesinde merge-and-verify-driver
koydum dizin (./
). Komut dosyası yolu buna göre belirtmeniz gerekir.
Şimdi, sadece özel birleştirme sürücüsü dosyaları birleştirirken kullanılır, böylece hassas dosyaları uygun öznitelikleri vermek gerekir. .gitattributes
dosyanıza bunu ekleyin:
*.sensitive merge=verify
Burada, bir ad *.sensitive
özel kullanmalısınız desen eşleştirme ile herhangi bir dosya sürücü birleştirme Gıt söyledim. Belli ki, dosyanız için uygun olan desen(ler) kullanmak gerekir.
Bir birleştirme çatışma ile karşılaştı...
Nasıl işliyor birleştirmek yerine tek ...
Nasıl "git" her değiştirilen...
Nasıl bir dosya birleştirme sonuçlandı...
Nasıl yerel bir dosya ya da uzak dosya...