我对 git 是不是有重大的误解,以及各位如何优雅地把本地完成的 javaweb 项目部署到服务器上呢?

2018-05-06 10:27:07 +08:00
 Newyorkcity
我一开始以为 git 能够做到这样一个效果
比如我把服务器端的 /usr/local/tomcat7/webapps/SomeProject/这个文件夹作为一个远程 git 仓库
我本地的 java 项目所在的文件夹是一个本地 git 仓库
然后我编辑好这个 Java 项目,比如说弄了一个 a.jsp 吧通过 git 把这个项目推送到 /usr/local/tomcat7/webapps/SomeProject/,这样服务器端就有了这么个 a.jsp 。然后更新服务器端 tomcat,就能访问那个 a.jsp 了( IP 地址 /SomeProject/a.jsp )
这是我一开始对 git 的理解。。

====分割线===

但实际操作里我发现。在云服务器那边,如果新建一个仓库为裸仓库,那么推送过去的文件你实际上根本不知道在哪儿。我尝试在本地仓库新增了一个 test.txt ,然后 push 过去,我找半天都没有办法在服务器端直接找到这个 test.txt 文件。但是,我再从服务器端 clone 到本地另一个新文件夹,test.txt 就完整的回来了。。。也就是说裸仓库中不会直接出现推送过去的文件?那显然我的目的就达不到了啊。( IP 地址 /SomeProject/a.jsp 可是 a.jsp 并不存在)
而如果新建一个非裸仓库在云服务器,它直接报错,我查了一下是因为 git 默认拒绝向非裸仓库进行推送。也就是说不支持这种行为。虽然好像能改参数改成支持,但我没改,因为 git 不支持这种行为,说明我一开始的那种需求并不是 git 想要完成的。

====分割线===

所以我现在就很迷。我也不是没搜索过,但就只能找到一些莫名其妙的或者太高深的内容。
我就奇了怪了,学习 java web 的人,难道就没有经历过如何优雅地把在本地编辑好地,运行 OK 的 java web 项目优雅地部署到服务器上去嘛?(用 FileZilla 这类软件,把本地的 javaweb 项目文件夹直接复制粘贴过去 OK 是 OK。。但就是不怎么优雅)到底应该怎么做啊?
3267 次点击
所在节点    问与答
23 条回复
cyheng
2018-05-06 10:38:20 +08:00
jekins 了解一下
cs923
2018-05-06 10:43:45 +08:00
直接在服务器上撸 (被卡哭)…
caixiexin
2018-05-06 10:43:55 +08:00
服务端的 git 仓库,默认是看不到目录文件的
git 应该管理的是源码,不是编译后的文件
服务器上用类似 Jenkins 的 ci,每次 git 推送后触发编译构建重新部署才对
Newyorkcity
2018-05-06 10:47:55 +08:00
@cs923 服务器上撸还要部署图形化界面然后下载 IDE 才能编辑。。真的会被卡哭,而且我也只是破烂服务器。。
Newyorkcity
2018-05-06 10:48:34 +08:00
@cyheng
@caixiexin
几位学习 jekins 的时候看的什么书或者博客入门的呢?能推荐一下嘛?
whileFalse
2018-05-06 11:00:17 +08:00
你确实有重大误解。git 不是文件同步用的。
wplct
2018-05-06 11:06:36 +08:00
git 千万别放二进制文件
grantonzhuang
2018-05-06 11:11:13 +08:00
bare 仓库应该是你需要的。
不上 CI 工具,那就是自己在服务器放一个目录,同步代码到这个目录,执行完编译操作把资源文件放到 tomcat 的目录下
grantonzhuang
2018-05-06 11:17:48 +08:00
@grantonzhuang 补充,就是 “你的电脑上的项目” 到 “ bare 仓库” 到 “服务器上的项目”
AlphaTr
2018-05-06 11:20:53 +08:00
裸仓库配合 hook 钩子应该满足你的要求
Asimov01
2018-05-06 11:21:45 +08:00
@cyheng Jenkins 超好用
caeger
2018-05-06 11:23:25 +08:00
同意十楼 在 hook 里面可以写脚本拉取到最新的代码,然后部署
GreatHumorist
2018-05-06 11:24:22 +08:00
git pull 了解一下?
mrcn
2018-05-06 11:26:49 +08:00
git 服务端只有.git 文件夹。一般是 push 进仓库后触发 hook,用脚本在 Apache/Nginx 监听的目录再 pull。(这时监听的目录也是一个 git 客户端)
msg7086
2018-05-06 11:59:28 +08:00
是重大误解。Git 是版本控制系统,和文件同步没有任何关系。

测试服务器同步可以考虑用 Syncthing,生产服务器部署应该用专业部署工具。
(比如 Ruby 圈子做部署应该用 mina 或者 capistrano。
jin5354
2018-05-06 12:04:05 +08:00
git 只用来管理源码,同步生产文件不是他该做的事
同步文件,可以手写 rsync,也可以用 ci,想做到自动化就结合 git 的 hook
sagaxu
2018-05-06 12:20:43 +08:00
你的误解是可行的,我就是用 git 管理 java 的二进制部署。不要用 bare 部署,在部署的机器上 clone 一个普通仓库,然后 pull 加重启
yanhejihe
2018-05-06 12:46:26 +08:00
git hook 了解一下
ddou
2018-05-06 12:52:26 +08:00
开发,打包,部署。别把 Git 用在不该用的地方
ob
2018-05-06 13:29:49 +08:00
idea sftp 目录映射,了解一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/452482

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX