欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Drupal中的patch

shiping1 的头像

Drupal中的patch

djf 发表于 2012-2-1 15:06 1年前, 0回/273阅

参加 MoPaaS 应用开发大赛,轻松赢取iPad mini

Patch,英文意思是补丁,它并不是drupal的产物,它是一个linux的命令,说起 它,不得不提linux的另一个命令:diff.在数学 领域,diff是用来对2个集合求差的,patch是求合,在linux命令中,diff用来比较二个文件的不同地方,比如你是一个项目管理者,你让手下 给你修改一下模块,修改好交给你后,你想看看他改了什么地方,就可以用diff命令,格式为:diff [命令行选项] 原始文件 新文件

例如

[hahalee@builder]$ diff -u a.module b.module

diff的常用参数如下:

-r 递归处理目录 -u 输出统一格式(unified format)   -N patch里包含新文件 -a   patch里可以包含二进制文件

如果你把生成的内容输出到一个文件里,比如

[hahalee@builder]$ diff -u example.module example_new.module > example.patch

你就会得到一个新的文件example.patch, 这个文件就是传说中的patch.

它非常有用,举个例子,比如有个模块,同一个文件,你和你的partner同时在修改,完成后,可能要合并代码,怎么合并?之前的做法是一行行比 较,然后手动修改,这种情况如果面对的是成千上万行的代码,还不把人累死。那么标准的做法就是先用diff命令生成patch文件,然后用patch命令 完成二个文件的合并。格式如下:patch [命令行选项] [待patch的文件[patch]].

比如

$patch -p1 < ../example.patch

-p后面的1就是告诉patch,当看到patch文件中的workdir/example时,忽略第一级目录workdir,而将example 作为patch操作的目标文件。当你有多级目录的时候,就可以根据所处目录的层级,任意调整-p后的数字,完成对目标文件的patch操作了。

在linux中,diff,patch一般是带的,但是在windows中,得需要你安装了。

如果你喜欢命令行工具,可以安装GnuWin32 , Unxutils,或者 Cygwin.

如果你喜欢图形化的,可以用TortoiseSVN 或者 Eclipse.

来自 http://www.oschina.net/question/192301_37181

 

怎样为Drupal打补丁 (How to use patch)

 

有一些模组在drupal新核心升级后、或其依赖的其他模组升级后需要通过打补丁的形式做暂时性修复一些BUG。

这就需要为它来打补丁,及通过patch命令将补丁文件内容替换插入到原文件当中去。

如何为drupal打补丁?patch其实很简单!

 比如某个模组文件为:design.module ;其补丁文件为.patch后缀名,如:adddesign.patch

打补丁步骤

  1. 通过putty或winscp登录进入到该原文件design.module所在目录,
  2. 下载/上传补丁文件adddesign.patch到该目录下(即design.module与adddesign.patch在同一目录下)
  3. 通过ssh窗口 执行下面的patch命令: patch < adddesign.patch 

如此,补丁就打好了!

关键词: 
patch

来自 http://the1design.cn/node/174



如何使用 Patch 檔 ?

阿舍在很久以前,大概是一個月之前吧 ! 就有試著要為一個模組來更新 pacth 檔,那時候就有想要寫一篇如何使用 Patch 的說明,不過,一拖之後就給它忘了,呵.....呵。

直到這一、二天鱷魚兄問有一個有關 cache_menu 的問題,因為需要用 patch 檔來更新才能解決,這才讓阿舍又想起來要寫這篇文哩.....。

首先,還是簡單說明一下什麼是 Pacth ? 以中文來說,就是俗稱的 "補丁",還是有聽沒有懂 ? OK,事情這樣子的,大部的軟體都一直更新版本,而更新版本的主要目的有二個,第一個是增加新功能,第二個就是要解決上一個或現有的版本問題 ( 俗稱叫 Bug 的東西 ),但是,要更新一個版本是一件不能隨便的事,因為,總是要做很多的測試,等確定都沒問題的時候才會發出一個新版本。

但是,這種方式會產生一種情況,就是,在版本和版本正式發行的中間,有使用者遇到幾個嚴重問題,或者是,有一些只會發生在某些特定情況的問題時,那要怎麼辦 ? 這時,就是利用 Patch 來修正此類型的問題,最典型的範例就屬 Windows 的更新了,每次更新的便是 Patch,只是更新的方式和 Drupal 完全不同的,但是觀念卻是一樣的。

在 Drupal 上,Patch 是一個標準的文字檔,裡面所放的資訊便是說明要去改那一個模組程式檔或是包含檔的那一行和那一段程式碼,在 Patch 檔裡的 +++ 和 --- 符號就是用來說明要在那裡增加或刪除程式碼的,所以,就算不用程式去做 Patch 更新的動作,也是可以由大德自己手動去複製 & 貼上來達到效果的,只不過,有效 Patch 檔可能會讓大德用手調到抽筋哩 ! 所以,還是用工具比較好吧...-___-!!。

在 Linux 或是 Unix 上,這個動作相對於 Windows 是比簡單的,因為 Patch 這支程式,本來就有的,而 Windows 則是沒有的,所以要花點時來選一選。

Drupal 官網上建議給 Windows 的 Patch 程式有三支,阿舍大概評估了一下,還是那支 GNU 出的 Patch 比較好用,所以本文就是用這支來紹囉 !!

開始之前,還是要提醒各位大德們,要更新任 Patch 之前,還是先架個測試環境會比較安全有保隌哩 !!

詳細作法說明如下:

1.下載 GNU 的 Patch 程式。
請到這裡下載 Patch 的壓縮檔
http://gnuwin32.sourceforge.net/downlinks/patch-bin-zip.php

說明一下,Patch 的網站上也可提供可以執行 Setup 的版本,但是,阿舍不太建議用那個方式,因為,阿舍有試著去安裝,但是,裝好之後,實在看不出有什麼特別用處哩 !

2.解壓縮。
把下載的檔案解壓縮到一個目錄裡,最好是直接在根目錄下,待會操作的時候會比較方便。

阿舍是把下載來的 patch-2.5.9-7-bin.zip 檔,解壓縮到 c:\patch 放。

3.下載 Patch 檔。
依阿舍的經驗來說,Patch 檔大都是在官網的論壇裡發現的,阿舍還沒不知道是否有專門可以下載的地方可以下載,如果各位大德有人知曉的話,就請不吝告知一下囉 ! 多謝 !!

4.開始更新。
再來便是重頭戲了,要準備開始更新哩 !

4-1 進入命令列視窗 ( 就是俗稱的 DOS 視窗 )
請按右下角的「開始」>「執行」> 打入「cmd」後,按確定,應該就會跳出一個黑底白字的視窗來。

4-2 切換路徑到 drupal 的安裝目錄
在 DOS 視窗下打入 "cd drupal 的安裝目錄",以阿舍的 drupal 為例,阿舍的 Drupal 6 是裝在

\drupal\TWAPMS_D62\TWAPMS\Apache\htdocs\drupal62"

所以,就要這樣下

cd \drupal\TWAPMS_D62\TWAPMS\Apache\htdocs\drupal62

然後,應該就會跳到 drupal 的安裝目錄去了。

4-3 執行 Patch

執行的方式如下:

patch -p0 < patch檔名 --verbose --binary

所以,以阿舍把 GNU 的 patch 執行檔放在 c:\patch,而下載的 patch 檔放在 c:\download\mc.patch 來當範例的話,結果就是要這樣下:

c:\patch\bin\patch -p0 < c:\download\mc.patch --verbose --binary

輸入完後,按一下 Enter 鍵,patch 的動作應該就會執行了,大德們就可看到更新的結果了,GNU 的 Patch 程式是會列示做過那些修改的。

5.更新或上傳已經修改的檔案
把修改過的檔案 ( 從 Patch 程式跑完後的畫面可以看出更新過那些檔案 ) 上傳或複製到線上系統 ( 要覆蓋 ),這樣就算大功告成了。

drupal.org 官網上的 Patch 相關教學
http://drupal.org/patch

来自 http://drupal.soa.tw/how_to_patch#.UsZf0HDexY4

 

windows下如何使用patch檔更新模組?

在官網看到有網友寫了一個模組patch程式,覺得蠻適合用的想抓下來更新模組
不過patch似乎是在linux下來使用
我的os是windows!要更新模組的patch檔要如何操作?
另想問!
若patch完發現功能不如預期,能否再拉回原來狀況....

MarkC's 的頭像

Re: windows下如何使用patch檔更新模組?

我找到說明了!原來還要裝Cygwin之類的軟體.....
相關網址在這:http://drupal.org/node/620014
有需要的人可以參考

来自 http://drupaltaiwan.org/forum/20110519/5218



 

 

普通分类: