代码之家  ›  专栏  ›  技术社区  ›  Petah

Git推送到实时服务器

  •  44
  • Petah  · 技术社区  · 14 年前

    我们有一个网站,它的所有php/html/js/css/etc文件都存储在git存储库中。

    我们目前有3种类型的计算机(或用例)用于存储库。

    • 本地开发人员:获取最新更改、进行更改、提交到本地repo、推送到主服务器
    • 主服务器:中央存储库,将所有更改推送到主服务器
    • Web服务器:部署网站时,将从主服务器中删除更改

    所以现在我们:

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

    所以我的问题是:有没有办法从本地计算机直接推到web服务器?

    即。

    local: git push origin master
    local: password: ********
    local: git push webserver master
    local: password: ********
    
    6 回复  |  直到 7 年前
        1
  •  37
  •   ralphtheninja    13 年前

    是的,您可以直接推送到Web服务器,但我不建议这样做,因为您应该只推送到用--bare参数克隆的存储库。我将利用git钩子系统让主存储库自动更新web服务器上的repo。查看 更新后 连接:

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

    这个脚本可以依次通过ssh登录到web服务器并执行

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

    这样,您只需要专注于推送到中心服务器,而不必关心web服务器,一旦推送完成,它将始终被更新。如果你能自动化一些东西,那么就自动化它:)

    我甚至为您找到了一篇关于在脚本中通过ssh登录的好文章(如果您必须使用密码,那么在设置了ssh密钥的情况下这一点很简单):

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

    希望这有帮助!

        2
  •  29
  •   Mr.Web    7 年前

    我也有同样的疑问,对目前排名第一的答案不满意,结果是 git-website-howto 它很好地概括了这一过程,是imo一个更干净和更快的方法。

    TL;博士, git init --bare 在您的web服务器上创建一个新的repo,您可以在其中从开发人员机器推送更改。当web repo接收到您的更改时,它会启动post-receive挂钩,然后将文件复制到您的web根目录。

    我喜欢这种方法,因为post-receive钩子在您的服务器上工作,所以您的本地计算机可以更快地推送并释放自己。这也使得为特定分支设置远程跟踪变得非常容易。所以你可以有一个叫 production 要更新您的web服务器,而您的主服务器将继续用于开发并链接到其他地方的git repo。

    注意:你需要跑步 git config receive.denycurrentbranch ignore 在您的web服务器repo上,以在按下时在本地dev box上取消显示警告。

        3
  •  10
  •   Tim Hoolihan    14 年前

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

    所以你可以尝试:

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

    补充: 我想你的部分要求是如何拥有多个远程存储库。

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

    它允许您运行:

       git push origin master
       git push webserver master
    
        4
  •  4
  •   cmcginty    14 年前

    我想你要找的功能描述如下: http://debuggable.com/posts/git-tip-auto-update-working-tree-via-post-receive-hook:49551efe-6414-4e86-aec6-544f4834cda3

    local 您可以将Web服务器添加为远程服务器,就像执行其他操作一样:

    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
    
        5
  •  1
  •   2upmedia    6 年前
    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

        6
  •  0
  •   Rohan Khude    8 年前

    在部署本地更改之前,请检查目标服务器上是否有任何更改。

    添加到部署脚本以确保服务器上没有任何更改:

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

    如果有未更改的文件,则为空,比分析git状态更容易