V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
biguokang
V2EX  ›  程序员

各位大佬,请教一下如何在断网的环境下同步代码?

  •  
  •   biguokang ·
    AlpacaBi · 2021-01-14 19:15:09 +08:00 · 6305 次点击
    这是一个创建于 1438 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先说一下场景,因为业务关系,客户很多是军警或者涉密部门

    所以你懂的,他们的内网是和外网隔离的。

    别说连外网,插个自己的 u 盘都报警。。。

    所以目前把系统代码更新到现场,方法是公司里面写好后,把源码发到现场人员自己的电脑,然后使用现场单位提供的 [特供 u 盘] ,把代码覆盖到内网机器。。

    而有时候需要在单位现场改代码,然后同步回公司,一般是内网机器下的代码改好后,把改动过的代码文件通过单位提供的 [特供 u 盘] ,拷到自己的电脑,然后用自己的电脑连外网同步到公司。。。。

    有什么好的工具或者方法,不用手动复制粘贴呢,每次这么搞都很操蛋。。。

    说白了,如何能轻松方便的往隔离外网的局域网机器里同步代码呢????

    第 1 条附言  ·  2021-01-15 10:36:18 +08:00
    补充一下,看了一圈评论可能是我表达的不好,感觉是可能以为我要想办法把公安内网设备暴露到外网。。。


    我肯定不会这么作死。。。


    主要是根目录里 10 来个根目录文件夹,每个根目录文件夹在公司里面是单独的 git 仓库,然而现场环境没有 git,然后里面有成千上万个代码文件(前端)

    一般的做法是在公安内网改了现场的代码,需要从这成千上万的文件里面单独抽离出改动过的文件,然后通过 u 盘拷回公司同步。。。相反公司到公安现场也是一样,也是要抽离,只是公司里面有 git 找出改动过的代码好找一点而已

    所以没有 git 管理,这就很艹蛋了,有时候还会漏掉文件,这就会导致若干问题。。。



    所以我的想法是有没有类似的工具,比如可以给 u 盘做成一个 git 镜像库,这样我 u 盘插我自己的电脑,往 u 盘里 git push,然后插到公安内网的电脑,在公安内网电脑 git pull,那就爽多了,反过来公安内网同步到公司也一样,而且还能随时回退
    第 2 条附言  ·  2021-01-15 10:49:12 +08:00
    再补充一下,我的想法只是单纯觉得人肉 diff 代码太难受,因为漏了同步一个文件导致了很多奇奇怪怪的 bug,排查起来又烦,被烦惨了,所以想在通过 u 盘来使得单位的 git 和公司的 git 来进行代码同步,也就是把 u 盘做成一个 git 库。。。

    首先明确说一点,数据传递只会使用单位提供的 [特供 u 盘] ,绝对不是什么连外网什么。。。。
    71 条回复    2021-01-19 13:17:58 +08:00
    exip
        1
    exip  
       2021-01-14 19:19:18 +08:00 via Android
    你确定你把想要的功能实现了,还有回家过年?
    polyang
        2
    polyang  
       2021-01-14 19:20:08 +08:00
    没办法吧?要是有办法的话,人家搞内网的意义在哪儿?
    polyang
        3
    polyang  
       2021-01-14 19:20:36 +08:00
    @exip 哈哈,这要是实现了,就相当于泄密了。
    mascteen
        4
    mascteen  
       2021-01-14 19:21:49 +08:00 via Android
    搞个跳板
    lizytalk
        5
    lizytalk  
       2021-01-14 19:28:27 +08:00
    就算对方的隔离有漏洞也别作死...
    MeteorCat
        6
    MeteorCat  
       2021-01-14 19:30:06 +08:00 via Android
    军警涉密部门你还敢这么干
    whitehack
        7
    whitehack  
       2021-01-14 19:33:31 +08:00
    老老实实的吧.别犯法.
    php8
        8
    php8  
       2021-01-14 19:35:41 +08:00 via Android
    git 可以离线使用,把 repo 打个 zip 包,手动复制 zip 包,代码变更记录交给 git 管理
    hinate
        9
    hinate  
       2021-01-14 19:37:37 +08:00 via iPhone
    坚持向内同步,不要反向同步。
    v2tudnew
        10
    v2tudnew  
       2021-01-14 19:37:47 +08:00
    我觉得如果实现了,是不是可以用作黑入呢?那是不是可以免费居住了呢?
    kaneg
        11
    kaneg  
       2021-01-14 19:44:13 +08:00 via iPhone
    不管技术能不能做到,你都不能以身试法。
    testver
        12
    testver  
       2021-01-14 19:48:19 +08:00
    @tiglapiles 这样就是要准备吃不花钱的饭了

    能否准备一台机器,这台机器只做同步,采用物理网线插拔,同时只能接一个网。
    7654
        13
    7654  
       2021-01-14 19:49:04 +08:00
    windows 的公文包
    czfy
        14
    czfy  
       2021-01-14 19:52:26 +08:00
    对于这类型客户,你首先要想的是这是否合法合规,而非是否方便
    否则上面很多人已经提过了,很容易就进去了
    EastLord
        15
    EastLord  
       2021-01-14 19:55:47 +08:00
    把代码背下来
    loading
        16
    loading  
       2021-01-14 19:57:40 +08:00 via Android
    居然还能用特种 U 盘,应该用光盘啊。
    mengyx
        17
    mengyx  
       2021-01-14 20:06:08 +08:00
    git bundle 了解一下 https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E6%89%93%E5%8C%85
    或者 git patch 也可以
    jimmyismagic
        18
    jimmyismagic  
       2021-01-14 20:16:32 +08:00
    patch 再 apply 回去
    AmitabhaPk
        19
    AmitabhaPk  
       2021-01-14 20:42:16 +08:00
    你这是找死啊兄弟,保密是天条。。。
    dorothyREN
        20
    dorothyREN  
       2021-01-14 20:43:41 +08:00
    @czfy #14 这不是很容易,是肯定
    boris93
        21
    boris93  
       2021-01-14 21:01:12 +08:00 via Android
    这种地方我只强调三个规矩

    合规

    合规

    还是,他妈的,合规
    redtea
        22
    redtea  
       2021-01-14 21:08:52 +08:00 via iPhone
    要是实现需求了,要吃花生米了。
    LGA1150
        23
    LGA1150  
       2021-01-14 21:43:54 +08:00
    git format-patch 或 git diff 生成补丁
    拷贝到目标机后再 git am 或 git apply 打补丁
    LGA1150
        24
    LGA1150  
       2021-01-14 21:46:50 +08:00
    顺便补充下,git format-patch 生成的补丁是可以直接当电子邮件发送的,很多开源项目的维护也是靠的电子邮件发补丁,包括 Linux 内核
    shijingshijing
        25
    shijingshijing  
       2021-01-14 21:54:06 +08:00
    怎么方便怎么来,一波骚操作,后半辈子就不愁吃住了。
    wzzzx
        26
    wzzzx  
       2021-01-14 22:23:43 +08:00
    不想努力了嘛?
    janus77
        27
    janus77  
       2021-01-14 22:41:17 +08:00
    前几个月还有新闻呢,医院系统 运维私自在外网访问内网机器 然后系统出故障了导致收入损失上千万 人蹲号子了
    janus77
        28
    janus77  
       2021-01-14 22:41:42 +08:00
    @janus77 #27 你这种情况就不止是蹲号子了 直接断头饭吧
    wc951
        29
    wc951  
       2021-01-14 22:43:50 +08:00 via Android   ❤️ 1
    看来你们单位保密考试还是考的少了,去复习一下涉密人员管理条例以及国家保密法
    Puteulanus
        30
    Puteulanus  
       2021-01-14 23:00:46 +08:00   ❤️ 3
    搜了一下,git 支持添加本地路径作为 remote https://superuser.com/questions/1367571/using-git-across-multiple-systems-without-network-access/1367582

    特供 U 盘里直接拷整个 repo,当成 git 库来用怎么样,内网机器改完打个 commit,push 到特供 U 盘 repo,特供 U 盘插到你电脑上,你本地 repo pull 一下,联网了再 push 回公司 repo
    SIGEV13
        31
    SIGEV13  
       2021-01-15 00:22:42 +08:00
    商业机密是民法,国家机密是刑法。老哥量力而行 😜
    fiveelementgid
        32
    fiveelementgid  
       2021-01-15 00:27:14 +08:00 via Android   ❤️ 1
    您好,我是大陆北方网友,对您所说的技术要求很感兴趣🐶
    swulling
        33
    swulling  
       2021-01-15 00:29:48 +08:00 via iPad
    30 楼正解,在 U 盘里放一个 repo
    340244120w
        34
    340244120w  
       2021-01-15 06:41:12 +08:00 via iPhone
    1 git patch,缺点是内网机器也需要装 git.

    2 装个文件对比工具,内网机器保留两份源码,用其中一份修改,另一份用来被对比。最后用软件把差异文件导出来。

    3 最简单粗暴的还是把修改后的项目从内网机器上压缩拷回来(只复制粘贴一次),回来直接覆盖本地项目不就可以了吗。
    也完全不用拷 git repo
    614457662
        35
    614457662  
       2021-01-15 09:02:34 +08:00 via Android
    @fiveelementgid 不是南方网友才对嘛 手动狗头
    mcone
        36
    mcone  
       2021-01-15 09:18:29 +08:00
    这年头,还真有自己找花生米吃的……

    考试考少了 + 1
    CloseToWheat
        37
    CloseToWheat  
       2021-01-15 09:43:13 +08:00
    本地装 git 不够嘛?在内网提交到本地,到外网直接 push 啊
    myd
        38
    myd  
       2021-01-15 09:56:39 +08:00
    git format-patch 生成补丁
    wozhizui
        39
    wozhizui  
       2021-01-15 10:02:27 +08:00
    你在内网环境搭建个 git 服务器不就可以了
    wozhizui
        40
    wozhizui  
       2021-01-15 10:04:04 +08:00
    然后统一由一个技术管理者,每天人肉将这个 git 服务器的硬盘插拔下来,带回你的公司。
    这种场景,只能人肉插拔。
    omghonor
        41
    omghonor  
       2021-01-15 10:19:48 +08:00
    相似业务,不过我们是金融行业,生产网络是专网,代码上传只能靠硬盘,下载要走流程。无解的。信息安全和稳定是头等大事。
    zyq2280539
        42
    zyq2280539  
       2021-01-15 10:23:26 +08:00
    git patch
    biguokang
        43
    biguokang  
    OP
       2021-01-15 10:38:43 +08:00
    @LGA1150 对对对,就是想要这种解决方案,我去搜搜看
    biguokang
        44
    biguokang  
    OP
       2021-01-15 10:42:00 +08:00
    @340244120w 1 、2 这个可以,因为内网的要求只是不连外网,装个 git 没问题,所以把 u 盘做成一个 git 库可以。。。至于第 3 个其实无解,因为整个项目加起来可能有上 g 大,然后我们自己的电脑连外网都是用手机热点连外网的,流量伤不起,所以之前才要一个一个文件抽出来
    yingfengi
        45
    yingfengi  
       2021-01-15 10:44:28 +08:00 via Android
    @loading 所谓安全 U 盘。。。可以带加密
    biguokang
        46
    biguokang  
    OP
       2021-01-15 10:45:34 +08:00
    @LGA1150 你这个可靠,就是我想要的解决方案,其他人都觉我想要把公安电脑暴露在外网
    yingfengi
        47
    yingfengi  
       2021-01-15 10:45:52 +08:00 via Android
    加网闸,然鹅你的申请不会通过的
    LLLYang
        48
    LLLYang  
       2021-01-15 10:50:53 +08:00
    没啥用,我现在也是这样的
    LLLYang
        49
    LLLYang  
       2021-01-15 10:51:20 +08:00
    只能自己搞代码对比软件,然后一个一个类去对
    biguokang
        50
    biguokang  
    OP
       2021-01-15 10:53:00 +08:00
    @wozhizui 我的想法是再单位提供的 [特供 u 盘] 里放个 git 库,通过 u 盘来 git pull git push
    young1lin
        51
    young1lin  
       2021-01-15 11:04:03 +08:00
    感觉你在刀尖上干活啊 [doge]
    Judoon
        52
    Judoon  
       2021-01-15 11:16:12 +08:00
    把需要在前场变更的 git 仓库单独用 docker 建立一个 gitlab,数据以及 docker 镜像都放在移动硬盘。
    每次使用的时候,插上硬盘,用 docker 把 gitlab 仓库在本地起起来,改完代码同步到本地的 gitlab 。拿回公司类似操作同步到公司总的 gitlab 服务器上。
    为以防万一,硬盘可以做一些镜像备份或者在公司做实时同步之类的
    qiumaoyuan
        53
    qiumaoyuan  
       2021-01-15 11:20:39 +08:00
    直接插着 U 盘写代码不就完了,一来编写和保存代码根本没多少 IO 工作,二来现在的 U 盘读写也不差,为啥非得拷出来?
    IMCA1024
        54
    IMCA1024  
       2021-01-15 14:00:04 +08:00
    3 、4 年前,曾经一项目是 云南省公安厅的,经历跟楼主差不多 没办法 老老实实。
    SmiteChow
        55
    SmiteChow  
       2021-01-15 14:23:55 +08:00
    git format-patch
    git am
    no1xsyzy
        56
    no1xsyzy  
       2021-01-15 14:55:54 +08:00   ❤️ 1
    你是不是忘记了 git 最初的使用方式?
    邮件,发来发去。
    邮件换成专用 U 盘没有什么本质区别。
    iSecret
        57
    iSecret  
       2021-01-15 15:25:03 +08:00
    @Puteulanus 本地路径做 remote 仓库,刚刚实验了一下,可以 pull,但是 push 会报错,不知道是不是姿势不对。


    ```shell
    $ git push origin master
    Enumerating objects: 5, done.
    Counting objects: 100% (5/5), done.
    Writing objects: 100% (3/3), 257 bytes | 257.00 KiB/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    remote: error: refusing to update checked out branch: refs/heads/master
    remote: error: By default, updating the current branch in a non-bare repository
    remote: is denied, because it will make the index and work tree inconsistent
    remote: with what you pushed, and will require 'git reset --hard' to match
    remote: the work tree to HEAD.
    ...
    ! [remote rejected] master -> master (branch is currently checked out)
    error: failed to push some refs to '/Volumes/NONAME/test.git'
    ...
    ```
    beryl
        58
    beryl  
       2021-01-15 16:23:26 +08:00
    没有办法,之前做过类似的,甚至问题日志都是对着屏幕,手抄到纸上。
    或者换个思路,在客户现场的内网环境电脑作为主开发,相当于驻场
    niub
        59
    niub  
       2021-01-15 16:58:07 +08:00
    2019 年的时候去某银行 POC 的时候,也是这样哈哈,只不过当时用的云主机开发+部署
    vivisidea
        60
    vivisidea  
       2021-01-15 23:01:28 +08:00
    可以走 docker 部署么?每次直接同步镜像,而不是代码。。
    dingwen07
        61
    dingwen07  
       2021-01-16 02:21:07 +08:00 via iPhone
    如果有的话,试试看用麦克风和扬声器组网
    elintwenty
        63
    elintwenty  
       2021-01-16 10:04:08 +08:00
    如果可以 docker 部署的话,直接切换镜像仓库进行同步就实现这些功能了,非常简单,就是拷贝镜像过程可能比直接拷贝代码长一些
    user0
        64
    user0  
       2021-01-16 15:42:31 +08:00
    刚刚试了一下 git 本地仓库,仅供参考:
    user0
        65
    user0  
       2021-01-16 15:42:57 +08:00
    @user0 不小心回车了,重发
    user0
        66
    user0  
       2021-01-16 15:43:34 +08:00
    # 以下操作在客户电脑
    user0
        67
    user0  
       2021-01-16 15:55:53 +08:00
    1. cd proj-src #proj-src 为已开发的代码路径
    2. git init
    3. git add -A && git commit -m "Initial commit"

    然后使用 u 盘把客户电脑上的代码仓库拷到自己的电脑上, 这个步骤只需要做一次
    以后客户的代码一旦变更,仍然使用 git 提交到本地的仓库,不需要 git push, 然后将变更使用 git format-patch 生成 patch 文件, 最后用 u 盘把 patch 拷贝到自己电脑上就行了
    qian19876025
        68
    qian19876025  
       2021-01-16 17:59:19 +08:00
    成都的外包?
    wolong
        69
    wolong  
       2021-01-16 18:06:21 +08:00 via iPhone
    我以前做过内网涉密系统维护,只能用光盘拷文件,一插 u 盘就报警,虽然不至于坐牢,但是差点给我开了,后来研究了内网的报警系统,分析是系统会检测新增磁盘的可写性,把 u 盘设为只读应该没问题。然后大胆试了一下,果然没报警了。后来请示了领导问能不能用 U 盘这么用,领导说只要系统不报警随便你怎么玩。
    我维护的那个系统安全级别比公安网低,楼主还是按规程来,麻烦就麻烦点,反正都计算在工作量里了,别节外生枝。既然都要插 U 盘,复制粘贴和 push pull 又有多大区别。
    sprite82
        70
    sprite82  
       2021-01-17 19:35:31 +08:00
    内网的机器装一个 git,建立一个本地仓库,然后通过这个本地仓库在内网开发,出来时把整个仓库拷出来。然后在外面把这个仓库的提交记录什么的全都 pull 到你自己的电脑上,并进行 merge 等操作。同理 进去的时候,把外面的 git 仓库带进去即可。而不是一个个文件拷贝
    biguokang
        71
    biguokang  
    OP
       2021-01-19 13:17:58 +08:00
    @loading 我那边可以的,负责对接的民警把他的特供 u 盘借给我们,里面没有任何数据就是给我们专用,除了不能带出公安局其他随便用。。。。不过以前也见过一些单位不可以,只能光盘,用光盘就很 cao 蛋了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3800 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 04:16 · PVG 12:16 · LAX 20:16 · JFK 23:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.