尝试在裸存储库上执行签出是非常不合逻辑的 -checkout
是用于更新工作副本/树的命令:
git-checkout - 签出工作树的分支或路径
裸存储库没有工作树。
以正常方式设置你的 git repos
因此,从零开始,假设您在家庭/办公室计算机上:
创建裸仓库
为您的项目创建一个裸仓库 - 或将您现有的仓库移动到某个适当的位置:
ssh root@mysite.net
cd repos
mkdir repo.git ##give it a better name
cd repo.git
git init --bare
为您的网站制作克隆
ssh root@mysite.net
cd /home/mysite/public_html
git clone ~/repos/repo.git .
创建本地克隆
cd mylocalsite/public_html
git clone root@mysite.net:repos/repo.git .
git push/pull etc.
自动更新网站
由于您的目标是自动更新,因此每当您推送到您的存储库时,您都可以使用 git-hooks 更新作为您的活动站点的工作副本。
这是一个简单的例子:
#!/bin/sh
cd /home/mysite/public_html
git --git-dir /home/mysite/public_html/.git pull > /dev/null
将其另存为/home/root/repos/.git/hooks/post-receive
,使其可执行,并且每次推送时,它都会尝试通过发出拉取来更新您的实时站点
或者
您可以放弃使用裸存储库并使用实时站点的结帐作为您的主要/唯一存储库。不建议这样做,但如果您选择这样做,您会这样做:
git remote add live root@mysite.net:/home/mysite/public_html/.git
git push live master
它会给你一个关于更新当前签出分支的错误,阅读警告并理解它的含义。如果您决定仍要这样做,您可以允许它使用:
ssh root@mysite.net
cd /home/mysite/public_html
git config receive.denyCurrentBranch ignore
再次不推荐,最好有一个裸仓库并将您的实时站点维护为正常结帐。