0

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

我在远程机器上做了这个(创建一个裸存储库,另请参阅“git init”和“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

4

2 回答 2

0

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

  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更新在遥远的机器上!

于 2018-06-20T20:48:23.450 回答
0

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

  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。如果您没有这个,并且在您当前的发行版中不可用,这可以提供帮助add-apt-repository ppa:git-core/ppa; apt update; apt install git

于 2018-06-21T08:13:45.903 回答