首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2EX  ›  问与答

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

  •  
  •   Newyorkcity · 2018-05-06 10:27:07 +08:00 · 2439 次点击
    这是一个创建于 526 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我一开始以为 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。。但就是不怎么优雅)到底应该怎么做啊?
        1
    cyheng   2018-05-06 10:38:20 +08:00 via Android
    jekins 了解一下
        2
    cs923   2018-05-06 10:43:45 +08:00 via Android
    直接在服务器上撸 (被卡哭)…
        3
    caixiexin   2018-05-06 10:43:55 +08:00 via Android
    服务端的 git 仓库,默认是看不到目录文件的
    git 应该管理的是源码,不是编译后的文件
    服务器上用类似 Jenkins 的 ci,每次 git 推送后触发编译构建重新部署才对
        4
    Newyorkcity   2018-05-06 10:47:55 +08:00
    @cs923 服务器上撸还要部署图形化界面然后下载 IDE 才能编辑。。真的会被卡哭,而且我也只是破烂服务器。。
        5
    Newyorkcity   2018-05-06 10:48:34 +08:00
    @cyheng
    @caixiexin
    几位学习 jekins 的时候看的什么书或者博客入门的呢?能推荐一下嘛?
        6
    whileFalse   2018-05-06 11:00:17 +08:00
    你确实有重大误解。git 不是文件同步用的。
        7
    wplct   2018-05-06 11:06:36 +08:00
    git 千万别放二进制文件
        8
    grantonzhuang   2018-05-06 11:11:13 +08:00 via Android
    bare 仓库应该是你需要的。
    不上 CI 工具,那就是自己在服务器放一个目录,同步代码到这个目录,执行完编译操作把资源文件放到 tomcat 的目录下
        9
    grantonzhuang   2018-05-06 11:17:48 +08:00 via Android
    @grantonzhuang 补充,就是 “你的电脑上的项目” 到 “ bare 仓库” 到 “服务器上的项目”
        10
    AlphaTr   2018-05-06 11:20:53 +08:00 via iPhone
    裸仓库配合 hook 钩子应该满足你的要求
        11
    Asimov01   2018-05-06 11:21:45 +08:00
    @cyheng Jenkins 超好用
        12
    caeger   2018-05-06 11:23:25 +08:00 via Android
    同意十楼 在 hook 里面可以写脚本拉取到最新的代码,然后部署
        13
    GreatHumorist   2018-05-06 11:24:22 +08:00 via iPhone
    git pull 了解一下?
        14
    mrcn   2018-05-06 11:26:49 +08:00 via Android
    git 服务端只有.git 文件夹。一般是 push 进仓库后触发 hook,用脚本在 Apache/Nginx 监听的目录再 pull。(这时监听的目录也是一个 git 客户端)
        15
    msg7086   2018-05-06 11:59:28 +08:00
    是重大误解。Git 是版本控制系统,和文件同步没有任何关系。

    测试服务器同步可以考虑用 Syncthing,生产服务器部署应该用专业部署工具。
    (比如 Ruby 圈子做部署应该用 mina 或者 capistrano。
        16
    jin5354   2018-05-06 12:04:05 +08:00
    git 只用来管理源码,同步生产文件不是他该做的事
    同步文件,可以手写 rsync,也可以用 ci,想做到自动化就结合 git 的 hook
        17
    sagaxu   2018-05-06 12:20:43 +08:00 via Android
    你的误解是可行的,我就是用 git 管理 java 的二进制部署。不要用 bare 部署,在部署的机器上 clone 一个普通仓库,然后 pull 加重启
        18
    yanhejihe   2018-05-06 12:46:26 +08:00
    git hook 了解一下
        19
    ddou   2018-05-06 12:52:26 +08:00 via iPhone
    开发,打包,部署。别把 Git 用在不该用的地方
        20
    ob   2018-05-06 13:29:49 +08:00 via Android
    idea sftp 目录映射,了解一下
        21
    micean   2018-05-06 13:44:33 +08:00   ♥ 1
    你需要在云服务器 clone 一个仓库,然后通过 bare 仓库的 git hook 在你本地 push 之后,在云服务器 clone 的那个仓库进行 pull 操作,最后在进行打包等其他操作。
        22
    wm5d8b   2018-05-06 14:20:03 +08:00
    听起来楼主需要 sftp ?
        23
    cigarzh   2018-05-07 00:14:06 +08:00 via iPhone
    开发环境 测试环境 生产环境不一样的
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4267 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 197ms · UTC 08:52 · PVG 16:52 · LAX 01:52 · JFK 04:52
    ♥ Do have faith in what you're doing.