我可以使用git使远程服务器保持最新吗?

我可以使用git使远程服务器保持最新吗?,git,Git,我正在使用git跟踪一个项目,如果可能的话,我想设置一些东西,让git处理我的所有代码转移,我可以有一个本地存储库进行测试,然后使用git将更改推送到服务器,使其生效。然而,在尝试使用标准的gitpush调用时,我最终得到了不一致的分支和一大堆相互冲突的历史记录。有没有一种使用git管理登台的方法?尽管git是一个分布式版本控制系统,但通常最好有一个中央存储库(可以是一个--bare存储库)。它将简化事情。在这里,您有一个用于登台的Git repo示例: IDE => local Git

我正在使用git跟踪一个项目,如果可能的话,我想设置一些东西,让git处理我的所有代码转移,我可以有一个本地存储库进行测试,然后使用git将更改推送到服务器,使其生效。然而,在尝试使用标准的
gitpush
调用时,我最终得到了不一致的分支和一大堆相互冲突的历史记录。有没有一种使用git管理登台的方法?

尽管git是一个分布式版本控制系统,但通常最好有一个中央存储库(可以是一个
--bare
存储库)。它将简化事情。

在这里,您有一个用于登台的Git repo示例:

IDE => local Git repository => remote bare Git repository 
                                   => Git repository with the live web application
它涉及到裸repo端的更新后钩子,以触发实时web服务器端的repo更新

最后一步是在裸存储库上定义“更新后”钩子脚本,当裸存储库接收数据时调用该脚本。
要启用“后期更新”挂钩,我们必须使
hooks/post-update
可执行或将
hooks/post-update.sample
重命名为
hooks/post-update
,具体取决于Git版本。
在这个脚本中,我们只需更改到live应用程序的文件夹,然后启动pull操作:

存在裸远程repo的原因是“不鼓励”使用工作目录推入repo


是的,但是这对管理一个登台分支、一个生产分支和一个或多个开发分支有什么帮助呢?我应该有一个中央存储库,然后在本地和实时服务器上克隆它,然后使用SSH进行手动更新吗?这是有道理的,但感觉应该有一个更优雅的解决方案。在live server上只需一个简单的中央存储库就足够了。由于您的历史记录相互矛盾,我猜您在生产现场做了一些更改。如果这样做对你来说很方便,那么手动拉应该可以。如果你可以不做这样的改变,按照VonC的建议使用更新后挂钩。裸回购的好处是什么?由于不鼓励推进到工作树中,通过添加此中间步骤,您只获得了复杂性。我没有试过这些,也不太了解Git,所以如果你能详细说明的话,那就太好了helpful@SamGoody:实际上,我不希望在live web站点部署中使用第三个repo,但第二个repo需要是裸的,以确保本地修改不会干扰您向其推送新的提交。看见post-receive钩子与git归档(要提取的tar)相结合更好。目前的工作偶尔在实时服务器上完成,然后向后合并到开发计算机上。(尽管我们的设置不寻常,但它符合我们的需要。)我们需要live server能够接收和推送更改。理想情况下,当推送到it时,更改应该合并到[或者应该记录错误]。Git存档将不适合。这个解决方案可能是,但为什么不直接推入?@Samgoody:在这种情况下,当您想要接收和合并来自开发的更改时,您需要额外确保没有提交任何本地修改。如果现场正在进行本地未承诺的修改,我会拒绝任何推送。同意并接受。谢谢你。说到原点:假设用户真的希望将live server作为git repo,那么使用第二个裸repo而不仅仅是推送到live repository有什么好处吗?此外,如果存在未提交的文件,您是否能够发出拒绝所需的命令?
#!/bin/sh
cd $HOME/example.org
unset GIT_DIR
git pull bare master

exec git-update-server-info