6

我有我的本地开发仓库(来源)和一个远程仓库,我使用git init --bare创建了这里推荐的内容。我也跑了git --bare update-server-info

git config --bool core.bare true

git remote -v 显示

origin  http://staging.websitename.com (fetch)

origin  http://staging.websitename.com (push)

remote  ssh://user@xx.xx.xx/home/user/public_html/staging (fetch)

remote  ssh://user@xx.xx.xx/home/user/public_html/staging (push)

在此之后并运行 git push remote 或 git push -all remote,它通过并且没有给我任何错误。为什么我看不到远程仓库中的文件?

Compressing objects: 100% (4121/4121), done.
Writing objects: 100% (4242/4242), 18.70 MiB | 694 KiB/s, done.
Total 4242 (delta 495), reused 0 (delta 0)
4

2 回答 2

8

裸存储库没有工作副本,因此您不会“看到”任何文件。尝试做一个 git log,你可以看到提交。从裸仓库克隆,您将获得文件。

于 2013-10-01T15:15:29.460 回答
4

回购的要点--bare是它没有工作副本(也没有索引),这意味着没有什么可以被推送搞砸的。

如果您希望某些推送(到一个或多个特定分支)“自动部署”,实现这一目标的方法是在存储库中使用 git 挂钩--bare。钩子——通常post-receive,虽然可以在这里使用pre-receiveorupdate钩子——在所有推送上运行,所以它应该检查有问题的推送是否“有趣”(影响自动部署分支),如果是,触发部署。

该钩子代表执行推送的进程运行(通常作为某个用户使用 ssh,如在您的git remote -v输出中),因此如果部署的文件应该由另一个用户拥有,您必须以某种方式进行安排。一种简单、简单且合理的方法是写入设置为模式rw-rw-rw-(每个人都可以写入)的文件,并让某些东西(例如 cron 作业)定期检查文件。如果编写,cron 作业(以部署用户身份运行)可以提取适当分支的最新版本。另一种方法是联系执行此操作的服务器(木偶等)。

如果执行 push ( user@xx.xx.xx) 的用户可以拥有文件,则更简单的方法是git checkout在 hook 中运行,但使用与repo没有其他连接的备用工作树。--bare

于 2013-10-01T18:51:27.073 回答