15

ソース管理に GIT を使用する .NET C# プロジェクトで、最近コミットされたコードを取得するためにリベースした後、不正な形式の csproj ファイルを取得し続けます。これは私のプロセスです:

  1. 私のコードをコミットする
  2. テストをビルドして実行する
  3. 「最新のものを取得」するようにリベースします
  4. csprojファイルが台無しになっているので、天国を呪ってください...もう一度

リベースの出力は次のとおりです。

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 が無効で、プロジェクトが読み込まれません。これは、それがどのように見えるかの簡素化されたバージョンです:

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

なぜこうなった?また、それに対処するためのプロセスをどのように改善できますか?

4

1 に答える 1

20

.gitattributes ファイルを使用して、わずかに異なるマージ ドライバーを使用することもできます。これが私の助けになっていることがわかりました:

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

ここで詳細を読んで、より良いオプションがあるかどうかを確認してください。

patience次のようなオプションを使用して、マージについて考えるのにもう少し時間がかかるように git に指示することもできます: (詳細はこちら)

git rebase -s recursive -X patience

私が考えることができる唯一の他のことは、コードを頻繁にプルして、git が行う必要があるマージが小さくなるようにすることです。

参考までに、必要にrebase応じて、同じ行で同時に次のようなプルを行うことができます: (そして、オプションrecursivepatienceオプションを同じように渡すことができます)

git pull --rebase origin master
于 2012-11-20T22:52:35.050 に答える