将远程服务器目录与本地git repositery同步

将远程服务器目录与本地git repositery同步,git,ssh,synchronization,git-bare,git-init,Git,Ssh,Synchronization,Git Bare,Git Init,我想将远程计算机的目录/home/myproject与本地计算机的目录D:\myproject\作为源同步。我想使用git(也可以从提交历史记录中获益,等等) 我在远程机器上完成了这项工作(创建一个裸存储库,另请参见): 在本地计算机上(使用当前目录D:\myproject\): 现在远程服务器的/home/myproject.git已经同步,但是目录/home/myproject/(应该包含例如/home/myproject/main.py)仍然不存在 因此,我必须在远程服务器上执行此操作:

我想将远程计算机的目录
/home/myproject
与本地计算机的目录
D:\myproject\
作为源同步。我想使用
git
(也可以从提交历史记录中获益,等等)

我在远程机器上完成了这项工作(创建一个裸存储库,另请参见):

在本地计算机上(使用当前目录
D:\myproject\
):

现在远程服务器的
/home/myproject.git
已经同步,但是目录
/home/myproject/
(应该包含例如
/home/myproject/main.py
)仍然不存在

因此,我必须在远程服务器上执行此操作:

cd /home
git clone myproject.git myproject
现在
/home/myproject/main.py
已经存在

问题:每次我在本地机器上执行
git push
,它都是远程服务器的
/home/myproject.git
更新,而不是
/home/myproject/

问题:如何配置这些存储库,使
git push
自动更新
/home/myproject
中的所有文件,例如
/home/myproject/main.py
,而不是仅
/home/myproject.git
如本文所述,这里是一个可行的解决方案:

  • 在本地计算机上(从工作目录
    D:\myproject\
    ),创建存储库:

    git init
    git add main.py
    git commit -m "First"
    git remote add dest root@203.0.113.0:/home/myproject.git
    
  • 在远程计算机上,创建一个“裸存储库”+目标目录:

    mkdir /home/myproject.git && cd /home/myproject.git && git init --bare
    echo -e '#!/bin/sh\nGIT_WORK_TREE=/home/myproject git checkout -f' > hooks/post-receive
    chmod +x hooks/post-receive
    
    mkdir /home/myproject
    
  • 在本地计算机上:

    git push -u dest master        # later we can just do: git push
    

  • 现在,
    /home/myproject
    已在远程机器上更新

    这里有一个更简单的解决方案(不需要“裸”存储库或“接收后挂钩”脚本):

  • 在远程计算机上,创建目标存储库并按如下方式进行配置:

    mkdir /home/myproject && cd /home/myproject
    git init
    git config receive.denyCurrentBranch updateInstead
    
  • 在本地计算机上(从工作目录
    D:\myproject\
    ),创建源存储库,并推送它:

    git init
    git add main.py
    git commit -m "First"
    git remote add dest root@203.0.113.0:/home/myproject
    git push -u dest master
    
    现在,
    /home/myproject
    已在远程机器上更新


  • 注意:这需要git版本>=2.4。如果您没有此版本,并且当前发行版中没有此版本:
    添加apt存储库ppa:git core/ppa;apt更新;apt install git

    关于裸存储库:。使用GIT部署:.Thank you@phd,我在发布问题之前已经读过了,但它对这个精确的请求并没有真正的帮助,即,
    GIT push
    不仅更新myproject.GIT,而且最重要的是更新目标目录。
    mkdir /home/myproject && cd /home/myproject
    git init
    git config receive.denyCurrentBranch updateInstead
    
    git init
    git add main.py
    git commit -m "First"
    git remote add dest root@203.0.113.0:/home/myproject
    git push -u dest master