【问题标题】:Synchronize a distant server directory with a local git repositery将远程服务器目录与本地 git 存储库同步
【发布时间】:2018-11-30 00:37:54
【问题描述】:

我想将远程计算机的目录/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

【问题讨论】:

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


【解决方案1】:

正如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在远程机器上更新了!

【讨论】:

    【解决方案2】:

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

    1. 在远程机器上,创建目标存储库并进行如下配置:

      mkdir /home/myproject && cd /home/myproject
      git init
      git config receive.denyCurrentBranch updateInstead
      
    2. 在本地机器上(从工作目录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。如果您没有这个,并且在您当前的发行版中不可用this can helpadd-apt-repository ppa:git-core/ppa; apt update; apt install git

    【讨论】:

      猜你喜欢
      • 2011-09-16
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-19
      • 2015-01-19
      • 1970-01-01
      相关资源
      最近更新 更多