将远程服务器目录与本地git存储库同步

时间:2018-06-20 19:26:06

标签: git ssh synchronization git-bare git-init

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

我是在远程机器上完成的(创建一个裸仓库,另请参见What is the difference between "git init" and "git init --bare"?):

mkdir /home/myproject.git
cd /home/myproject.git
git init --bare

,然后在本地计算机上(当前目录为D:\myproject\):

git init
git add main.py   # D:\myproject\main.py exists on local machine
git commit -m "First"
git remote add dest root@203.0.113.0:/home/myproject.git    # via ssh
git push dest master

它起作用了,现在远程服务器的/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? strong>

2 个答案:

答案 0 :(得分:0)

如本tutorial中所述,这是一个可行的解决方案:

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

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

    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
    
  3. 在本地计算机上:

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

现在/home/myproject已在远程计算机上更新!

答案 1 :(得分:0)

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

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

    Logger.log(sortedDateList);
  2. 在本地计算机上(从工作目录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 已在远程计算机上更新!

注意:这需要git版本> = 2.4。如果您没有此功能,并且在您当前的发行版this can help中不可用:/home/myproject