我想将远程计算机的目录/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>
答案 0 :(得分:0)
如本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
在远程计算机上,创建一个“裸仓库” +目标目录:
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
已在远程计算机上更新!
答案 1 :(得分:0)
这是一个更简单的解决方案(不需要“裸”存储库或“接收后挂钩”脚本):
在远程计算机上,创建目标存储库并按以下方式进行配置:
Logger.log(sortedDateList);
在本地计算机上(从工作目录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
。