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 · 3364 次点击
    这是一个创建于 1683 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    • 假设有一个项目
    - 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 的仓库之后还要更新外面的仓库
    tairan2006
        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   ·   实用小工具   ·   2772 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 08:11 · PVG 16:11 · LAX 00:11 · JFK 03:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.