Newyorkcity
V2EX  ›  问与答

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

  •  
  •   Newyorkcity · May 6, 2018 · 4363 views
    This topic created in 3103 days ago, the information mentioned may be changed or developed.
    我一开始以为 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。。但就是不怎么优雅)到底应该怎么做啊?
    cyheng
    cyheng
    May 6, 2018 via Android
    1
    jekins 了解一下
    cs923
    cs923
    May 6, 2018 via Android
    2
    直接在服务器上撸 (被卡哭)…
    caixiexin
    caixiexin
    May 6, 2018 via Android
    3
    服务端的 git 仓库,默认是看不到目录文件的
    git 应该管理的是源码,不是编译后的文件
    服务器上用类似 Jenkins 的 ci,每次 git 推送后触发编译构建重新部署才对
    Newyorkcity
    Newyorkcity
    OP
    May 6, 2018
    4
    @cs923 服务器上撸还要部署图形化界面然后下载 IDE 才能编辑。。真的会被卡哭,而且我也只是破烂服务器。。
    Newyorkcity
    Newyorkcity
    OP
    May 6, 2018
    5
    @cyheng
    @caixiexin
    几位学习 jekins 的时候看的什么书或者博客入门的呢?能推荐一下嘛?
    whileFalse
    whileFalse
    May 6, 2018
    6
    你确实有重大误解。git 不是文件同步用的。
    wplct
    wplct
    May 6, 2018
    7
    git 千万别放二进制文件
    grantonzhuang
    grantonzhuang
    May 6, 2018 via Android
    8
    bare 仓库应该是你需要的。
    不上 CI 工具,那就是自己在服务器放一个目录,同步代码到这个目录,执行完编译操作把资源文件放到 tomcat 的目录下
    grantonzhuang
    grantonzhuang
    May 6, 2018 via Android
    9
    @grantonzhuang 补充,就是 “你的电脑上的项目” 到 “ bare 仓库” 到 “服务器上的项目”
    AlphaTr
    AlphaTr
    May 6, 2018 via iPhone
    10
    裸仓库配合 hook 钩子应该满足你的要求
    CyberZCS
    CyberZCS
    May 6, 2018
    11
    @cyheng Jenkins 超好用
    caeger
    caeger
    May 6, 2018 via Android
    12
    同意十楼 在 hook 里面可以写脚本拉取到最新的代码,然后部署
    GreatHumorist
    GreatHumorist
    May 6, 2018 via iPhone
    13
    git pull 了解一下?
    mrcn
    mrcn
    May 6, 2018 via Android
    14
    git 服务端只有.git 文件夹。一般是 push 进仓库后触发 hook,用脚本在 Apache/Nginx 监听的目录再 pull。(这时监听的目录也是一个 git 客户端)
    msg7086
    msg7086
    May 6, 2018
    15
    是重大误解。Git 是版本控制系统,和文件同步没有任何关系。

    测试服务器同步可以考虑用 Syncthing,生产服务器部署应该用专业部署工具。
    (比如 Ruby 圈子做部署应该用 mina 或者 capistrano。
    jin5354
    jin5354
    May 6, 2018
    16
    git 只用来管理源码,同步生产文件不是他该做的事
    同步文件,可以手写 rsync,也可以用 ci,想做到自动化就结合 git 的 hook
    sagaxu
    sagaxu
    May 6, 2018 via Android
    17
    你的误解是可行的,我就是用 git 管理 java 的二进制部署。不要用 bare 部署,在部署的机器上 clone 一个普通仓库,然后 pull 加重启
    yanhejihe
    yanhejihe
    May 6, 2018
    18
    git hook 了解一下
    ddou
    ddou
    May 6, 2018 via iPhone
    19
    开发,打包,部署。别把 Git 用在不该用的地方
    ob
    ob
    May 6, 2018 via Android
    20
    idea sftp 目录映射,了解一下
    micean
    micean
    May 6, 2018❤️1
    21
    你需要在云服务器 clone 一个仓库,然后通过 bare 仓库的 git hook 在你本地 push 之后,在云服务器 clone 的那个仓库进行 pull 操作,最后在进行打包等其他操作。
    wm5d8b
    wm5d8b
    May 6, 2018
    22
    听起来楼主需要 sftp ?
    cigarzh
    cigarzh
    May 7, 2018 via iPhone
    23
    开发环境 测试环境 生产环境不一样的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1399 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 65ms · UTC 22:52 · PVG 06:52 · LAX 14:52 · JFK 17:52
    ♥ Do have faith in what you're doing.