Erro inesperado de mesclagem em um sistema git svn?

Eu tenho uma configuração um tanto complicada (como emgit svn dcommit cometendo arquivo errado?) que se parece com isso (produzido em Dia,testrepo.dia, publicado emessa essência) - e é simulado com o script abaixo,testrepo.sh:

Basicamente, eu tive um repositório SVN em um servidor web (myrepo_svn_WS), com o qual trabalhei através de uma cópia de trabalho SVN no meu PC local (myrepo_svnco) Depois de um tempo, parei com isso e mudei paragit-svn; mas em vez de usá-lo diretamente do meu PC local - eu havia configurado ummyrepo_gitsvn no meu servidor local; a partir dele, um repositório git simples é feito no servidor local,myrepo_git_LS.git, que é adicionado como uma origem remota domyrepo_gitsvn. A idéia é que eu possa trabalhar com PCs locais em relação amyrepo_git_LS.gite mantenha a rede local funcionando em sincronia - mesmo que o servidor svn fique temporariamente offline.

O script abaixo,testrepo.sh, simula esse processo localmente - incluindo omyrepo_svn_WS ficando offline. Se você usar o script como está, notará que o sistema pode "recuperar" o servidor SVN "WS" ficando offline, e o log nesse caso étestrepo_nofail.log. No entanto, se você descomentar o#~ linhas comentadas, que fazem umagit fetch origingit, você notará que o processo falha, para o qual o log étestrepo_fail.log:

remote: Using index info to reconstruct a base tree...
remote: Falling back to patching base and 3-way merge...
remote: Auto-merging folder/file.txt
remote: CONFLICT (content): Merge conflict in folder/file.txt
remote: Failed to merge in the changes.
remote: Patch failed at 0001 5th git commit
remote: 
remote: When you have resolved this problem run "git rebase --continue".
remote: If you would prefer to skip this patch, instead run "git rebase --skip".
remote: To check out the original branch and stop rebasing run "git rebase --abort".

O que me confunde aqui (e por que acho isso inesperado) - é que eu sou osó usuário aqui e, portanto, nem uso ramos! Nesse caso, como eu poderia obter um "conflito de mesclagem"?

O problema é que agora o sistema acabou nesse estado de falha; então minha pergunta é: como posso recuperar o sistema de volta ao estado de funcionamento adequado, de modo que, quando eu faço um commit e envio pelo localmyrepo_git_wc, o servidor da web SVNmyrepo_svn_WS atualiza corretamente?

Algumas notas da comparação dos logs commeld:

Observe que logo após a parte "Simulando conflito de mesclagem via git fetch", o processo parece continuar corretamente - exceto que agora existe umorigingit/master branch (clique para ampliar):

Não pensei muito nisso, porque não pensei emgit-svn como um ramo; mas aqui está uma subquestão: degit-svn eorigingit/master, qual é um ramo?

Essa parte termina aqui:

Observe que, no final, o processo sem falha mostra a árvore do gráfico de log como "compactada" ou "achatada" (ou seja, nenhuma ramificação está se destacando) - enquanto o processo com falha naquele momento não se queixa de erros, mas mostra o árvore do gráfico de log como ramificada.

O problema ocorre somente após o 'sexto commit do git':

O processo com falha na verdade é iniciado, por algum motivo 'Aplicando o 5º git commit', que naquele momento já deveria ter sido tratado; e nesse ponto, o conflito de mesclagem ocorre.

Então, desde que meu sistema (ou melhor,myrepo_gitsvn) está nesse estado de falha, o que posso fazer para recuperá-lo?

Aqui está otestrepo.sh código:

set -x

rm -rf /tmp/myrepo*
cd /tmp

echo "simulating svn web server repo"

svnadmin create myrepo_svn_WS
# svn co file:///tmp/myrepo_svn_WS myrepo_svnco
read -s -p "Enter ssh pass [note, you will be prompted again via GUI for the same]: " SSHPASS
export SSHPASS
# note: the next command will again prompt for sshpass in GUI once, regardless of the SSHPASS variable
sshpass -e svn co svn+ssh://localhost/tmp/myrepo_svn_WS myrepo_svnco
cd /tmp/myrepo_svnco

echo "Adding first commits via svn"

echo aaa > AA.txt
svn add AA.txt
sshpass -e svn ci -m 'first svn commit'

echo bbb > BB.txt
svn add BB.txt
sshpass -e svn ci -m '2nd svn commit'

echo ccc > CC.txt
svn add CC.txt
sshpass -e svn ci -m '3rd svn commit'

echo ddd > DD.txt
svn add DD.txt
sshpass -e svn ci -m '4th svn commit'

echo eee > EE.txt
svn add EE.txt
sshpass -e svn ci -m '5th svn commit'

cd /tmp
echo "Cloning svn as git"

sshpass -e git svn clone svn+ssh://localhost/tmp/myrepo_svn_WS myrepo_gitsvn

echo "Cloning a bare git local server"

git clone --bare myrepo_gitsvn myrepo_git_LS.git

echo "Adding a git local server remote to the gitsvn"

cd /tmp/myrepo_gitsvn
git remote add origingit file:///tmp/myrepo_git_LS.git

cd /tmp
cat > /tmp/myrepo_git_LS.git/hooks/post-update <<EOF
#!/usr/bin/env bash
export SSHPASS=${SSHPASS}
#export GIT_DIR="."
git update-server-info
export GIT_DIR=".git"
echo "post-update kicking in"
cd /tmp/myrepo_gitsvn
git pull --rebase origingit master
git log --graph --decorate --pretty=oneline --abbrev-commit --all --date-order
sshpass -e git svn rebase
sshpass -e git svn dcommit
sshpass -e git svn rebase
git log --graph --decorate --pretty=oneline --abbrev-commit --all --date-order
EOF
chmod +x /tmp/myrepo_git_LS.git/hooks/post-update

cd /tmp
echo "Cloning a git local server to git local working copy"

sshpass -e git clone ssh://localhost/tmp/myrepo_git_LS.git myrepo_git_wc

cd /tmp/myrepo_git_wc
echo "Working from git local working copy now"
git config user.name me
git config user.email [email protected]

mkdir folder
echo hhh > folder/file.txt
git add folder/file.txt
git commit -m "1st git commit"
sshpass -e git push origin master

echo iiii >> folder/file.txt
git add folder/file.txt
git commit -m "2nd git commit"
sshpass -e git push origin master

echo "Simulating svn server offline; git wc commits get added"
mv /tmp/myrepo_svn_WS /tmp/.myrepo_svn_WS

echo jjj >> folder/file.txt
echo jjj > folder/file2.txt
git add folder/file*.txt
git commit -m "3rd git commit"
sshpass -e git push origin master

echo kkkk >> folder/file.txt
echo kkkk >> folder/file2.txt
git add folder/file*.txt
git commit -m "4th git commit"
sshpass -e git push origin master

echo "Simulating svn server back online; git wc commits get added"
mv /tmp/.myrepo_svn_WS /tmp/myrepo_svn_WS

#~ echo "Simulating merge conflict via git fetch"
#~ (cd /tmp/myrepo_gitsvn; git fetch origingit)

echo lll >> folder/file.txt
git add folder/file.txt
git commit -m "5th git commit"
sshpass -e git push origin master

echo mmm >> folder/file.txt
git add folder/file.txt
git commit -m "6th git commit"
sshpass -e git push origin master

questionAnswers(1)

yourAnswerToTheQuestion