Como tornar o patch não tão rigoroso?

1

Para dar a você o histórico, estou tentando "portar" o fluxo de trabalho "confirmar apenas partes de partes" de git para svn .

Em git existe uma simulação interativa, e você pode até mesmo editar hunks para serem cometidos (escolha quais partes de hunks para commitar, ou até mesmo commitar algo que não estava no hunk inicialmente). Em svn não existe tal coisa, mas você pode diff / patch .

Agora vamos fazer alguns testes. O primeiro script cria um repositório com um commit, edita o arquivo e executa o teste interativo:

#!/usr/bin/env bash
set -eu
rm -rf 1   # !!! it removes dir '1'
mkdir 1
cd "$_"
git init
echo 'aaa
bbb' > 1
git add 1
git ci -am c1
sed -i 's/aaa/aaa\n111\n222\n333/' 1
git add -p
git --no-pager diff
git --no-pager diff --cached

Execute o script e, quando perguntado sobre o que fazer com o hunk, escolha "edit", remova a linha "+222" e saia do editor. Você verá:

Initialized empty Git repository in /home/yuri/_/1/1/.git/
[master (root-commit) 1274f4f] c1
 1 file changed, 2 insertions(+)
 create mode 100644 1
diff --git a/1 b/1
index dbee026..5c89250 100644
--- a/1
+++ b/1
@@ -1,2 +1,5 @@
 aaa
+111
+222
+333
 bbb
Stage this hunk [y,n,q,a,d,/,e,?]? e

diff --git a/1 b/1
index f1dea50..5c89250 100644
--- a/1
+++ b/1
@@ -1,4 +1,5 @@
 aaa
 111
+222
 333
 bbb
diff --git a/1 b/1
index dbee026..f1dea50 100644
--- a/1
+++ b/1
@@ -1,2 +1,4 @@
 aaa
+111
+333
 bbb

O segundo script cria um patch semelhante, remove a linha "+222" e tenta aplicar o patch resultante:

#!/usr/bin/env bash
set -eu
rm -rf 2   # !!! it removes dir '2'
mkdir 2
cd "$_"
echo 'aaa
bbb' > 1
echo 'aaa
111
222
333
bbb' > 2
diff -u 1 2 > 1.patch || true
cat 1.patch
sed -En -i '/\+222/!p' 1.patch
cat 1.patch
patch -p0 < 1.patch

Mas isso falha:

--- 1   2015-12-04 21:52:58.815274483 +0200
+++ 2   2015-12-04 21:52:58.815274483 +0200
@@ -1,2 +1,5 @@
 aaa
+111
+222
+333
 bbb
--- 1   2015-12-04 21:52:58.815274483 +0200
+++ 2   2015-12-04 21:52:58.815274483 +0200
@@ -1,2 +1,5 @@
 aaa
+111
+333
 bbb
patching file 1
patch: **** malformed patch at line 7:  

Existe uma maneira de fazê-lo funcionar sem editar manualmente @@ -1,2 +1,5 @@ parts?

    
por x-yuri 04.12.2015 / 20:57

0 respostas