2013-10-01 178 views
3

我有我的本地开发商回购(产地)和远程回购,我创建使用git init --barerecommended here。我也跑git --bare update-server-info为什么我看不到文件后,推到裸git回购

git config --bool core.bare true 

远程Git -v显示

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

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

remote ssh://[email protected]/home/user/public_html/staging (fetch) 

remote ssh://[email protected]/home/user/public_html/staging (push) 

在此之后和运行git推远程或混帐推 - 所有遥控器,它通过并没有给我的错误。为什么我看不到远程回购中的文件?

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) 

回答

7

裸存储库没有工作副本,所以您不会“看到”任何文件。尝试做一个git日志,你可以看到提交。从裸回购克隆,你会得到文件。

+0

谢谢,我以为裸回购是理想的回购,只会被推到,所以我打算用它作为登台服务器(所以当然需要查看文件,我应该克隆本地回购,而不是我不需要完整的git树吗? – KevinOrin

+0

@KevinOrin:你应该将你的运行阶段版本与裸仓库分开,因为推送到非裸仓库有很多问题,你可以用'git pull'运行从裸仓库中的更新后钩子 –

+0

谢谢,但不认为我需要一个裸回购@BenjaminBannier - 我只是想知道如何设置分级,因为过去一个简单的“git init”已经导致当我试图推送到它的树问题 – KevinOrin

2

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

如果您希望某些推送(对一个或多个特定分支)“自动部署”,实现此目的的方法是在--bare回购库中使用git钩子。钩一般post-receive,虽然它可以使用pre-receiveupdate钩这里,是在所有推动运行,所以应该检查有问题的推是否是“有趣”(影响自动部署分支(ES)) ,如果是,则触发部署。

挂钩代表进程正在执行推送(通常是ssh,因为某些用户,因为在您的git remote -v输出中),所以如果部署的文件应该由另一个用户拥有,则必须以某种方式安排。一种简单,简单且合理的方法是写入文件,该文件设置为rw-rw-rw-(每个人都可写)模式,并且有某些内容(例如cron作业)定期检查文件。如果写入,则作为部署用户运行的cron作业可以提取最新版本的相应分支。另一种方法是联系服务器(puppet等)来做这件事。

如果做推([email protected]),用户可以根据自己的文件,一个更简单的方法是运行在钩git checkout,但with an alternate work-tree具有与--bare回购没有其他连接。

相关问题