2010-12-23 14 views
20

İki şubeli bir havuzum var: canlı ve sahne. Depo, web tabanlı bir uygulama için kod tutar. Sahne alanı ve canlı şubeler için iki farklı .htaccess dosyası bulundurmak istiyorum, ama yine de onları kontrol altında tutuyorum. Çünkü bir sahne sitesine hizmet vermenin doğası biraz farklıdır (örneğin şu anda önbelleklerin zamanlanmasını istiyorum) farklı).Git iş akışı: Belirli bir dosyanın başka bir şubeye birleştirilmesini engelleyebilir, ancak yine de sürüm denetimi altında tutar mı?

Git bir acemiyim, bu yüzden muhtemelen kolay bir açıklama var, ama ben yaşadığım ve bir değişiklik yaptım (basit git merge stage) var olan bir iş akışına sahip olmak istiyorum. canlı şube .htaccess. Bunu yapılandırmanın herhangi bir yolu var mı? Git'te bazı büyük kavramları kaçırıyor muyum?

Aynı şekilde, değişikliklerin kaydını tutmak, ancak onları yeniden yaşama geçirmek istemediğim bir (ama muhtemelen çok) .html dosyası da var. Sadece açık olmak gerekirse, bu dosyalardaki değişikliklerin kaydını tutmak için canlı ve sahne istiyorum, ancak bu değişiklikleri bir araya getirirken birleştirmemeyi bilin.

cevap

29

Ben Yığın taşması bir answer on another question bulundu kredi fcurella gider:

diyelim ki e istediğimizi varsayalım şube A On dosyayı config.php

xclude:

  1. bu hat ile aynı klasöre .gitattributes adlı bir dosya oluşturun: config.php merge=ours. Bu, dosyayı birleştirirken hangi stratejiyi kullanacağını söyler. Bu durumda, her zaman sürümünüzü korur, yani. Birleştirdiğiniz şubenin sürümü.

  2. .gitattributes dosya ekleme ve şube B On

taahhüt: Tekrar 1-2

şimdi birleştirme deneyin adımları tekrarlayın. Dosyanız el değmeden bırakılmalıdır.

Bu daha ölçeklenebilir bir çözüm gibi görünüyor.

+14

Yalnızca birleştirme sırasında config.php dosyasında çakışma olması durumunda çalışır, aksi halde çalışmaz ve dosyanın üzerine yazılır. – dirtyhandsphp

+0

evet ama bu en önemlisidir: Benim durumumda, css dosyalarının değiştirilmeden üst depodaki bir çatalı senkronize etmek istiyorum. –

5

Ankur, şunu deneyin:

canlı dal üzerinde teslim varsayarsak, çalıştırın:

git merge --no-commit --no-ff stage 

Bu iki dalları birleştirmek, ancak bunun yerine yeni bir taahhüt, başarısız olur yapma edecek ve bu değişiklikleri dizin dosyanızda ve çalışma dizininizde bırakın.

git checkout live .htaccess 

Şimdi çalışma ağaç .htaccess hariç aşamasında tüm değişiklikleri vardır ve bu yüzden yapabilirsiniz: Canlı dal üzerinde bozulmadan .htaccess dosyayı korumak istiyor çünkü Şimdi, canlı bu dosyayı ödeme yapabilirsiniz birleştirme sonuçlandırmak taahhüt:

git commit -m "Pulled changes from stage" -a 
+0

Bu genel bir fikirdir, ancak sonuçta farklılıklara sahip olan 5-10 dosyam varsa bu durum iyi ölçeklenmez. Bunları kendi başıma izlemeliydim. – Ankur

+0

Bu birleşmelerde korumak istediğiniz daha fazla dosya varsa, belki de bunları kendi boş dallarına ekleyebilirsiniz (biri canlı site için, diğeri sahne alanı için). Bu şekilde, canlı ve sahne dalları arasında birleştirme işlemleri yaparken normal olarak devam edebilirsiniz, ancak .htaccess ve statik html dosyalarınızın geri kalanındaki değişiklikleri izlemek için yine de ayrı dallara sahip olursunuz. –

İlgili konular