我正在尝试使用ubuntu,rails和git在数字海洋上设置我自己的生产环境。
他们都指示将存储库创建为裸,即:
mkdir site.git && cd site.git
git init --bare
问题是,当我从本地计算机上推送时,我收到错误:
此操作必须在工作树中运行
我调查了它,似乎原因是回购是裸的。
在我的帖子接收文件中,我有:
#!/bin/sh
git --work-tree=/home/rails/myapp --git-dir=/var/repo/site.git checkout -f
所以我很困惑。我想我可以将repo初始化为非裸。但是为什么每个教程都建议将它初始化为裸,如果它导致那个错误呢?
答案 0 :(得分:3)
如果你正在进行git推送,你必须从一个正常的git repo这样做,这意味着你的工作站上有一个本地仓库(推送到一个裸仓库)
cd /path/to/my/local/repo
git init .
git add -A
git commit -m "my first commit"
git remote add origin /usr/bare/repo
git push -u origin master
在你的情况下,你不能直接从post-receive hook执行checkout的地方推送,除非你在你的git push命令中提到git repo是(裸或不)
cd /home/rails/myapp
git --work-tree=/home/rails/myapp --git-dir=/var/repo/site.git push -u origin master
(这假设/var/repo/site.git
确实包含一个远程命名的原点)