2012-11-20 10 views
12

In un progetto .NET C# che utilizza GIT per il controllo del codice sorgente, continuo a ricevere file csproj malformati dopo la reimpostazione per ottenere il codice più recente. Questo è il mio processo:Perché i miei file .csproj si incasinano dopo una git rebase?

  1. commettere il mio codice
  2. test costruire e gestire
  3. rebase di "ottenere ultima"
  4. maledire il cielo, come il file csproj è avvitato ... ANCORA

ecco l'output sulla rebase:

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". 

Ci sono dei conflitti, ma come puoi vedere si uniscono automaticamente i file csproj, e lo fanno in modo errato !! L'XML del file csproj non è valido e il progetto non viene caricato. Ecco una versione ridotta di ciò che sembra:

<?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> 

Perché sta succedendo? E come posso migliorare il mio processo per affrontarlo?

risposta

18

Si consiglia di utilizzare un file .gitattributes per utilizzare un driver di stampa leggermente diverso. Ho trovato che questo ha aiutato con il mio:

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

Potete leggere di più su di esso here per vedere se ci sono le opzioni ti piace di più.

Si può anche dire git a prendere un po 'di più a pensare i suoi si fonde con l'opzione patience in questo modo: (read more here)

git rebase -s recursive -X patience 

L'unica altra cosa che mi viene in mente è quello di fare in modo che si pull codice spesso in modo che le unire git deve fare sono più piccoli.

Cordiali saluti, se si vuole si può fare un rebase sulla stessa linea, allo stesso tempo che si fa un tiro in questo modo: (e si può ancora passare nei recursive e patience opzioni lo stesso)

git pull --rebase origin master 
+0

Non ho avuto problemi da quando l'ho fatto. Grazie! –

+11

Per chi legge questo oltre un anno dopo, dovresti dare un'occhiata a questo articolo di uno sviluppatore di Github: http://haacked.com/archive/2014/04/16/csproj-merge-conflicts/ –