ÔÚ¸ø¿Í»§Ìṩ¼¼ÊõÖ§³Ö¹¤×÷µÄʱºò£¬³£»áÓöµ½ÐèÒªÐ޸ĸ÷ÖÖ²»Í¬µÄÅäÖÃÎļþ¡£¹ýÈ¥µÄ·½Ê½£¬Í¨³£ÊÇÃèÊöÐ޸ĵĵط½£¬È»ºóÓÉÓû§×ÔÐÐÐ޸쬻òʹÓÃsedµÈ¹¤¾ßдһ¸ö½Å±¾¸øÓû§ÔËÐС£µ«ÕâÑù»á´øÀ´Ò»Ð©ÎÊÌ⣺Èç¹ûÓû§²»»ávi£¬»òÕßËûÀí½â´í¡¢ÕÒ´íÅäÖõÄλÖã¬ÕâÑù´øÀ´µÄÎÊÌâ¿ÉÄܸüÄÑÔ¤¼Æ¡£
´Ëʱ£¬»òÐí¿ÉÒÔÊÔÊÔÎҵķ½·¨£¬½èÓÃdiffºÍpatchÖ±½Ó°ïÓû§Ð޸ģ¬È»ºó°ÑÉú³ÉµÄ¡°patch²¹¶¡¡±·¢¸øËûÔËÐм´¿É¡£ÕâÑù¹¤×÷Á¿Ð¡£¬¶øÇÒÒ²ÄÜ¿ØÖÆÐ޸ĺóµÄ½á¹û£¬µ±È»Ò²·½±ãEmail·¢ËÍ¿©¡£
Ò»¡¢½éÉÜ
diffºÍpatchÊÇÒ»¶Ô¹¤¾ß£¬ÔÚÊýѧÉÏÀ´Ëµ£¬diffÊǶÔÁ½¸ö¼¯ºÏµÄ²îÔËË㣬patchÊǶÔÁ½¸ö¼¯ºÏµÄºÍÔËËã¡£diff±È½ÏÁ½¸öÎļþ»òÎļþ¼¯ºÏµÄ²îÒ죬²¢¼Ç¼ÏÂÀ´£¬Éú³ÉÒ»¸ö²îÒìÎļþ£¬ÕâÒ²ÊÇÎÒÃdz£ËµµÄ²¹¶¡Îļþ¡£²¹¶¡ÎļþÄÜÔËÓÃÓÚÔÀ´µÄÁ½¸ö¼¯ºÏÖ®Ò»£¬´Ó¶øµÃµ½ÁíÒ»¸ö¼¯ºÏ¡£
¾Ù¸öÀý×ÓÀ´ËµÎļþAºÍÎļþB,¾¹ýdiffÖ®ºóÉú³ÉÁ˲¹¶¡ÎļþC,ÄÇôןö¹ý³ÌÏ൱ÓÚ A -B = C ,ÄÇôpatchµÄ¹ý³Ì¾ÍÊÇB+C = A »òA-C =B¡£
Òò´ËÎÒÃÇÖ»ÒªÄܵõ½A, B, CÈý¸öÎļþÖеÄÈκÎÁ½¸ö£¬¾ÍÄÜÓÃdiffºÍpatchÕâ¶Ô¹¤¾ßÉú³ÉÁíÍâÒ»¸öÎļþ¡£
¶þ¡¢Ê¹ÓÃ
ʵÀý˵Ã÷ÊÇ×î¿ìµÄ·½·¨£¬¼ÙÉèÏÖÔÚÓÐa¡¢bÁ½¸öÎļþ£¬ÄÚÈÝÈçÏ£º
$ cat a
123456
$ cat b
abcdef
ÆäÖÐaÊÇÓû§·¢¸øÎÒµÄÎļþ£¬¶øbÊÇÎÒÐ޸ĺóµÄÎļþ¡£
ÄÇÎÒÃÇ¿ÉÒÔÕâÑùÉú³ÉcÎļþ£º
$ diff -Naur a b > c
È»ºó£¬¿ÉÒÔ°ÑcÎļþ·¢¸øÓû§£¬ÔËÐÐÈçϵÄÃüÁî¼´¿É×ÔÐÐÐÞ¸Äa->b£º
$ patch -p0 a < c
patching file a
½á¹ûÈçÏ£º
$ cat a
abcdef
Èý¡¢»Ö¸´
ÉÏÃæµÄ²Ù×÷ºÜ¼òµ¥°É¡£ÄÇÈç¹ûÍòÒ»aÐÞ¸ÄÓÐÎó£¬ÈçºÎ»Ö¸´ÄØ£¿Í¨¹ýÇ°ÃæµÄ˵Ã÷¿ÉÒÔÖªµÀ£¬Í¨¹ýcÎļþÊÇ¿ÉÒÔÖ±½Ó»Ö¸´µÄ£º
$ patch -R -p0 a < c
patching file a
$ cat a
123456
¿ÉÒÔ¿´µ½Ê¹ÓÃdiffºÍpatchÊDZȽϰ²È«µÄ£¬Çë×¢Òâ-RÑ¡ÏîŶ£¡
ÁíÍ⣬diffÉú³ÉµÄcÎļþÊÇÓмǼÎļþÃûµÄ£¬ÔÚ²»Ö¸¶¨ÔÎļþµÄÇé¿öÏ£¬¿ÉÒÔ×Ô¶¯Ê¶±ð£º
$ patch -p0 < c
patching file a
·´ÁË»áÕâÑù£º
$ patch -p0 b < c
patching file b
Reversed (or previously applied) patch detected! Assume -R? [n] n
Apply anyway? [n] n
Skipping patch.
1 out of 1 hunk ignored -- saving rejects to file b.rej
ËùÒÔ£¬Ò»°ãÊDz»»á¸ã´íоÉÎļþµÄ¡£
ËÄ¡¢Â·¾¶ÎÊÌâ
ºÜ¶àʱºò£¬ÎÒÃÇ»¹»áÓöµ½Ò»¸öÎÊÌâ¡£¾ÍÊÇΪÁË·ÀÖ¹ÎļþÐÞ¸Ä´í£¬»òÐèҪͬʱÐ޸Ķà¸öÎļþ£¬¿ÉÄܻὨÁ¢¶àÒ»²ãĿ¼£¬ÀýÈ磺
$ ls -R
.:
new old
./new:
b
./old:
a
diffÊÇ¿ÉÒÔʶ±ð·¾¶£º
$ diff -Naur old/ new/ > c
²¹¶¡ÐèÒªÕâÑù´ò£º
$ cd old/
$ patch -p1 < ../c
patching file a
patching file b
½á¹ûÈçÏ£º
$ ls
b
$ cat b
abcdef
¡ù×¢Òâ¿©£¬ÕâÑù»á°ÑÕû¸öĿ¼µÄÎļþÄÚÈݺÍÎļþÃû¶¼¸ÄµôµÄ¡£ÁíÍ⣬Èç¹ûĿ¼ÖÐÓжà¸öÎļþ£¬³ýÁËnewĿ¼ÖеĿÕÎļþÍ⣬»á°ÑoldϵÄËùÓÐÎļþ¶¼»»³ÉnewµÄÎļþºÍÄÚÈÝ£»newûÓУ¬¶øoldÓеÄÎļþ£¬»áɾ³ý¡£
-pN²ÎÊýµÄÒâ˼ÊÇ£ºÈ¡ÏûN²ãĿ¼£¬Ò²¾ÍÊǰÑold/¸ÄΪ./
Îå¡¢×¢ÒâÊÂÏî
1¡¢ÔÚpatch֮ǰ²»Òª¶ÔÔÎļþ½øÐÐÈκÎÐ޸쬷ñÔò²¹¶¡¿ÉÄÜ»áʧЧ£»
2¡¢Èç¹û×öÁ˶à¸ö²¹¶¡£¬Çë×¢ÒâÏȺó˳Ðò£¬Òª°´´ÎÐò´ò²ÅÐУ»
3¡¢Èç¹û´ò²¹¶¡³öÏÖÎÊÌ⣬»áÉú³É.rejÎļþ£¬ÆäÖаüÀ¨ÔÎļþºÍ²¹¶¡²îÒìµÄµØ·½¡£
À´Ô´£ºLinuxÉçÇø