我有我的本地dev repo(origin)和我使用 git init --bare 创建的recommended here创建的远程仓库。我也跑了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)
答案 0 :(得分:7)
裸存储库没有工作副本,因此您不会“看到”任何文件。尝试做一个git日志,你可以看到提交。从裸仓库中克隆,你就会获得文件。
答案 1 :(得分:4)
--bare
回购的基本要点是它没有工作副本(也没有索引),这意味着没有什么可以通过推送搞砸了。
如果您希望某些推送(到一个或多个特定分支)进行“自动部署”,那么实现这种情况的方法是在--bare
repo中使用git hook。钩子一般post-receive
,虽然可以在这里使用pre-receive
或update
钩子 - 在所有推送上运行,所以它应检查是否推送问题是“有趣”(影响自动部署分支),如果是,则触发部署。
钩子是代表执行推送的进程运行的(通常是ssh作为某个用户,如在git remote -v
输出中),因此如果部署的文件应归其他用户所有,则必须以某种方式安排。一种简单,简单且合理的方法是写入设置为模式rw-rw-rw-
的文件(每个人都可写),并且有一些东西(例如cron作业)定期检查文件。如果编写,作为部署用户运行的cron作业可以提取相应分支的最新版本。另一种方法是联系执行此操作的服务器(木偶等)。
如果执行推送的用户(user@xx.xx.xx
)可以拥有这些文件,那么更简单的方法就是在钩子中运行git checkout
,但是with an alternate work-tree与该文件没有其他连接--bare
回购。