如何同步远程存储库和本地存储库 - Git

时间:2014-08-26 11:42:28

标签: git github git-branch git-push

我在Git服务器/网站(https://github.com/cMaheshwari09/testing.git)上创建了一个测试存储库,我已经将其克隆到我的localhost。现在我可以从本地机器到Git服务器完美地 PUSH PULL 。 但现在我想在我的实时服务器上部署代码,但不使用FTP或任何其他文件传输方法/工具。但我想使用Git push方法上传我的文件。这意味着我想要同步。我的localhost存储库直接使用Git实时服务器。

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

我已经阅读了很多不同的文档和教程,但我找不到任何简单的方法或直接的方法来实现这一目标。

任何人都可以帮助我解决这个问题。非常感谢!

1 个答案:

答案 0 :(得分: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文件夹

  • 将存储库克隆到我的本地计算机
  • 创建post-receive hook

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

post-receive hook看起来像这样:

    #!/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。