【问题标题】:How to sync remote and local Git repositories如何同步远程和本地 Git 存储库
【发布时间】:2014-10-19 17:32:39
【问题描述】:

我在 Git 服务器/网站 (https://github.com/cMaheshwari09/testing.git) 上创建了一个测试存储库,我也将它克隆到我的本地主机。现在我可以完美地PUSH和PULL从我的本地机器到 Git 服务器。

但现在我想在我的实时服务器上部署代码,但不使用 FTP 或任何其他文件传输方法/工具。我想使用 Git 推送方法上传我的文件。这意味着我想直接使用 Git 将我的 localhost 存储库同步到实时服务器。

因此,当我对本地进行任何更改时,我也可以将更改提交到 Git 服务器以及实时服务器。

我浏览了很多不同的文档和教程,但我找不到任何简单或直接的方法来实现这一点。

【问题讨论】:

    标签: git github git-branch git-push


    【解决方案1】:

    您可以为此使用 post-receive Git 挂钩 http://git-scm.com/book/en/Customizing-Git-Git-Hooks

    钩子看起来像这样

    cd [LIVE SITE DIR] && git pull origin master
    

    我将描述如何设置我的部署。我使用与实时服务器相同的服务器以及存储我的存储库的地方。

    • 我将 Git 存储库存储在 /var/git directory 中。应用程序存储在/var/www
    • 使用git init --bare 创建 Git 存储库

      cd /var/git
      mkdir project.git
      cd project.git
      git init --bare
      
    • 将存储库克隆到/var/www/project 文件夹中

    • 将存储库克隆到我的本地计算机
    • 创建接收后挂钩

      cd /var/git/project.git/hooks
      touch post-receive
      chmod +x post-receive
      

    post-receive 钩子如下所示:

        #!/bin/sh
        unset GIT_DIR
        cd /var/www/project && git pull origin master
    

    如果不取消设置GIT_DIR,在做git push时会报如下错误:

        remote: fatal: Not a git repository: '.'
    

    这是因为 Git 使用变量 GIT_DIR 而不是 PWD。在此处查看有关此的更多信息: getting "fatal: not a git repository: '.'" when using post-update hook to execute 'git pull' on another repo

    当您在本地计算机上进行更改、提交并推送时,这些更改将自动拉入 /var/www/project 目录。

    如果您将一台服务器用作实时服务器,并且您的存储库存储在另一台服务器上。您将不得不更改您的 post-receive 钩子,以便您可以 ssh 到实时服务器并在那里执行 git pull origin master。

    【讨论】:

    • 您能否向我发送有关如何设置或我需要做什么的步骤或完整详细信息,以便我的实时服务器可以连接到我的 git 存储库/本地存储库。
    • 根据您的要求编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    相关资源
    最近更新 更多