A. 如何使用Git 鉤子來自動化開發和部署任務
版本控制,這是現代軟體開發的核心需求之一。有了它,軟體項目可以安全的跟蹤代碼變更並執行回溯、完整性檢查、協同開發等多種操作。在各種版本控制軟體中,Git是近年來最流行的軟體之一,它的去中心化架構以及源碼變更交換的速度被很多開發者青睞。
在git的眾多優點中,最有用的一點莫過於它的靈活性。通過「hooks」(鉤子)系統,開發者和管理員們可以指定git在不同事件、不同動作下執行特定的腳本。
本文將介紹git hooks的基本思路以及用法,示範如何在你的環境中實現自動化的任務。本文所用的操作系統是Ubuntu 14.04伺服器版,理論上任何可以跑git的系統都可以用同樣的方法來做。
前提條件
首先你的伺服器上先要安裝過git。Ubuntu 14.04的用戶可以查看這篇教程了解如何在Ubuntu
14.04上安裝git。
其次你應該能夠進行基本的git操作。如果你覺得對git不太熟,可以先看看這個Git入門教程。
上述條件達成後,請繼續往下閱讀。
Git Hooks的基本思路
Git hooks的概念相當簡單,它是為了一個單一需求而被設計實現的。在一個共享項目(或者說多人協同開發的項目)的開發過程中,團隊成員需要確保其編碼風格的統一,確保部署方式的統一,等等(git的用戶經常會涉及到此類場景),而這些工作會造成大量的重復勞動。
Git hooks是基於事件的(event-based)。當你執行特定的git指令時,該軟體會從git倉庫下的hooks目錄下檢查是否有相對應的腳本,如果有則執行之。
有些腳本是在動作執行之前被執行的,這種「先行腳本」可用於實現代碼規范的統一、完整性檢查、環境搭建等功能。有些腳本則在事件之後被執行,這種「後行腳本」可用於實現代碼的部署、許可權錯誤糾正(git在這方面的功能有點欠缺)等功能。
總體來說,git hooks可以實現策略強制執行、確保一致性、環境控制、部署任務處理等多種功能。
Scott Chacon在他的Pro Git一書中將hooks劃分為如下類型:
客戶端的hook:此類hook在提交者(committer)的計算機上被調用執行。此類hook又分為如下幾類:
代碼提交相關的工作流hook:提交類hook作用在代碼提交的動作前後,通常用於運行完整性檢查、提交信息生成、信息內容驗證等功能,也可以用來發送通知。
Email相關工作流hook:Email類hook主要用於使用Email提交的代碼補丁。像是Linux內核這樣的項目是採用Email進行補丁提交的,就可以使用此類hook。工作方式和提交類hook類似,而且項目維護者可以用此類hook直接完成打補丁的動作。
其他類:包括代碼合並、簽出(check out)、rebase、重寫(rewrite)、以及軟體倉庫的清理等工作。
伺服器端hook:此類hook作用在伺服器端,一般用於接收推送,部署在項目的git倉庫主幹(main)所在的伺服器上。Chacon將伺服器端hook分為兩類:
接受觸發類:在伺服器接收到一個推送之前或之後執行動作,前觸發常用於檢查,後觸發常用於部署。
更新:類似於前觸發,不過更新類hook是以分支(branch)作為作用對象,在每一個分支更新通過之前執行代碼。
上述分類有助於我們對hook建立一個整體的概念,了解它可以用於哪類事件。當然了,要能夠實際的運用它,還需要親自動手操作、調試。
B. 求高手解決腳本不能後台運行的問題,急!!!
下面是用按鍵精靈7.31編寫的腳本,只能前台,請高手指明下,謝謝!!!
//下面這句是得到當前最前面的窗口句柄
Plugin Hwnd = Window.Foreground()
//下面這句用於向後台窗口句柄(變數:Hwnd)發送一個滑鼠移動到客戶區域(坐標:842, 414)處
Plugin Bkgnd.MoveTo(Hwnd, 842, 414)
Delay 20
Plugin Bkgnd.RightDown(Hwnd, 842, 414)
Delay 20
Plugin Bkgnd.RightClick(Hwnd, 842, 414)
Delay 20
Plugin Bkgnd.MoveTo(Hwnd, 843, 415)
Delay 20
Plugin Bkgnd.MoveTo(Hwnd, 844, 416)
Delay 20
Plugin Bkgnd.MoveTo(Hwnd, 845, 416)
Delay 20
Plugin Bkgnd.MoveTo(Hwnd, 847, 419)
Delay 20
Plugin Bkgnd.MoveTo(Hwnd, 849, 421)
Delay 20
Plugin Bkgnd.MoveTo(Hwnd, 855, 432)
Delay 20
Plugin Bkgnd.MoveTo(Hwnd, 855, 434)
Delay 20
Plugin Bkgnd.MoveTo(Hwnd, 855, 435)
Delay 20
Plugin Bkgnd.MoveTo(Hwnd, 855, 437)
Delay 20
Plugin Bkgnd.MoveTo(Hwnd, 854, 440)
Delay 20
Plugin Bkgnd.MoveTo(Hwnd, 852, 444)
Delay 20
C. win7下使用git bash不能運行EXE文件,怎麼辦
操作系統版本是什麼? Suse Linux和OpenSuse都是在yast->硬體->圖形顯卡和顯示器裡面,可以調。
D. 不能執行網頁里的腳本,怎麼辦
你在瀏覽器的工具-Internet選項中的最下面的那個重置 給關掉,或者,就點擊它上面的一個還原高級設置。
你的主要問題是把安全級別給設的太高了,所以很多腳本是不被允許運行的,因為腳本可能是病毒,現在懂了吧
E. git bash 怎麼執行bat腳本連接到sftp
查了一些資料,自動連接SSH,自動輸入密碼,好像需要其他的命令,spawn、expect【在git-bash中都沒有】,需要自行安裝。
#!/usr/local/bin/expect
settimeout10
spawnsshroot@ip
expect"*password*"
send"123456/r"#這里相當於程序自動輸入密碼並回車。
expect"#"
send"servicecrondrestart/r"
expecteof
註:expect的功能是很強大的,實現了無須人與系統交互的功能,已經成為SA的一個強大助手,要研究的徹底,還是需要大量的時間的。
F. leancloud php git 部署失敗:獲取項目代碼失敗:
估計和你當前用的 shell 命令行不是同一個 shell 解釋器。 寫 shell 腳本,記住一定要在最開始寫 #!/bin/bash 或者其他的解釋器,比如 csh、tsh。python、perl、php都可以這么用,這樣你的腳本就制定了一個解釋器來運行。運行時不要用 sh xxx.s...
G. 為什麼php webhook 使用介面調用提示無法識git命令
估計和你當前用的 shell 命令行不是同一個 shell 解釋器。
寫 shell 腳本,記住一定要在最開始寫 #!/bin/bash 或者其他的解釋器,比如 csh、tsh。python、perl、php 都可以這么用,這樣你的腳本就制定了一個解釋器來運行。運行時不要用 sh xxx.sh ,而是賦予可運行許可權後 ./xxxx.sh 方式運行。
一般 Linux 下面的 /bin/sh 是一個鏈接,指向一個默認的 shell 解釋器,這個鏈接如果不是你需要的解釋器,那麼腳本運行出現任何問題都可能。如果系統裝了 busybox ,他也會提供一個 sh 解釋器,而且命令的文件名也是 sh ,他和 bash 運行結果也有區別,只是這個 sh 不一定在 /bin 裡面。
H. windows安裝了git以後就可以運行shell腳本了嗎
首先電腦中需要安裝的是git的應用程序,安裝完成之後,可以在開始菜單進行查看。
並需要配置好git的bin,配置環境變數,把bin的絕對路徑復制到環境變數中path。
配置git的環境變數之後,在任意文件進行創建一個為mkdir.sh,文件名可以是隨意的結尾需要為.sh。
然後在sh的文件中進行輸入
#!/bin/shtouch a.txtsleep 10echo "testtesttesttest">>a.txt
創建一個為txt文件,然後testtesttesttest寫入到txt文件中。
然後進行雙擊.sh的文件,會彈出git的命令窗口,根據代碼的執行的時間窗口顯示多久。
然後就會自動生成一個a.txt的文件。
並會在a.txt文件中寫入為「testtesttesttest」的一段文字。
I. 安裝完git之後npm命令不能用了
這種跟git應該關系不大,「不是內部或外部命令」主要還是因為環境變數沒配好,實在不行你把安裝的nodejs里的npm所在路徑配置到環境變數path里,然後在path里的位置往前挪挪,環境變數這東西其實就是配個絕對路徑,不復雜,你試試吧。
J. VSCode 無法將「git」項識別為cmdlet、函數、腳本文件或可運行程序的名稱,怎麼解決
path中給git配置環境變數