各位大佬,请教一下如何在断网的环境下同步代码? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
biguokang
V2EX    程序员

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

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

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

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

    别说连外网,插个自己的 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
    坚持向内同步,不要反向同步。
    Overfill3641
        10
    Overfill3641  
       2021-01-14 19:37:47 +08:00
    我觉得如果实现了,是不是可以用作黑入呢?那是不是可以免费居住了呢?
    kaneg
        11
    kaneg  
       2021-01-14 19:44:13 +08:00 via iPhone
    不管技术能不能做到,你都不能以身试法。
    Fading2276
        12
    Fading2276  
       2021-01-14 19:48:19 +08:00
    @tiglapiles 这样就是要准备吃不花钱的饭了

    能否准备一台机器,这台机器只做同步,采用物理网线插拔,同时只能接一个网。
    7654
        13
    7654  
       2021-01-14 19:49:04 +08:00
    windows 的公文包
    jr55475f112iz2tu
        14
    jr55475f112iz2tu  
       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
    不想努力了嘛?
    rb6221
        27
    rb6221  
       2021-01-14 22:41:17 +08:00
    前几个月还有新闻呢,医院系统 运维私自在外网访问内网机器 然后系统出故障了导致收入损失上千万 人蹲号子了
    rb6221
        28
    rb6221  
       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 不是南方网友才对嘛 手动狗头
        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     Solana     3315 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 11:01 PVG 19:01 LAX 03:01 JFK 06:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86