패치를 덜 엄격하게 만들려면 어떻게 해야 합니까?

패치를 덜 엄격하게 만들려면 어떻게 해야 합니까?

git몇 가지 배경 지식을 제공하기 위해 "일부 친구만 제출" 워크플로를 에서 으로 이식하려고 합니다 svn.

대화형 섹션이 있으며 git제출하려는 블록을 편집할 수도 있습니다(제출하려는 블록 부분을 선택하거나 원래 블록에 없었던 콘텐츠를 제출할 수도 있음). 그런 것은 없지만 svn할 수 있습니다 diff/ patch.

이제 몇 가지 테스트를 해보겠습니다. 첫 번째 스크립트는 단일 커밋으로 저장소를 만들고, 파일을 편집하고, 대화형 스테이징을 실행합니다.

#!/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

스크립트를 실행하고 블록으로 무엇을 할 것인지 묻는 메시지가 나타나면 편집을 선택하고 "+222" 줄을 삭제한 다음 편집기를 종료합니다. 당신은 볼 수 있습니다 :

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

두 번째 스크립트는 유사한 패치를 생성하고 "+222" 줄을 제거한 후 결과 패치를 적용하려고 시도합니다.

#!/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

하지만 실패합니다.

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

부품을 수동으로 편집하지 않고 작동하게 하는 방법이 있습니까 @@ -1,2 +1,5 @@?

관련 정보