2011-08-12 21 views
5

Başlığından memnun değilim ama açıklamamın aşırı derecede karmaşık olduğunu düşünüyorum ve sonuçta yukarıdaki gibi basit.Hatalı birleştirmeleri depodan kaldır

Bu daldan ayrılan özellik dallarıyla birlikte, bir "geliştirme" dalı olan bir merkezi başlangıç ​​repo'suna sahip bir dallanma modeli kullanıyoruz.

Ben geliştirmek şube kapalı değişikliklerin yerel seti geliştirdi

, gibi bir şey: Bunun yerine uzaktan dalı olarak benim özellik dalı iterek, benim git Arabirimdeki yukarı kaymış ve bu noktada

develop (A)- (D1) - (D2) 
     \ - (F1) - (F2) - (F3) - (F4) 

Orijin, bir şekilde onu kökten geri döndürdüm/geliştirdim. Bu yüzden, şimdi henüz istemedik:

. Bu günde sadece kendim ve başka bir geliştiricim olduğu için, kaynak sunucuya giriş yaptım ve geliştirme kafasını D2 taahhüdüne ve özellik bölümümüzü F4'e geri döndürdüm. Meslektaşımın bunu yapana kadar çekmemesini istedim ve bu yüzden her şeyin iyi olduğunu düşündüm.

(aslında gerçekte repo kaynağını klonladım, kafayı lokal olarak değiştirdikten sonra tekrar yukarı itip tekrar yukarı ittirdim. Aslında tam olarak komutları hatırlamıyorum ama sonuç olarak istenilen sonuç Görebiliyordum).

Unuttuğum şey, sürekli entegrasyon sistemimizin düzenli çekimler yapması ve birleştirilmiş kafaların kopyasını almayı başarmasıdır. Bir hafta sonra orijin ana bilgisayarında cruisecontrol tarafından bazı taahhütler fark ettim ve kötü bir his var. Yeteri kadar kökeni yerel "özellik dalını birleştirdi" repo içine kaynaştırmak baş oldu.

yüzden biraz böyle bir durumda artık:

CruiseControl Repo:

 (from origin/develop)   (C1) - (C2) - (C3) 
develop (A)- (D1) - (D2) -  -  (M1) \ (M2) \ (M3) 
     \ - (F1) - (F2) - (F3) - (F4)/

Menşei Repo: C1 ve C2 kökenli repo haline getirilmiş taahhüt eder edilir

develop (A)- (D1) - (D2) - (C1) - (C2) - (C3) 
     \ - (F1) - (F2) - (F3) - (F4) 

"düzeltilmiş" repoya sahip olan geliştiricilerimiz (yani baştaki hatalarımın ilk hatamı geri alması için) ve M2 ve M3, cruisecontrol repo'nun artık yapmak zorunda olduğu birleşme taahhüdüdür.

Şimdi gerçekten stupid bir şey yaptım. Cruise kontrol kaynağı repo'unda "git" düğmesine basıyorum. Yani bizim "kökeni" repo, şimdi M1 birleştirme ve araya giren M2 ve M3 birleştirir.

Meslektaşlarımı bir süreliğine çekmemek için bir kez daha aldım. Bununla birlikte, git-foo'm Mx ve Cx'in kökeni repoda birbirinden ayrılmaya yetecek kadar güçlü değil ve nasıl olması gerektiğine dair bir şeyler geri yükler.

Ben düşünüyorum HEAD^(x) ve HEAD ~ (y) ile akıllıca bir şeyler yapmam gerekiyor, ancak bu durumun açık ve net bir şekilde açıklanması zor bir durum.

Tüm öneriler memnuniyetle karşılandı; Repo çalışmasında her gece bir yedeğim var ve belki de bundan yeni bir şeyleri geri yükleyebilir ve herkesin bu işten ayrılmalarını tekrar başlatabilir, fakat bu tür bir dallanma çözülmesinin mümkün olup olmadığını bilmek isterim.

Yukarıdaki menşeli diyagramda olduğu gibi menşe repo ile bitebilir ve cruisecontrol repo silinmiş ve yeniden klonlanmış olması gerekir ve menşe repo içinde toplanan çöp M serisi taahhüt eder.

Teşekkürler! Aynı karma ile GIT'de

+0

CI'yi askıya aldınız, CI repo'unu klonlamadınız mı, iyi bir duruma sıfırlayabilmeniz ve geri itmeye zorlayamadınız? Menşe yaptığınız gibi mi? – VonC

+0

M1'in olmadığı zamanlarda C1 ve C2'yi nasıl yaptınız? – Andy

+0

İstenilen son durumu gösterirseniz yardımcı olur, çünkü nerede bitmek istediğinizden emin değilim. –

cevap

2

tüm kaydedilmesini aynıdır (ve böylece tarih yoktur), bu yüzden (develop teslim alındığını verilen aynı hem kökenli komutları ve CI depo kullanmak mümkün olmalıdır:

# on the current branch: 
git reset --hard C3 
# on your feature branch: 
git branch -f feature F4 

git push varsayılan-itme zorlamak olmamalı ve CI -> origin itme oldu sorunuzu ifade etmedi, bu yüzden (varsayılan)

için bir ileri sarma itme oldu sanıyorum gelecek için CI deponuzu bir git fetchyapmasını öneririm, şubelerinizin birleştirilmesini istemediğiniz sürece (muhtemelen yalnızca CI repo içinde varolan işlemlerle)

+0

Bu hile yaptı. Beni görmek için gitg çıktısına bakmanın bir kaç dakikasını aldı, ama sadece birden fazla ebeveynleri (örneğin M (n-1) ve Cn) olan M serileri olduğu için, C3 tarihi istediği gibi verir. Sanırım açıklamam biraz fazla karmaşık olabilir ... Herkese teşekkürler. –