2012-11-20 38 views
12

एक .NET C# प्रोजेक्ट में जो स्रोत नियंत्रण के लिए जीआईटी का उपयोग करता है, मैं सबसे हाल ही में दिए गए कोड प्राप्त करने के लिए पुन: प्रयास करने के बाद विकृत csproj फ़ाइलों को प्राप्त करता रहता हूं। यह मेरा प्रक्रिया है:मेरी .csproj फ़ाइलों को गिट रिबेस के बाद गड़बड़ क्यों हो रही है?

  1. प्रतिबद्ध मेरी कोड
  2. निर्माण और चलाने के परीक्षण
  3. रिबेस "नवीनतम प्राप्त करने के लिए"
  4. , आकाश शाप के रूप में csproj फ़ाइल को खराब कर दिया है ... फिर
  5. 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". 
    

    :

यहाँ रिबेस पर उत्पादन है संघर्ष हैं, लेकिन जैसा कि आप इसे csproj फ़ाइलों को स्वतः विलय कर सकते हैं, और यह गलत तरीके से किया !! Csprojfile का एक्सएमएल मान्य नहीं है और प्रोजेक्ट लोड नहीं होता है। यहां एक छिपी हुई कथन है जो यह दिखता है:

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

ऐसा क्यों हो रहा है? और मैं इससे निपटने के लिए अपनी प्रक्रिया में सुधार कैसे कर सकता हूं?

उत्तर

18

आप थोड़ा अलग विलय ड्राइवर का उपयोग करने के लिए .gitattributes फ़ाइल का उपयोग करना चाह सकते हैं। मैं ने पाया है कि यह मेरा साथ मदद की है:

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

आप को देखने के लिए यह here के बारे में अधिक पढ़ सकते हैं, अगर वहाँ विकल्प हैं तो आप बेहतर पसंद है।

तुम भी थोड़ी देर patience विकल्प इस तरह के साथ अपने मर्ज के बारे में सोच लेने के लिए Git बता सकते हैं: (read more here)

git rebase -s recursive -X patience 

केवल दूसरी बात यह है कि मैं के बारे में सोच सकते हैं यह सुनिश्चित करना है कि आप कोड को अक्सर खींचें ताकि विलय विट को कम करना पड़े।

FYI करें, अगर आप आप एक ही समय है कि आप इस तरह एक पुल कर पर एक ही लाइन पर एक rebase क्या कर सकते हैं:

git pull --rebase origin master 
(और आप अभी भी recursive और patience विकल्प ही में पारित कर सकते हैं)
+0

ऐसा करने के बाद से कोई समस्या नहीं आई है। धन्यवाद! –

+11

एक साल बाद इसे पढ़ने वाले लोगों के लिए, आपको इस आलेख को गिटूब डेवलपर से देखना चाहिए: http://haacked.com/archive/2014/04/16/csproj-merge-conflicts/ –