能不能在一个项目中使用不同的 git? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
JCZ2MkKb5S8ZX9pq
V2EX    git

能不能在一个项目中使用不同的 git?

  •  
  •   JCZ2MkKb5S8ZX9pq 2020-04-15 17:38:48 +08:00 3875 次点击
    这是一个创建于 2073 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    • 假设有一个项目
    - bin - deps - sqlite - assets 
    • 日常写的时候,假设主要内容都在 bin 里面,deps 里的依赖内容多且杂,sqlite 经常变动,而 assets 里都是 binary 大文件。

    • 实际场景下,不是这么简单的三个文件夹,而是各有若干个。这里是简化类型。

    需求

    • 于是 git 的时候,我是直接 ignore 了 deps 和 assets 的部分。git 的时间颗粒比较细。

    • 但是在较大时间跨度,比如一个月一次的时候,想把其它部分也备份一下。现在用的方法是手动每月复制一份。

    问题

    • 请问如果在这种不同的颗粒度的情况下,大家习惯怎么处理?

    • 一种是不用 ignore,还是在总目录下 git,但各个目录分别 commit 。不过这样的话总感觉有点扭。

    • 或者双开,再来个 SVN ?但也就两个而已。

    • 期望的场景是,开发类 /依赖类 /数据类,能分别 git 到三个独立的部分。( assets 就还是手动备份算了)但因为它们都在一个主目录下,git 好像不能这么干吧?

    • 也是个假设的场景,是我在玩 Homeassistant 时碰到的问题,大家随便聊聊。

    22 条回复    2020-04-16 16:03:30 +08:00
    coderluan
        1
    coderluan  
       2020-04-15 17:40:06 +08:00
    Submodule 不行吗?
    zu1k
        2
    zu1k  
       2020-04-15 17:40:53 +08:00 via Android
    git submodule
    GM
        3
    GM  
       2020-04-15 17:42:35 +08:00   1
    submodule 太难用了,别用。
    FHXISDOG
        4
    FHXISDOG  
       2020-04-15 17:46:52 +08:00
    添加一个新的远程仓库,git remote add xxx
    yanqiyu
        5
    yanqiyu  
       2020-04-15 17:54:31 +08:00 via Android
    这其实就是 submodule 的典型用途
    但是 submodule 确实太麻烦
    你更新了 submodule 的仓库之后还要更新外面的仓库
        6
    tairan2006  
       2020-04-15 17:58:14 +08:00
    其他部分用 dropbox 自动同步,反正你只要最新的,也不需要版本管理吧
    JCZ2MkKb5S8ZX9pq
        7
    JCZ2MkKb5S8ZX9pq  
    OP
       2020-04-15 18:09:50 +08:00
    submodule 的确有点麻烦,而且有些东西在根目录下面,切分起来也不大方便。
    GreyYang
        8
    GreyYang  
       2020-04-15 18:21:45 +08:00
    比较复杂的项目可以参考 Android 的 Repo & Gerrit, 可以满足管理多个 git 仓的需求, 但是本身也引入了复杂度. https://source.android.com/setup/develop#repo
    crz
        9
    crz  
       2020-04-15 18:30:00 +08:00
    可以指定 git dir, 或者 work tree, 同一个目录对应多个 git dir,每个 git dir 分别设置 exclude

    缺点是 exclude 每个客户端都要设置
    cmdOptionKana
        10
    cmdOptionKana  
       2020-04-15 18:34:56 +08:00
    依赖和大文件本来就不应该用 git 吧?用别的备份方式就好了。
    bog
        11
    bog  
       2020-04-15 18:40:09 +08:00 via Android
    你是需要 git lfs 吗
    james122333
        12
    james122333  
       2020-04-15 18:46:49 +08:00 via Android
    硬派实现啊 写脚本差不多
    SilentDepth
        13
    SilentDepth  
       2020-04-15 18:56:00 +08:00
    除了 Git Submodule 还有更好的办法?

    麻烦的问题可以靠脚本和 Alias 解决
    vevlins
        14
    vevlins  
       2020-04-15 18:59:40 +08:00
    感觉你之所以分开同步只是因为文件太大懒得时刻保持同步,不想更新的时候就不 git add 不就得了嘛,需要的时候再 add + commit + push 。

    git submodules 有些大材小用了吧? 楼上的 lfs 还合理点,没用过,听说也有坑,我们公司做美术的还是习惯 svn 。
    basstk
        15
    basstk  
       2020-04-15 18:59:51 +08:00
    同意 4 楼说的添加一个新的远程仓库,没测试过,应该可以
    JCZ2MkKb5S8ZX9pq
        16
    JCZ2MkKb5S8ZX9pq  
    OP
       2020-04-15 19:14:20 +08:00
    @vevlins

    也不完全是,因为 homeassistant 本身结构不像我的示例这么清晰。
    根目录下也有不少文件。这也是 submodule 不太方便的地方。

    一部分是我的设备和自动化等等的配置文件。这部分是改完就 git 。

    同时还有很多第三方插件,这个就类似 deps,比如第三方更新了,一般来说向下兼容,但偶尔也会出错。但这部分就希望跟我自己的配置分开 git 。因为更新时间不定,而且很杂,而且也都不是我的代码。

    另外还有它运行中自己的 sqlite 和其它一些 log 之类的东西。

    这些部分混在一起。我目前是主要备份自己写的代码,其它 ignore 。
    偶尔 homeassistant 版本升级之类的,大都能兼容。但万一不兼容,有时候懒得搞就想直接回退或者比较一下差异啥的,就想要个 git,但是希望和自己写的部分能区分开。

    ---

    另外比如自己的网站,其实也差不多,外部依赖的 js 我会分版本存一份。万一不兼容,老项目就直接指到老版本了。但那个结构比较清晰,所有第三方 js 单独丢一个目录,备份起来也就还好。实在不行还有外部 cdn 之类的。

    ---

    美术的确是 svn 好点。最终用图 svn,源文件定期手动硬盘备份。
    wangyzj
        17
    wangyzj  
       2020-04-16 00:35:46 +08:00
    写一个 shell
    每个月第一天手动 add 一下
    27
        18
    27  
       2020-04-16 00:47:11 +08:00
    本项目 ignore deps 文件夹
    把文件夹 ln -s 或用 crontab 定时复制到另一个 git repo
    msg7086
        19
    msg7086  
       2020-04-16 02:49:31 +08:00 via Android
    git 可以干但是这种场景似乎不是 git 该干的活。最好还是单独做备份工作。
    reus
        20
    reus  
       2020-04-16 09:35:24 +08:00 via Android
    临时删掉.gitignore 文件不就行了,提交之后再放回去。
    no1xsyzy
        21
    no1xsyzy  
       2020-04-16 15:50:43 +08:00
    @reus #20 我楞是没明白你这工作流是什么样的……
    在同一个 branch 里?就算 ignore 了,commit -a 或者 add . 都是会添加曾经 commit 过的文件的。
    xingheng
        22
    xingheng  
       2020-04-16 16:03:30 +08:00
    submodule 不行的话,还可以 subtree 嘛
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1193 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 17:41 PVG 01:41 LAX 09:41 JFK 12:41
    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