簡體   English   中英

Git推送到實時服務器

[英]Git push to live server

我們有一個網站,其所有 PHP/HTML/JS/CSS/etc 文件都存儲在 Git 存儲庫中。

我們目前有 3 種類型的計算機(或用例)用於存儲庫。

  • 本地開發人員:拉取最新更改,進行更改,提交到本地倉庫,推送到主服務器
  • 主服務器:中央存儲庫,所有更改都被推送到主服務器
  • Web 服務器:部署網站時從主服務器拉下更改

所以目前我們:

local: git push origin master
local: password: ********
local: ssh admin@webserver.example
webserver: password: ********
webserver: cd ~/domain.example/
webserver: git pull origin master

所以我的問題是:有沒有一種方法可以從我的本地計算機直接推送到 Web 服務器?

IE。

local: git push origin master
local: password: ********
local: git push webserver master
local: password: ********

是的,您可以直接推送到您的網絡服務器,但我不推薦它,因為您應該只推送到使用 --bare 參數克隆的存儲庫。 我會利用 Git 掛鈎系統讓主存儲庫自動更新 Web 服務器上的存儲庫。 查看更新后掛鈎:

http://git-scm.com/docs/githooks

該腳本可以依次通過 SSH 登錄到 Web 服務器並執行

cd ~/example.com/
git checkout master
git pull origin master

這樣您只需要專注於推送到中央服務器,而不必關心 Web 服務器,一旦推送完成,它將始終更新。 如果你可以自動化某些東西,那么就讓它自動化:)

我什至為你找到了一篇關於在腳本中通過 SSH 登錄的好文章(如果你必須使用密碼,如果已經設置了 ssh-key,這很簡單):

http://bash.cyberciti.biz/security/expect-ssh-login-script/

我有相同的查詢,但對此處當前投票最多的答案不滿意,最終遵循了git-website-howto ,它很好地概述了該過程,並且 IMO 是一種更清潔、更快捷的方法。

TL;DR, git init --bare在你的 web 服務器上創建一個新的 repo,你將從你的開發機器推送你的更改。 當 Web 存儲庫收到您的更改時,它會觸發 post-receive 掛鈎,然后將文件復制到您的 Web 根目錄。

我喜歡這種方法,因為 post-receive 掛鈎在您的服務器上完成工作,因此您的本地機器可以更快地推送並釋放自己。 這也使得為特定分支設置遠程跟蹤變得非常容易。 因此,您可以有一個名為production的分支來更新您的 Web 服務器,而您的 master 繼續用於開發並鏈接到其他地方的 git 存儲庫。

注意:您需要在您的 Web 服務器存儲庫上運行git config receive.denycurrentbranch ignore以在推送時抑制本地開發框上的警告。

查看http://www.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git-push.html的 Git URL 部分

所以你會嘗試:

git push ssh://admin@webserver.example/~admin/domain.example/ master

補充:我認為您所要求的部分內容是如何擁有多個遠程存儲庫。

git remote add webserver ssh://admin@webserver.example/~admin/domain.example/

允許您運行:

   git push origin master
   git push webserver master

我認為您正在尋找的功能在這里描述: http ://debuggable.com/posts/git-tip-auto-update-working-tree-via-post-receive-hook:49551efe-6414-4e86-aec6- 544f4834cda3

local您可以將網絡服務器添加為遠程服務器,就像您做其他任何事情一樣:

git remote add webserver admin@webserver:/path/to/repo.git/
# push only master branch by default
git config remote.webserver.push master  

現在,當您准備好推動時,您可以這樣做:

git push webserver
  1. 添加遠程$ git remote add server ssh://server_hostname:/path/to/git/repo
  2. 服務器上的結帳臨時分支$ git checkout -b temp
  3. 推送更改$ git push server
  4. 簽出上一個分支並刪除臨時分支$ git checkout - # shorthand for previous branch, git checkout @{-1} $ git branch -d temp

我在這里有更多背景信息:https ://medium.com/@2upmedia/git-push-to-live-server-5100406a26

在部署本地更改之前,請檢查目標服務器上是否有任何更改。

添加到部署腳本以確保服務器上沒有任何更改:

$ git ls-files -dmo --exclude-standard

如果有未更改的文件則為空,比解析 git status 更容易

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM