2012-11-20 2 views
12

In einem .NET C# -Projekt, das GIT für die Quellcodeverwaltung verwendet, erhalte ich nach der Umbasierung fehlerhaft erstellte csproj-Dateien, um den neuesten Code zu erhalten. Das ist mein Prozess:Warum werden meine .csproj-Dateien nach einer Git-Rebase durcheinander gebracht?

  1. meinen Code
  2. Build und Run-Tests verpflichten
  3. Fütterungsmaterial zu "latest bekommen"
  4. den Himmel verfluchen, da die csproj Datei oben geschraubt wird ... WIEDER

Hier ist die Ausgabe auf dem Fütterungsmaterial:

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

Es gibt Konflikte, aber wie Sie sehen können, hat es die csproj-Dateien automatisch zusammengeführt, und es hat es falsch gemacht !! Das XML der csprojfile ist nicht gültig und das Projekt wird nicht geladen. Hier ist eine abgespeckte Version von, wie es aussieht:

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

Warum passiert das? Und wie kann ich meinen Prozess verbessern, um damit umzugehen?

Antwort

18

Sie können eine .gitattributes-Datei verwenden, um einen etwas anderen Zusammenführungstreiber zu verwenden. Ich habe festgestellt, dass dies mit meinem geholfen hat:

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

Sie können mehr darüber lesen here zu sehen, ob es Optionen, die Sie gerne besser.

Sie können auch git sagen, ein wenig mehr darüber nachzudenken, seine verschmilzt mit der patience Option wie folgt zu übernehmen: (read more here)

git rebase -s recursive -X patience 

Die einzige andere Sache, die ich denken kann, ist sicher zu stellen, dass Sie Code oft ziehen, so dass die Zusammenführungen, die git machen muss, kleiner sind.

FYI, wenn Sie möchten, die gleichzeitig eine rebase auf der gleichen Linie tun, dass Sie einen Zug tun, wie folgt: (und Sie können in den recursive und patience Optionen passieren immer noch die gleichen)

git pull --rebase origin master 
+0

Ich hatte keine Probleme seit ich das getan habe. Vielen Dank! –

+11

Wenn Sie das ein Jahr später lesen, sollten Sie diesen Artikel von einem Github-Entwickler lesen: http://haacked.com/archive/2014/04/16/csproj-merge-conflicts/ –

Verwandte Themen