台灣最大程式設計社群網站
線上人數
991
 
會員總數:245116
討論主題:189028
歡迎您免費加入會員
討論區列表 >> PHP >> 如何以PHP語法結合GIT架構製作更新系統
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
如何以PHP語法結合GIT架構製作更新系統
價值 : 300 QP  點閱數:824 回應數:2

樓主

卓琮偉
門外漢
0 7
264 28
發送站內信

捐贈 VP 給 A-Wei
首先敘述我的環境:

主機A --> 伺服器(Linux、PHP、GIT SERVER) --> 主機B(C.D.E....)(客戶端)

主機A 其實就是我現在在設計程式的電腦

這陣子學習操作GIT版本控制軟體,也算慢慢瞭解其架構和操作方式

如果單獨下指令於主機A git push 將我設計的web程式push至伺服端

再單獨下指令於主機B(客戶端) git pull 或者 git clone 從伺服端把最新更新的程式Dowload至主機B(客戶端)

上述皆以單獨執行為主,而且可以成功

但每次都這樣手動Key指令,有點麻煩

所以我就想在我的網頁程式上加個更新鈕

讓客戶端的使用者按個按鈕就可以自動從伺服端下載最新版的程式下來更新

甚至是再設計一個Grid顯示歷次更新版號

讓客戶端使用者可以選擇要更新的版本

我上網找過

PHP有個 exec() 的語法可以執行系統的 Command 指令

我還有找到 git php 的程式包 抓下來操作執行

執行後

基本的 git add 、 git commit 、 git status 都可正常執行 並echo出我想要的結果

但執行 git push 及 git pull 時

卻出現憑證問題 沒有使用者名稱

但在程式之前已經有給定使用者名稱資訊了

程式如下:



我發現這樣的版在這裡有點少

煩請各位大大或是前輩給予指教或是一起研究

搜尋相關Tags的文章: [ git php ] , [ php git ] , [ git push ] , [ git pull ] , [ git 更新 ] , [ php 更新 ] ,
本篇文章發表於2016-12-06 14:32
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
其實給客戶端使用git的方式。這真的很少人使用。
畢竟git來說真正的用處還是主要是給與開發人員作業處理居多。
這也是為何你會在此找不到相關文章的原因。

先不論其做法好不好,其實我也一直再思考這個問題。
不過大多數而言,我自已常用的方式是採用web get的方式。也就是由客戶自已去知道是否有更新的版本。
然後可直接按下載後自動安裝。至於版本來源也就是透過你自已的主機中,自行打包處理後給與下載。
下載檔一般比較懶的,就是整包下載。好一點的就是只下載有更新過的檔案。

這是目前比較常用的方式。

畢竟git的方式會有一個問題,它只是能幫你更新程式碼。但如果你有資料庫變動結構的情況下。
就不行了(雖然也是可以利用更新程式碼後強制運行的方式)

回來正題,基本上來說,使用exec的命令,要特別小心帳號權限的問題。
畢竟,你直接下命令時的權限,跟利用程式碼跑命令使的權限。是有機會不同帳號的。
所以你很有可能是會發生因權限問題而無法運行某些命令。

當然這並非是單看程式碼就可以知道你的問題。主要還是要了解你的錯誤訊息的原因是什麼才行。
本篇文章回覆於2016-12-06 16:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

卓琮偉
捐贈 VP 給 A-Wei 檢舉此回應
其實會用git的方式是因應我所在公司需求
而我們的內容皆以網頁為主
因為客戶群是一個很大的區域網路
而且遍佈南北及外島

就公司說法....
以往會有我們更新好的網頁內容打包後
再自行前往手動更新

基於這樣的不便利性..才想使用遠端更新的方式..
而我的本意..也正是想利用git的差異更新方式進行更新
資料庫的內容基本上會是共享的~所以問題不大~

這樣的想法也是參考大部分軟體的更新模式..
例如遊戲更新那樣..
當開啟應用程式時..會先進到更新畫面..
並對遠端伺服器抓取軟體版次..
當不同時進行更新~(git pull)

前幾天剛開始接觸時
都是以git push測試
昨天PO完這篇文章後
我開始測試git pull
意外的發現...pull居然不需要任何帳號問題..
也就是說~更新這段被我試成功了~=_=

不過..我還是想嘗試push這段
畢竟也是方便給設計人員..不用老是打五六行指令..

至於版主說的..不同帳號問題..
我有想過~
我可以設計一個form去給使用者填入相關資訊
不過客戶端應該不需要這個form輸入資訊
因為更新用的git pull不需要輸入資訊..直接pull就好

另外..想請教..
因為我是更新網頁~
我在更新前一定會預告客戶端使用者何時更新
當然事情肯定沒那麼順利..
網頁有所謂暫存的畫面..
也就是說...
有可能在我更新伺服端網頁後..
使用者的電腦畫面還停留在未更新畫面
如果只是單純靜態到還好~
但是如果使用者正好在輸入表單資訊時呢?
當送出資料時..應該就會產生問題~
這部分該怎麼解決呢?!

以下附上我前面說的git push時的錯誤畫面

Fatal error: Uncaught exception 'Exception' with message 'Logon failed, use ctrl+c to cancel basic credential prompt. bash: /dev/tty: No such device or address error: failed to execute prompt script (exit code 1) fatal: could not read Username for 'http://192.168.230.22:10080/': Invalid argument ' in C:\AppServ\www\Git.php\Git.php:317 Stack trace: #0 C:\AppServ\www\Git.php\Git.php(334): GitRepo->run_command('git push --tags...') #1 C:\AppServ\www\Git.php\Git.php(629): GitRepo->run('push --tags ori...') #2 C:\AppServ\www\Git.php\gitc.php(25): GitRepo->push('origin', 'master') #3 {main} thrown in C:\AppServ\www\Git.php\Git.php on line 317

另外在附上Git.php的原碼給大家研究



從git hub找來的開放原碼
本篇文章回覆於2016-12-07 09:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.