Digital Ocean git bare repo

时间:2016-11-22 03:05:38

标签: ruby-on-rails git

我正在尝试使用ubuntu,rails和git在数字海洋上设置我自己的生产环境。

我已经关注了thisthis教程。

他们都指示将存储库创建为裸,即:

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初始化为非裸。但是为什么每个教程都建议将它初始化为裸,如果它导致那个错误呢?

1 个答案:

答案 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确实包含一个远程命名的原点)