Das Zusammenführen von Git-Teilbaumberichten führt zu Konflikten beim Zusammenführen einer einfachen vorgelagerten Änderung

Ich beginne mit dem Zusammenführen von Teilbäumen in Git 1.8.2. Ich habe ein einfaches Beispiel erstellt, um eine Änderung an einem Repo eines Drittanbieters zu testen, der in ein Hauptprojekt migriert.

Ich folge dem6.7 Git Tools - Zusammenführen von Teilbäumen Beispiel.

Das 'sub'-Projekt ist als Unterverzeichnis im' main'-Projekt enthalten.

Nachdem ich das Unterprojekt geändert habe, meldet git einen Konflikt, wenn ich versuche, die Änderung in das Hauptprojekt einzufügen.

Testzusammenfassung

Repos für Projekte 'main' und 'sub' erstellt (sub statt rack)Fügen Sie dem Hauptmenü den Namen sub_remote hinzu, der sich auf sub beziehtVerfolgen Sie sub_remote mit sub_branchÄndern Sie eine Zeile in einer Datei im Unterprojekt und schreiben Sie sie festZiehen Sie die Änderungen von sub über main / sub_branchFüge main / sub_branch in main / master ein.

Die Zusammenführung schlägt mit einem Konflikt fehl. Merge ist verwirrt, welche Version der geänderten Zeile beibehalten werden soll.

<<<<<<< HEAD
main
=======
main upstream change
>>>>>>> sub_branch
main.git
sub
sub.git
tm

Komplettes Testskript

#!/bin/sh

# initialize empty repos
for i in main sub
do
  rm -rf $i{,.git}
  mkdir $i.git
  cd $i.git;
  git --bare init;
  cd ..;
  git clone $i.git
  cd $i
  echo $i > readme.md
  git add readme.md
  git commit -a -m "added readme.md"
  git push origin master
  cd ..
done

# add data to sub
ls > sub/data
cd sub
git add data
git commit -m "Added data"
git push origin master
cd ..

# add sub as a sub-tree in main
cd main
git remote add sub_remote ../sub.git
git fetch sub_remote
git checkout -b sub_branch sub_remote/master
git checkout master
git read-tree --prefix=sub/ -u sub_branch
git commit -m "Added sub"
git push origin master
cd ..

# make change to sub
cd sub
sed -i -e 's/main$/main upstream change/' data
git commit -a -m "upstream change made to data"
git push origin master
cd ..

# merge sub change to main
cd main
git checkout sub_branch
git pull

#merge sub_branch changes into master
git checkout master
git merge -s subtree sub_branch
cat sub/data

Antworten auf die Frage(2)

Ihre Antwort auf die Frage