2011-12-28 12 views
5

numaralı belgede iade edilecek hiçbir değişiklik yoktur. "Önceden oluşturulmuş" derlemeleri, TeamCity kuruluş projelerimizden biri olarak TFS'de güncelleştirmek için bir NAnt komut dosyası hazırladık. Yapı, diğer yapılar tarafından tetiklenir. Bir TF checkout yapar, bazı dosyaları taşır, sonra bir TF check-in yapar.TF hatası:

Checking in edit: ... 
The following changes were not checked in because the items were not modified. 
Undoing edit: ... 
There are no remaining changes to check in. 
External Program Failed: E:\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe (return code was 1) 
Process exited with code 1 
BUILD FAILED - 0 non-fatal error(s), 1 warning(s)

Düşündüğüm şey oluyor kez çok fazla tetiklendiğinde inşa geçerli:

<target name="checkin.assemblies"> 
    <exec program="${tf}"> 
    <arg value="checkin" /> 
    <arg value="${dir.assemblies}" /> 
    <arg value="/comment:${message}." /> 
    <arg value="/noprompt" /> 
    <arg value="/recursive" /> 
    </exec> 
</target> 

Düzenli elde ederiz:

ilgili hedef (tf TF.exe yoluna giderir) zamanlar (bunu tetikleyebilecek birkaç yapı vardır). Güncellemek istediğimiz dosyalar değişmediyse, TFS check-in işlemini atlar ve "yardımcı olarak" bir hata kodu döndürür. Ne yazık ki, şiddetli olan "check-out için kilitli" hatalar için de 1 döndürecektir. Başvuru için

: TF Command-Line Exit Codes

geçici çözüm basit ama can sıkıcı - bir derlemenin sürüm numarasını çarpmak ve sonra bu yapı tetikleyecek yapýlar birini ateşlemesi.

Bu işi nasıl güvenilir bir şekilde yapabiliriz?

Güncelleme: TeamCity için derleme tetikleme yapılandırmalarının, “sadece zincirler bir kez tetiklendiğini” belirten “zincirler” oluşturmak için gözden geçirdik.

cevap

8

/force adı verilen tf checkin için belgelenmiş bir komut satırı parametresi vardır. in the usage and on MSDN listeleniyor, ancak hiçbir yerde açıklanmadı.

Bu, CheckinParameters.AllowUnchangedContent bayrağını ayarlar ve herhangi bir değişiklik olmayan bir dosyayı check-in yapmanıza izin verir. Bu probleminizi çözmeli.