2012-11-20 14 views
12

W projekcie .NET C#, który używa GIT do kontroli kodu źródłowego, nadal otrzymuję zniekształcone pliki csproj po ponownym utworzeniu, aby uzyskać ostatnio zatwierdzony kod. To jest mój sposób:Dlaczego moje pliki .csproj są pomieszane po ponownym utworzeniu git?

  1. popełnić mój kod
  2. zbudować i uruchomić testy
  3. rebase aby „najnowsza”
  4. Przeklinam niebiosa, jak plik csproj jest wkręca się ... znowu

Oto wyjście na 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". 

Występują konflikty, ale jak widać, automatycznie scalono pliki csproj i zrobiono to niepoprawnie !! Kod XML pliku csprojfile nie jest prawidłowy i projekt się nie ładuje. Oto podsumowanie tego, jak wygląda:

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

Dlaczego tak się dzieje? I jak mogę poprawić mój proces, aby sobie z tym poradzić?

Odpowiedz

18

Możesz użyć pliku .gitattributes, aby użyć nieco innego sterownika scalania. Przekonałem się, że to pomogło z kopalni:

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

Możesz przeczytać więcej na ten temat here aby sprawdzić, czy istnieją możliwości chcesz lepiej.

Można również powiedzieć git wziąć trochę dłużej myśleć o swoich łączy się z opcją patience jak ten: (read more here)

git rebase -s recursive -X patience 

Jedyną rzeczą, którą mogę pomyśleć, to aby upewnić się, że ciągnąć kod często, aby fuzja git miała do czynienia jest mniejsza.

FYI, jeśli chcesz, możesz zrobić rebase na tej samej linii w tym samym czasie, co robisz ciągnąć tak: (i nadal można przekazać w recursive i patience opcje takie same)

git pull --rebase origin master 
+0

Nie miałem żadnych problemów odkąd to zrobiłem. Dzięki! –

+11

Dla tych, którzy czytają to ponad rok później, powinieneś przeczytać ten artykuł od programisty Github: http://haacked.com/archive/2014/04/16/csproj-merge-conflicts/ –

Powiązane problemy