GIT 能不能两个分支共享文件

41 天前
 ZedRover

我希望两个分支 src 文件夹下的文件各自开发,test 文件夹下的文件在一个分支更新时另一个分支也自动更新,git 能否实现这种功能。如果 git 不能实现,有什么其他的工具能够实现么?

chatgpt 的回答感觉都不太方便。

使用子模块( Git Submodules ) 一个可能的解决方案是将 test 文件夹作为一个独立的 Git 仓库(子模块),然后在你的主仓库中以子模块的形式引入它。这样,不管是在哪个分支上对 test 子模块进行更新,只要提交了更新并推送到远程仓库,其他分支就可以通过更新子模块来获取这些更改。

创建 test 的独立仓库:首先,你需要将 test 文件夹提取出来,使其成为一个独立的 Git 仓库。 在主仓库中添加子模块:然后,在你的主仓库中,使用 git submodule add <repository-url> <path>命令添加这个 test 仓库作为子模块。 更新子模块:当 test 仓库更新后,你需要在主仓库中手动更新子模块引用,通常是通过 git submodule update --remote 命令。 使用 Git Hooks 另一个方案是使用 Git 钩子( hooks ),特别是 pre-commit 钩子,在每次提交前自动检查 test 文件夹的更改,并将这些更改复制到另一个分支。这种方法需要编写自定义脚本,并且可能会复杂且难以管理。

使用外部同步工具 如果这些 Git 内置的解决方案不满足需求,你可以考虑使用外部的文件同步工具,比如 rsync (适用于 Unix-like 系统),或者开发一个自定义的脚本,用来监控 test 文件夹的更改,并自动将这些更改同步到其他分支或仓库。这可能涉及到复杂的逻辑,特别是在处理并发更改和冲突解决时。

考虑工作流调整 最后,值得考虑的是,如果你经常需要在分支之间同步特定文件夹的更改,可能需要重新考虑你的开发工作流。可能的调整包括重新组织项目结构,使得需要同步的文件夹更容易管理,或者调整团队的分支策略,以减少需要这种类型同步的场景。

总的来说,虽然 Git 不直接支持你描述的自动同步功能,但通过一些创造性的工作流管理和外部工具的辅助,可以实现类似的效果。每种方法都有其优缺点,选择哪一种取决于你的具体需求和团队工作流。

2000 次点击
所在节点    git
13 条回复
huangsijun17
41 天前
要么把 test 放到第三个分支,要么用 CI/CD 工具去手动同步。
kera0a
41 天前
子模块应该可以吧

或者 test 文件夹从 git 中排除,让 git 不要管理,这样每个分支的代码都访问同一份 test 。

然后 test 传到你用的语言的包管理工具,有更新自动拉取,或你自己写个自动脚本。
hello2090
41 天前
clearcase 可以😁
nulIptr
41 天前
可以参考算法做微调的时候的做法吗,test 文件夹是 nas 之类的远程文件系统。所有人都操作这个玩意
jgh004
41 天前
不能
zhtyytg
41 天前
需求:两个分支 src 文件夹下的文件各自开发,test 文件夹下的文件在一个分支更新时另一个分支也自动更新。
分析:其实你只是希望 test 独立于 src 管理
src 里面的作为 submodule ,test 还是在根目录 git 上,是否可以满足?
dallaslu
40 天前
submodule
52icarus
40 天前
这种需求其实是 svn 的强项. 使用 svn 外链来比较方便.如果是使用 git .其实使用 submodule 也不方便.不如直接用 mklink 来做个链接(windows). linux macos 可以直接用软链接
realJamespond
40 天前
gitignore 加上要共享的文件,然后在 githook 里 pull 时 rsync 或其它方法同步这个文件
tuutoo
40 天前
那两个仓库。一个库把 test 在 gitignore 中排除,把 test 目录用另一个仓库去管理。
ETiV
40 天前
如果你有 remote 的话,在 remote 做 hook 就行:a 分支目录有变更就往 b 分支的相同路径同步内容,反之 b 有变更就往 a 同步

不推荐在本地做 hook:烦在每个人都需要做一次

remote 一般只有一个,GitHub Action 啥的都可以实现
shizhibuyu2023
40 天前
从两个分支的公共 base 创建一个公共分支 Father 出来,从 Father 上 拉一个开发分支 Child 出来,把你需要同步的文件放到 Child 上,C 合并到 F 之后自动同步到你的两个开发分支
至于怎么自动,自己研究下吧,最次也能写脚本调 openapi 实现。
MAGA2022
20 天前
我觉得你要的是 git worktree
https://git-scm.com/docs/git-worktree

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1028084

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX