2012-11-20 16 views
12

Kaynak denetimi için GIT kullanan bir .NET C# projesinde, en son işlenen kodu almak için yeniden biçimlendirmeden sonra hatalı biçimlendirilmiş csproj dosyaları alıyorum. Bu benim bir süreçtir:Neden .csproj dosyaları git rebase'den sonra dağılıyor?

  1. taahhüt kodum
  2. inşa ve çalıştırma testleri
  3. Rebase "son olsun" için csproj dosyası mahvoldu olarak
  4. TEKRAR ...
  5. gökleri küfür

    D:\GitHub\AwesomeProject>git rebase master 
    First, rewinding head to replay your work on top of it... 
    Applying: added getstatus call 
    Using index info to reconstruct a base tree... 
    M  Host/Host.csproj 
    M  Host/packages.config 
    M  Trees/Trees.csproj 
    M  Trees/packages.config 
    M  UnitTests/UnitTests.csproj 
    <stdin>:1229: trailing whitespace. 
        <!-- To modify your build process, add your task inside one of the targets bel 
    ow and uncomment it. 
    warning: 1 line adds whitespace errors. 
    Falling back to patching base and 3-way merge... 
    Auto-merging UnitTests/UnitTests.csproj 
    Auto-merging Trees/packages.config 
    CONFLICT (content): Merge conflict in Trees/packages.config 
    Auto-merging Trees/Trees.csproj 
    Auto-merging Host/packages.config 
    CONFLICT (content): Merge conflict in Host/packages.config 
    Auto-merging Host/Host.csproj 
    Failed to merge in the changes. 
    Patch failed at 0001 added getstatus call 
    
    When you have resolved this problem run "git rebase --continue". 
    If you would prefer to skip this patch, instead run "git rebase --skip". 
    To check out the original branch and stop rebasing run "git rebase --abort". 
    

    : Burada

rebase çıkış var Çatışmalar var, ama görebildiğiniz gibi csproj dosyalarını otomatik olarak birleştirdi ve yanlış yaptı! Csprojfile dosyasının XML'si geçerli değil ve proje yüklenmiyor. İşte neye benzediğini anlatan bir alt yazı aşağıdadır:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    ... most of one version the project file 
    <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> 
<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    ... most of the other version the project file 
    <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> 
</Project> 

Bu neden oluyor? Bununla başa çıkmak için sürecimi nasıl geliştirebilirim?

cevap

18

Biraz farklı bir birleştirme sürücüsü kullanmak için .gitattributes dosyasını kullanmak isteyebilirsiniz. Bu benimki ile yardımcı olduğunu bulduk:

*.csproj -text merge=union 
*.sln -text merge=union 

orada seçenekler daha iyi İsterseniz görmek için o here hakkında daha fazla bilgi bulabilirsiniz.

Ayrıca böyle patience seçeneğinin de birleştirme düşünmeye biraz daha uzun sürebilir için git söyleyebilirim: (read more here)

git rebase -s recursive -X patience 

aklıma gelen tek şey emin olmak için sen misin Kodları sık sık toplayın, böylece birleştirmelerin gitmesi gereken daha küçüktür. Eğer böyle bir çekme yapmak aynı anda aynı hat üzerinde bir rebase yapabilirsiniz istiyorsanız

Bilginize,:

git pull --rebase origin master 
(ve hala aynı recursive ve patience seçeneklerinde geçebilir)
+0

Bunu yaptığımdan beri herhangi bir sorun yaşamadım. Teşekkürler! –

+11

Bir yıldan uzun bir süredir bunu okuyanlar için, bu makaleyi bir Github geliştiricisinden kontrol etmeniz gerekir: http://haacked.com/archive/2014/04/16/csproj-merge-conflicts/ –

İlgili konular