将远程服务器目录与本地 git 存储库同步
Synchronize a distant server directory with a local git repositery
我想将远程计算机的目录 /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
]?
如本 tutorial 中所述,这是一个可行的解决方案:
在本地机器上(从工作目录 D:\myproject\
),创建存储库:
git init
git add main.py
git commit -m "First"
git remote add dest root@203.0.113.0:/home/myproject.git
在远程机器上,创建一个 "bare repository" + 目标目录:
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
已在远程计算机上更新!
这是一个更简单的解决方案(不需要 "bare" 存储库或 "post-receive hook" 脚本):
在远程机器上,创建目标存储库并像这样配置它:
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。如果您没有这个,并且在您当前的发行版中不可用 this can help:add-apt-repository ppa:git-core/ppa; apt update; apt install git
。
我想将远程计算机的目录 /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
]?
如本 tutorial 中所述,这是一个可行的解决方案:
在本地机器上(从工作目录
D:\myproject\
),创建存储库:git init git add main.py git commit -m "First" git remote add dest root@203.0.113.0:/home/myproject.git
在远程机器上,创建一个 "bare repository" + 目标目录:
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
已在远程计算机上更新!
这是一个更简单的解决方案(不需要 "bare" 存储库或 "post-receive hook" 脚本):
在远程机器上,创建目标存储库并像这样配置它:
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。如果您没有这个,并且在您当前的发行版中不可用 this can help:add-apt-repository ppa:git-core/ppa; apt update; apt install git
。