パッチを厳しくしないようにするにはどうすればよいですか?

パッチを厳しくしないようにするにはどうすればよいですか?

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

2番目のスクリプトは、同様のパッチを生成して「+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 @@

関連情報