[英]Git: auto pull from repository?
有什么方法可以設置 git 以便它監聽來自遠程倉庫的更新並在發生變化時拉取? The use case is I want to deploy a web app using git (so I get version control of the deployed application) but want to put the "central" git repo on Github rather than on the web server (Github's interface is just soooo nice) .
有沒有人得到這個工作? Heroku 是如何做到的? 我的 Google-fu 沒有給我任何相關的結果。
Git 有“鈎子”,可以在其他動作之后執行的動作。 您似乎正在尋找的是“接收后掛鈎”。 在 github 管理員中,您可以設置一個 post-receive url,每當有人推送到您的 repo 時,該 url 都會被命中(帶有包含有關剛剛推送的內容的數據的有效負載)。
就其價值而言,我認為自動拉取不是一個好主意 - 如果將錯誤推送到您的分支怎么辦? 我會使用像capistrano
(或類似的)這樣的工具來處理這些事情。
在類 Unix 上,您可以在您的機器上創建調用“git pull”(每天或每周或其他)的 cron 作業。 在 Windows 上,您可以使用任務調度程序或“AT”命令來做同樣的事情。
有像 Jenkins 或 Bamboo 這樣的持續集成程序,它們可以檢測提交並觸發構建、測試、打包和部署等操作。 他們做你想做的事,但他們有很多依賴,難以配置,最后他們可能會定期檢查 git 存儲庫,這與每分鍾通過 cron 調用 git pull 具有相同的效果。
您可以通過執行以下操作來編寫腳本來實現此目的:
我知道這個問題有點舊,但是您可以使用 Windows 日志和 git 使用 webhook 和 php 自動拉取您的項目(假設您的項目涉及網絡服務器。請在此處查看我的要點: https : //gist.github.com/ upggr/a6d92e2808e9628ebe0d01fd93569f4a
正如一些人在嘗試后注意到的那樣,如果您使用 php exec()
,結果證明解決權限並不那么簡單。
將執行命令的用戶可能不是您自己的用戶,而是www-data
或apache
。
如果您有 root/sudo 訪問權限,我建議您閱讀這篇Jonathan 的博客文章
我的解決方案有點創意。 我注意到我可以在我的用戶名下創建一個帶有循環的腳本,並且 git pull 可以正常工作。 但是,正如其他人所指出的那樣,會帶來每隔 60 秒運行大量無用git pull
的問題。
所以這里是使用webhooks的更精細解決方案的步驟:
ssh-keygen -t rsa -b 4096 -C "deploy"
以生成新的部署密鑰,不需要寫權限(只讀更安全)。 將公鑰復制到您的 github 存儲庫設置中的“部署密鑰”下。http://example.com/gitpull.php
git pull
而是警告以下腳本需要pull
。 這里是簡單的代碼:gitpull.php :
<?php
/* Deploy (C) by DrBeco 2021-06-08 */
echo("<br />\n");
chdir('/home/user/www/example.com/repository');
touch(GITPULLMASTER);
?>
/home/user/gitpull.sh
使用以下代碼:gitpull.sh
#!/bin/bash
cd /home/user/www/example.com/repository
while true ; do
if [[ -f GITPULLMASTER ]] ; then
git pull > gitpull.log 2>&1
mv GITPULLMASTER GITPULLMASTER.`date +"%Y%m%d%H%M%S"`
fi
sleep 10
done
有兩種方法可以做到這一點,第一種更簡單,不需要安裝screen software
:
否認:
./gitpull.sh &
將其置於后台disown -h %1
以分離,您可以注銷屏幕:
screen
./gitpull.sh
control+ad
以分離,您可以注銷這個解決方案很簡單,您可以避免弄亂密鑰、密碼、權限、sudo、root 等,還可以防止腳本用無用的git pull
s 淹沒您的服務器。
它的工作方式是檢查文件GITPULLMASTER
存在; 如果沒有,就回去睡覺。 僅當它存在時,才執行git pull
。
您可以更改行:
mv GITPULLMASTER GITPULLMASTER.
日期 +"%Y%m%d%H%M%S"`
到
rm GITPULLMASTER
如果您更喜歡更干凈的目錄。 但我發現讓拉取日期注冊(和未跟蹤)對調試很有用。
對於我們的本地 Windows 測試服務器,我們使用 Windows 任務計划程序任務,設置為每 3 分鍾運行一次,從 Bitbucket 雲拉到這些服務器上的存儲庫。 雖然不是即時的,但它滿足了我們的需求,並且已被證明是可靠的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.